今天真是非常疲惫的一天,逻辑学的书到啦!正式入坑,赶紧学完今天的内容我要去入坑啦。
1.3 重构
在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。在本节中,我们将创建一个名为game_functions 的新模块,它将存储大量让游戏《外星人入侵》运行的函数。通过创建模块game_functions ,可避免alien_invasion.py太长,并使其逻辑更容易理解。
1.3.1 函数check_events()
我们将首先把管理事件的代码移到一个名为check_events() 的函数中,以简化run_game() 并隔离事件管理循环。通过隔离事件循环,可将事件管理与游戏的其他方面(如更新屏幕)分离。
将check_events() 放在一个名为game_functions 的模块中:
import sys
import pygame
def check_events():
#响应案件和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
这个模块中导入了事件检查循环要使用的sys 和pygame 。当前,函数check_events() 不需要任何形参,其函数体复制了alien_invasion.py的事件循环。
下面来修改alien_invasion.py,使其导入模块game_functions ,并将事件循环替换为对函数check_events() 的调用:
import pygame
from setting import Settings
from ship import Ship
import game_functions as gf
def rungame():
#初始化游戏并创建一个屏幕对象
pygame.init()
#实例化设置对象
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
#创建一只飞船
ship = Ship(screen)
#开始游戏主循环
while True:
gf.check_events()
#每次循环时都重绘屏幕
screen.fill(ai_settings.bg_color)
# 屏幕上绘制飞船
ship.blitme()
#让最近绘制的屏幕可见#
pygame.display.flip()
rungame()
导入自定义模块前一定要保存那个要导入的模块再导入!!!不然会报错!!!
1.3.2 函数update_screen()
为进一步简化run_game() ,下面将更新屏幕的代码移到一个名为update_screen() 的函数中,并将这个函数放在模块game_functions.py 中:
import sys
import pygame
def check_events():
#响应案件和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
def update_screen(ai_settings,screen,ship):
#每次循环时都重绘屏幕
screen.fill(ai_settings.bg_color)
# 屏幕上绘制飞船
ship.blitme()
#让最近绘制的屏幕可见#
pygame.display.flip()
新函数update_screen() 包含三个形参:ai_settings 、screen 和ship 。现在需要将alien_invasion.py的while 循环中更新屏幕的代码替换为对函数update_screen()
的调用:
import pygame
from setting import Settings
from ship import Ship
import game_functions as gf
def rungame():
#初始化游戏并创建一个屏幕对象
pygame.init()
#实例化设置对象
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
#创建一只飞船
ship = Ship(screen)
#开始游戏主循环
while True:
gf.check_events()
gf.update_screen(ai_settings,screen,ship)
rungame()
这两个函数让while 循环更简单,并让后续开发更容易:在模块game_functions 而不是run_game() 中完成大部分工作。
鉴于我们一开始只想使用一个文件,因此没有立刻引入模块game_functions 。这让你能够了解实际的开发过程:一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。
对代码进行重构使其更容易扩展后,明天可以开始处理游戏的动态方面了!
溜了溜了!夯实基础去咯!
网友评论