更新 'alien_invasion.py'

This commit is contained in:
206530228 2021-06-24 08:35:15 +08:00
parent f057ae59c4
commit 7a76545e06
1 changed files with 1 additions and 67 deletions

View File

@ -5,8 +5,6 @@ import pygame
from settings import Settings from settings import Settings
from game_stats import GameStats from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button
from ship import Ship from ship import Ship
from bullet import Bullet from bullet import Bullet
from alien import Alien from alien import Alien
@ -25,9 +23,7 @@ class AlienInvasion:
pygame.display.set_caption("Alien Invasion") pygame.display.set_caption("Alien Invasion")
# 创建一个用于存储游戏统计信息的实例 # 创建一个用于存储游戏统计信息的实例
# 并创建记分牌
self.stats = GameStats(self) self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.ship = Ship(self) self.ship = Ship(self)
self.bullets = pygame.sprite.Group() self.bullets = pygame.sprite.Group()
@ -35,12 +31,6 @@ class AlienInvasion:
self._create_fleet() self._create_fleet()
# 创建Play按钮
self.play_button = Button(self,"Play")
# 背景音乐
pygame.mixer.music.load('music/flash.mp3')
pygame.mixer.music.play(-1) # 重复循环
# 设置背景色 # 设置背景色
self.bg_color = (230, 230, 230) self.bg_color = (230, 230, 230)
@ -118,20 +108,11 @@ class AlienInvasion:
collisions = pygame.sprite.groupcollide( collisions = pygame.sprite.groupcollide(
self.bullets, self.aliens, True, True) self.bullets, self.aliens, True, True)
if collisions:
for aliens in collisions.values():
self.stats.score += self.settings.alien_points * len(aliens)
self.sb.prep_score()
if not self.aliens: if not self.aliens:
# 删除现有的子弹并新建一群外星人 # 删除现有的子弹并新建一群外星人
self.bullets.empty() self.bullets.empty()
self._create_fleet() self._create_fleet()
self.settings.increase_speed()
# 提高等级
self.stats.level += 1
self.sb.prep_level()
def _check_events(self): def _check_events(self):
"""响应按键和鼠标事件""" """响应按键和鼠标事件"""
@ -142,34 +123,6 @@ class AlienInvasion:
self._check_keydown_events(event) self._check_keydown_events(event)
elif event.type == pygame.KEYUP: elif event.type == pygame.KEYUP:
self._check_keyup_events(event) self._check_keyup_events(event)
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = pygame.mouse.get_pos()
self._check_play_button(mouse_pos)
def _check_play_button(self,mouse_pos):
"""在玩家单机Play按钮时开始新游戏"""
button_clicked = self.play_button.rect.collidepoint(mouse_pos)
if button_clicked and not self.stats.game_active:
# 重置游戏设置
self.settings.initialize_dynamic_settings()
# 重置游戏统计信息
self.stats.reset_stats()
self.stats.game_active = True
self.sb.prep_score()
self.sb.prep_level()
self.sb.prep_ships()
# 清空余下的外星人和子弹
self.aliens.empty()
self.bullets.empty()
# 创建一群新的外星人并让飞船居中
self._create_fleet()
self.ship.center_ship()
# 隐藏鼠标光标
pygame.mouse.set_visible(False)
def _check_keydown_events(self, event): def _check_keydown_events(self, event):
"""响应按键""" """响应按键"""
@ -203,13 +156,6 @@ class AlienInvasion:
bullet.draw_bullet() bullet.draw_bullet()
self.aliens.draw(self.screen) self.aliens.draw(self.screen)
# 显示得分
self.sb.show_score()
# 如果游戏处于非活动状态就绘制Play按钮
if not self.stats.game_active:
self.play_button.draw_button()
pygame.display.flip() pygame.display.flip()
def _check_fleet_edges(self): def _check_fleet_edges(self):
@ -228,9 +174,8 @@ class AlienInvasion:
def _ship_hit(self): def _ship_hit(self):
"""响应飞船被外星人撞到""" """响应飞船被外星人撞到"""
if self.stats.ships_left > 0: if self.stats.ships_left > 0:
# 将ships_left减一并更新记分牌 # 将ships_left减一
self.stats.ships_left -= 1 self.stats.ships_left -= 1
self.sb.prep_ships()
# 清空余下的外星人和子弹 # 清空余下的外星人和子弹
self.aliens.empty() self.aliens.empty()
@ -244,7 +189,6 @@ class AlienInvasion:
sleep(0.5) sleep(0.5)
else: else:
self.stats.game_active = False self.stats.game_active = False
pygame.mouse.set_visible(True)
def _check_aliens_bottom(self): def _check_aliens_bottom(self):
"""检查是否有外星人到达了屏幕底端""" """检查是否有外星人到达了屏幕底端"""
@ -255,16 +199,6 @@ class AlienInvasion:
self._ship_hit() self._ship_hit()
break break
if __name__ == '__main__':
# 创建游戏实例并运行游戏
ai = AlienInvasion()
ai.run_game()
def _change_fleet_direction(self):
"""将整个外星人下移,并改变它们的方向"""
for alien in self.aliens.sprites():
alien.rect.y += self.settings.fleet_drop_speed
self.settings.fleet_direction *= -1
if __name__ == '__main__': if __name__ == '__main__':
# 创建游戏实例并运行游戏 # 创建游戏实例并运行游戏
ai = AlienInvasion() ai = AlienInvasion()