文件“game_functions.py”存放跟游戏有关的所有业务逻辑函数(分析重点代码),代码如下图:
关于事件的函数:
1.函数“check_keydown_events”,当按下键盘下键“K_DOWN”,移动状态“move_down”为true;当按下键盘上键“K_UP”,移动状态“move_up”为true;当按下空格键“K_SPACE”,播放射击音效和发射子弹;当按下“P”键时(“K_p”),则开始游戏;当按下“Q”键时,则退出程序“sys.exit()”;
2.函数“check_keyup_events”,当松开下键“K_DOWN”,移动状态“move_down”为False;当松开上键“K_UP”,移动状态“move_up”为False;
3.函数“check_play_button”用来点击按钮“Play”开始游戏(执行函数“start_game”清空编组的数据和重置统计信息的数据);
4.函数“check_events”用来响应按键和鼠标事件,当点击屏幕关闭按钮“QUIT”,则保存最高分到文件并退出系统“sys.exit()”;当按键时(KEYDOWN),调用函数“check_keydown_events”;当松开按键时(check_keyup_events),调用函数“check_keyup_events”;当点击鼠标时(MOUSEBUTTONDOWN),判断是否按钮“Play”区域,如果是则调用函数“check_play_button”开始游戏。
关于文件的函数:
1.函数“save_file”用来存储最高分的数据到文件;
关于矩形的函数:
1.函数“create_rect”用来创建单个矩形,注意没有矩形才能创建,所以屏幕一直就只有一个矩形进行移动;
关于子弹的函数:
1.函数“fire_bullet”用来创建单颗子弹,按空格键才创建;
2.函数“check_bullet_rect_collisions”用来检查是否有子弹击中矩形:
1)如果击中,播放爆炸声音(explosiveSound.play());
2)计算得分“settings.score”,注意执行scoreboard.prep_score()来重新渲染分数;
3)调用函数“check_high_score”,如果分数大于最高分,则重新渲染分数到最高分;
4)如果每一关设置的通关数量“settings.level_number”为0,则执行“settings.increase_speed()”来提高速度和分数;
3.函数“update_bullets”:
1)当子弹没有击中矩形时(bullet.rect.right > screen.get_rect().right),删除创建的子弹,并减少可射失的数量(注意执行scoreboard.prep_ships(),不然左上角显示的飞船数量不会更新);
2)当可射失的数量“settings.ship_limit”为0时,停止游戏并显示按钮“Play”。
关于屏幕的函数:
1.函数“update_screen”用来更新屏幕的各种信息。