@websec007
2020-06-19T11:34:03.000000Z
字数 1974
阅读 933
2020.Python从入门到实践
回顾一个游戏对象创建的 “3+1 过程”,我们可以看到“外星人舰队实例已经创建完成”,现在需要完成的核心步骤是:(2)&(3)
,以及其配套的“基础类”中新的属性
和方法
的定义创建;
1.1 1个基础类
1.2 3个核心步骤
为了实现外星人舰队的移动控制实现,对原Alien类进行新的“属性”和“方法”的添加。
++++++++++++++++++++++settings.py+++++++++++++++++++++++++
# 添加外星人屬性
# 舰队移动方向控制属性
self.fleet_direction = 1
# 舰队下移速度控制属性
self.fleet_drop_speed = 10
# 外星人移动影响因子
self.alien_speed_factor = 1
++++++++++++++++++++++Alien.py+++++++++++++++++++++++++
class Alien(Sprite):
.
.
.
def update(self):
"""外星人左右移动更新方法创建"""
self.x += self.game_settings.alien_speed_factor*self.game_settings.fleet_direction
self.rect.x = self.x
def check_edges(self):
if self.rect.right >= self.screen.get_rect().right:
return True
elif self.rect.left <= 0:
return True
前面已经全部完成了,这就不在重复贴内容了,具体内容请见13.4章节内容。
(@ check_fleet_edges())
;(@aliens.update())
;++++++++++++++++++++gf.check_fleet_edges++++++++++++++++++++++
def change_fleet_direction(aliens, game_settings):
"""改变舰队移动方向前,先下移整个舰队"""
for alien in aliens.sprites():
alien.rect.y += game_settings.fleet_drop_speed
"""舰队整体下移后,随即改变舰队移动方向"""
game_settings.fleet_direction *= -1
def check_fleet_edges(aliens, game_settings):
"""外星人舰队所有成员碰壁检查,只要有一个碰壁事件发生,即刻调整舰队移动方向"""
for alien in aliens.sprites():
if alien.check_edges():
change_fleet_direction(aliens, game_settings)
break
++++++++++++++++++++++gf.update_aliens++++++++++++++++++++++++
def update_aliens(aliens, game_settings):
"""外星人碰壁检查,并更新外星人位置"""
check_fleet_edges(aliens, game_settings)
aliens.update()
+++++++++++++++++++++gf.update_screen()+++++++++++++++++++++++
def update_screen(screen, bg_color, ship, bullets, aliens, game_settings):
# Update Game
screen.fill(bg_color)
# 飞船移动更新
ship.update()
# 绘制飞船图像
ship.blitme()
# 子弹组移动更新
update_bullets(bullets)
# 绘制编组中的每一个子弹矩形图形
draw_bullets(bullets)
# 外星人移动更新 ?
update_aliens(aliens, game_settings)
# 绘制外星人
aliens.draw(screen)