Python编程从⼊门到实践(第2版)练习14-4
要求在游戏《外星⼈⼊侵》中设置不同的难度等级,并增加让玩家选择起始难度等级的功能。
我认为练习的要求可以拆解为以下⼏点:
1,设置⼏个不同的难度等级可供玩家选择。
2,玩家只能在游戏处于停⽌状态的情况下选择难度等级,游戏进⾏中不能更改。
3,游戏开始后选择难度等级之后,如果游戏失败进⼊停⽌状态,在点击"Play"按钮后,游戏的节奏仍然是该难度等级下的初始状态。
4,存在⼀个默认的难度等级。玩家如果运⾏游戏后直接点击Play"按钮,游戏以此默认的难度等级开始进⾏。
个⼈认为这其实是有⼀定难度的,主要在于要设置游戏存在⼀个默认的难度等级,⽽⼀旦玩家选择了其他的难度等级之后,设若游戏失败了重新开始游戏时⼜还能够以玩家选择的这个难度等级继续进⾏游戏。(如果做不到这两点,则个⼈认为游戏是不够智能的)
我的思路是使⽤条件测试语句来解决问题。
⾸先在Settings类中的__init__初始参数中增加如下⼏个难度判断符号。
#默认游戏难度为normal
self.easy = False
self.hard = False
然后再在Settings类中增加如下4个⽅法,它包含⼀个根据游戏难度判断符号来调⽤游戏参数的⽅法,以及三个可供选择的不同等级的游戏参数(我增加了不同难度等级的⼦弹颜⾊,这样⽅便快速检查当前游戏的难度等级,同时将代表外星⼈移动⽅向的fleet_direction放在了Settings类的__init__初始参数之中)。
def initialize_dynamic_settings(self):
"""设置游戏不同等级难度"""
if self.easy:
self._easy_settings()
al:
self._normal_settings()
elif self.hard:
self._hard_settings()
def _easy_settings(self):
"""easy游戏难度的设置"""
self.ship_speed = 0.6
self.bullet_color = (0, 0, 255)
self.bullet_speed = 2
self.alien_speed = 0.15
self.fleet_drop_speed = 10
def _normal_settings(self):
"""normal游戏难度的设置"""
self.ship_speed = 0.8
self.bullet_color = (0, 0, 0)
self.bullet_speed = 2
self.alien_speed = 0.2
self.fleet_drop_speed = 15
def _hard_settings(self):
"""hard游戏难度的设置"""
self.ship_speed = 1
self.bullet_color = (255, 0, 0)
self.bullet_speed = 2
self.alien_speed = 0.25
self.fleet_drop_speed = 20
然后删掉Settings类中__init__初始参数对于initialize_dynamic_settings⽅法的调⽤,因为对于改⽅法的调⽤可以放在游戏Play按钮中进⾏。
接着就是增加游戏主AlienInvasion类对于游戏难度参数的调⽤⽅式。
python编程:从入门到实践第二版⾸先在_start_game⽅法中调⽤initialize_dynamic_settings⽅法,可以放在rest_stats之后。增加后的_start_game⽅法如下:
def _start_game(self):
"""开始运⾏游戏"""
#重置游戏统计信息。
st_stats()
self.settings.initialize_dynamic_settings()
self.stats.game_active = True
#清空余下的外星⼈和⼦弹。
pty()
pty()
#创建⼀新的外星⼈,并让飞船居中。
self._create_fleet()
_ship()
#隐藏⿏标光标。
然后再在响应按键的_check_keydown_events⽅法中增加调整settings中的游戏难度判断符号的值的⽅法,增加后后
_check_keydown_events⽅法如下:
def _check_keydown_events(self, event):
"""响应按键。"""
#按左右键控制飞船移动
if event.key == pygame.K_RIGHT:
ving_right = True
elif event.key == pygame.K_LEFT:
ving_left = True
#按q键退出游戏
elif event.key == pygame.K_q:
#按空格键控制飞船发射⼦弹
elif event.key == pygame.K_SPACE:
self._fire_bullet()
#按在游戏停⽌的情况下,按p键开始游戏
elif event.key == pygame.K_p and not self.stats.game_active:
self._start_game()
#在游戏停⽌的情况下,按e、n、h键调整游戏的难度
elif event.key == pygame.K_e and not self.stats.game_active:
self.settings.easy = True
al = False
self.settings.hard = False
elif event.key == pygame.K_n and not self.stats.game_active:
self.settings.easy = False
al = True
self.settings.hard = False
elif event.key == pygame.K_h and not self.stats.game_active:
self.settings.easy = False
al = False
self.settings.hard = True
需要注意的是,我将settings.initialize_dynamic_settings⽅法的调⽤放在了_start_game中⽽不是_check_play_button⽅法中。这样,就实现了练习要求的功能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论