用法分析
在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。在本节中,我们将创建一个名为game_functions 的新模块,它将存储大量让游戏《外星人入侵》运行的函数。通过创建模块game_functions ,可避免alien_invasion.py太长,并使其逻辑更容易理解。
将check_events() 和update_screen放在一个名为game_functions 的模块中
代码实例
#======================================================
#功能:game_functions类
#作者:python小哥#时间:2020-7-5
#微信公众号:DJXY00001
#微信名称:Python提升课堂#Version:1.0
#======================================================
import sysimport pygamedef 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()
这个模块中导入了事件检查循环要使用的sys 和pygame 。当前,函数check_events() 不需要任何形参,其函数体复制了alien_invasion.py的事件循环。
下面来修改alien_invasion.py,使其导入模块game_functions ,并将事件循环替换为对函数check_events() 的调用。屏幕更新代码替换为update_screen函数。
#======================================================#功能:alien_invasion类
#作者:python小哥#时间:2020-7-5
#微信公众号:DJXY00001
#微信名称:Python提升课堂#Version:1.0
#======================================================
import pygamefrom settings import Settingsfrom ship import Shipimport game_functions as gfdef run_game():--snip--# 开始游戏主循环while True:gf.check_events()gf.update_screen(ai_settings, screen, ship)
其中--snip--代表延续前节的内容。
在主程序文件中,不再需要直接导入sys ,因为当前只在模块game_functions 中使用了它。出于简化的目的,我们给导入的模块game_functions 指定了别名gf 。
代码运行输出:
我们一开始只想使用一个文件,因此没有立刻引入模块game_functions 。这让你能够了解实际的开发过程:一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。
对代码进行重构使其更容易扩展后,可以开始处理游戏的动态方面了!
说明:关注本公众号,回复数字,得对应年月讲解案例的所有代码,规则为年的后两位+月份
如:2002,代表2020年2月,2003,代表2020年3月,依此类推(代码从2020年2月开始,截止目前月份的上一个月为止)
长按二维码
查看更多吧