更新 'Alien_Invasion.py'
This commit is contained in:
parent
c42975c623
commit
c66fdb345f
|
@ -74,11 +74,10 @@ class AlienInvasion:
|
|||
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
|
||||
self.aliens.add(alien)
|
||||
|
||||
def run_game(self):
|
||||
def run_game(self):
|
||||
"""开始游戏的主循环"""
|
||||
while True:
|
||||
self._check_events()
|
||||
self.ship.update()
|
||||
|
||||
if self.stats.game_active:
|
||||
self.ship.update()
|
||||
|
@ -86,7 +85,6 @@ class AlienInvasion:
|
|||
self._update_aliens()
|
||||
|
||||
self._update_screen()
|
||||
# 监视键盘和鼠标事件
|
||||
|
||||
def _update_aliens(self):
|
||||
"""
|
||||
|
@ -167,7 +165,6 @@ class AlienInvasion:
|
|||
self.aliens.empty()
|
||||
self.bullets.empty()
|
||||
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
# 创建一群新的外星人并让飞船居中
|
||||
self._create_fleet()
|
||||
self.ship.center_ship()
|
||||
|
@ -179,7 +176,6 @@ class AlienInvasion:
|
|||
"""响应按键"""
|
||||
if event.key == pygame.K_RIGHT:
|
||||
self.ship.moving_right = True
|
||||
elif event.key == pygame.K_LEFT:
|
||||
elif event.key == pygame.K_LEFT:
|
||||
self.ship.moving_left = True
|
||||
elif event.key == pygame.K_q:
|
||||
|
@ -187,14 +183,11 @@ class AlienInvasion:
|
|||
elif event.key == pygame.K_SPACE:
|
||||
self._fire_bullet()
|
||||
|
||||
elif event.type == pygame.KEYUP:
|
||||
def _check_keyup_events(self,event):
|
||||
"""响应松开"""
|
||||
if event.key == pygame.K_RIGHT:
|
||||
self.ship.moving_right = False
|
||||
self.ship.moving_right = False
|
||||
elif event.key == pygame.K_LEFT:
|
||||
self.ship.moving_left = False
|
||||
self.ship.moving_left = False
|
||||
|
||||
def _fire_bullet(self):
|
||||
|
@ -203,25 +196,67 @@ class AlienInvasion:
|
|||
new_bullet = Bullet(self)
|
||||
self.bullets.add(new_bullet)
|
||||
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_RIGHT:
|
||||
self.ship.moving_right = True
|
||||
elif event.key == pygame.K_LEFT:
|
||||
self.ship.moving_left = True
|
||||
|
||||
elif event.type == pygame.KEYUP:
|
||||
if event.key == pygame.K_RIGHT:
|
||||
self.ship.moving_right = False
|
||||
elif event.key == pygame.K_LEFT:
|
||||
self.ship.moving_left = False
|
||||
|
||||
def _update_screen(self):
|
||||
self.screen.fill(self.settings.bg_color) # 每次循环时都重绘屏幕
|
||||
"""更新屏幕上的图像,并切换到新屏幕"""
|
||||
self.screen.fill(self.settings.bg_color)
|
||||
self.ship.blitme()
|
||||
for bullet in self.bullets.sprites():
|
||||
bullet.draw_bullet()
|
||||
self.aliens.draw(self.screen)
|
||||
|
||||
# 显示得分
|
||||
self.sb.show_score()
|
||||
|
||||
# 如果游戏处于非活动状态,就绘制Play按钮
|
||||
if not self.stats.game_active:
|
||||
self.play_button.draw_button()
|
||||
|
||||
# 让最近绘制的屏幕可见
|
||||
pygame.display.flip()
|
||||
|
||||
if __name__ == '__main__': # 创建游戏实例并运行游戏
|
||||
def _check_fleet_edges(self):
|
||||
"""有外星人到达边缘时采取相应的措施"""
|
||||
for alien in self.aliens.sprites():
|
||||
if alien.check_edges():
|
||||
self._change_fleet_direction()
|
||||
break
|
||||
|
||||
def _change_fleet_direction(self):
|
||||
"""将整个外星人下移,并改变它们的方向"""
|
||||
for alien in self.aliens.sprites():
|
||||
alien.rect.y += self.settings.fleet_drop_speed
|
||||
self.settings.fleet_direction *= -1
|
||||
|
||||
def _ship_hit(self):
|
||||
"""响应飞船被外星人撞到"""
|
||||
if self.stats.ships_left > 0:
|
||||
# 将ships_left减一并更新记分牌
|
||||
self.stats.ships_left -= 1
|
||||
self.sb.prep_ships()
|
||||
|
||||
# 清空余下的外星人和子弹
|
||||
self.aliens.empty()
|
||||
self.bullets.empty()
|
||||
|
||||
# 创建一群新的外星人,并将飞船放到屏幕底端的中央
|
||||
self._create_fleet()
|
||||
self.ship.center_ship()
|
||||
|
||||
# 暂停
|
||||
sleep(0.5)
|
||||
else:
|
||||
self.stats.game_active = False
|
||||
pygame.mouse.set_visible(True)
|
||||
|
||||
def _check_aliens_bottom(self):
|
||||
"""检查是否有外星人到达了屏幕底端"""
|
||||
screen_rect = self.screen.get_rect()
|
||||
for alien in self.aliens.sprites():
|
||||
if alien.rect.bottom >= screen_rect.bottom:
|
||||
# 像飞船被撞到一样处理
|
||||
self._ship_hit()
|
||||
break
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 创建游戏实例并运行游戏
|
||||
ai = AlienInvasion()
|
||||
ai.run_game()
|
Loading…
Reference in New Issue