更新 'Alien_Invasion.py'
This commit is contained in:
parent
22211a4a55
commit
5dfeeb6472
|
@ -11,18 +11,16 @@ from ship import Ship
|
|||
from bullet import Bullet
|
||||
from alien import Alien
|
||||
|
||||
class AlienInvasion:
|
||||
"""管理游戏资源和行为的类"""
|
||||
class AlienInvasion: # 管理游戏资源和行为的类
|
||||
|
||||
def __init__(self):
|
||||
"""初始化游戏并创建游戏资源"""
|
||||
def __init__(self): # 初始化游戏并创建游戏资源
|
||||
pygame.init()
|
||||
self.settings = Settings()
|
||||
|
||||
self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
|
||||
self.settings.screen_width = self.screen.get_rect().width
|
||||
self.settings.screen_height = self.screen.get_rect().height
|
||||
pygame.display.set_caption("Alien Invasion")
|
||||
pygame.display.set_caption("外星人入侵")
|
||||
|
||||
# 创建一个用于存储游戏统计信息的实例
|
||||
# 并创建记分牌
|
||||
|
@ -45,8 +43,7 @@ class AlienInvasion:
|
|||
pygame.mixer.music.load('music/music1.mp3')
|
||||
pygame.mixer.music.play(-1) # 重复循环
|
||||
|
||||
def _create_fleet(self):
|
||||
"""创建外星人群"""
|
||||
def _create_fleet(self): #创建外星人群
|
||||
# 创建一个外星人并计算一行可容纳多少外星人
|
||||
# 外星人的间距为外星人的宽度
|
||||
alien = Alien(self)
|
||||
|
@ -65,8 +62,7 @@ class AlienInvasion:
|
|||
for alien_number in range(number_aliens_x):
|
||||
self._create_alien(alien_number, row_number)
|
||||
|
||||
def _create_alien(self, alien_number, row_number):
|
||||
"""创建一个外星人并将其放在当前行"""
|
||||
def _create_alien(self, alien_number, row_number): # 创建一个外星人并将其放在当前行
|
||||
alien = Alien(self)
|
||||
alien_width,alien_height = alien.rect.size
|
||||
alien.x = alien_width + 2 * alien_width * alien_number
|
||||
|
@ -74,8 +70,7 @@ 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()
|
||||
|
||||
|
@ -86,11 +81,8 @@ class AlienInvasion:
|
|||
|
||||
self._update_screen()
|
||||
|
||||
def _update_aliens(self):
|
||||
"""
|
||||
检查是否有外星人位于屏幕边缘
|
||||
并更新整群外星人的位置
|
||||
"""
|
||||
def _update_aliens(self): # 检查是否有外星人位于屏幕边缘并更新整群外星人的位置
|
||||
|
||||
self._check_fleet_edges()
|
||||
self.aliens.update()
|
||||
|
||||
|
@ -101,8 +93,7 @@ class AlienInvasion:
|
|||
# 检查是否有外星人到达了屏幕底端
|
||||
self._check_aliens_bottom()
|
||||
|
||||
def _update_bullets(self):
|
||||
"""更新子弹的位置并删除消失的子弹"""
|
||||
def _update_bullets(self): # 更新子弹的位置并删除消失的子弹
|
||||
#更新子弹的位置
|
||||
self.bullets.update()
|
||||
|
||||
|
@ -113,8 +104,7 @@ class AlienInvasion:
|
|||
|
||||
self._check_bullet_alien_collisions()
|
||||
|
||||
def _check_bullet_alien_collisions(self):
|
||||
"""响应子弹和外星人碰撞"""
|
||||
def _check_bullet_alien_collisions(self): # 响应子弹和外星人碰撞
|
||||
# 删除发生碰撞的子弹和外星人
|
||||
|
||||
collisions = pygame.sprite.groupcollide(
|
||||
|
@ -134,8 +124,7 @@ class AlienInvasion:
|
|||
self.stats.level += 1
|
||||
self.sb.prep_level()
|
||||
|
||||
def _check_events(self):
|
||||
"""响应按键和鼠标事件"""
|
||||
def _check_events(self): #响应按键和鼠标事件
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
sys.exit()
|
||||
|
@ -147,8 +136,7 @@ class AlienInvasion:
|
|||
mouse_pos = pygame.mouse.get_pos()
|
||||
self._check_play_button(mouse_pos)
|
||||
|
||||
def _check_play_button(self,mouse_pos):
|
||||
"""在玩家单机Play按钮时开始新游戏"""
|
||||
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:
|
||||
# 重置游戏设置
|
||||
|
@ -172,8 +160,7 @@ class AlienInvasion:
|
|||
# 隐藏鼠标光标
|
||||
pygame.mouse.set_visible(False)
|
||||
|
||||
def _check_keydown_events(self, event):
|
||||
"""响应按键"""
|
||||
def _check_keydown_events(self, event): # 响应按键
|
||||
if event.key == pygame.K_RIGHT:
|
||||
self.ship.moving_right = True
|
||||
elif event.key == pygame.K_LEFT:
|
||||
|
@ -183,21 +170,18 @@ class AlienInvasion:
|
|||
elif event.key == pygame.K_SPACE:
|
||||
self._fire_bullet()
|
||||
|
||||
def _check_keyup_events(self,event):
|
||||
"""响应松开"""
|
||||
def _check_keyup_events(self,event): # 响应松开
|
||||
if event.key == pygame.K_RIGHT:
|
||||
self.ship.moving_right = False
|
||||
elif event.key == pygame.K_LEFT:
|
||||
self.ship.moving_left = False
|
||||
|
||||
def _fire_bullet(self):
|
||||
"""创建一颗子弹,并将其加入编组bullets中"""
|
||||
def _fire_bullet(self): # 创建一颗子弹,并将其加入编组bullets中
|
||||
if len(self.bullets) < self.settings.bullets_allowed:
|
||||
new_bullet = Bullet(self)
|
||||
self.bullets.add(new_bullet)
|
||||
|
||||
def _update_screen(self):
|
||||
"""更新屏幕上的图像,并切换到新屏幕"""
|
||||
def _update_screen(self): # 更新屏幕上的图像,并切换到新屏幕
|
||||
self.screen.fill(self.settings.bg_color)
|
||||
self.ship.blitme()
|
||||
for bullet in self.bullets.sprites():
|
||||
|
@ -213,21 +197,18 @@ class AlienInvasion:
|
|||
|
||||
pygame.display.flip()
|
||||
|
||||
def _check_fleet_edges(self):
|
||||
"""有外星人到达边缘时采取相应的措施"""
|
||||
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):
|
||||
"""将整个外星人下移,并改变它们的方向"""
|
||||
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):
|
||||
"""响应飞船被外星人撞到"""
|
||||
def _ship_hit(self): #响应飞船被外星人撞到
|
||||
if self.stats.ships_left > 0:
|
||||
# 将ships_left减一并更新记分牌
|
||||
self.stats.ships_left -= 1
|
||||
|
@ -247,8 +228,7 @@ class AlienInvasion:
|
|||
self.stats.game_active = False
|
||||
pygame.mouse.set_visible(True)
|
||||
|
||||
def _check_aliens_bottom(self):
|
||||
"""检查是否有外星人到达了屏幕底端"""
|
||||
def _check_aliens_bottom(self): #检查是否有外星人到达了屏幕底端
|
||||
screen_rect = self.screen.get_rect()
|
||||
for alien in self.aliens.sprites():
|
||||
if alien.rect.bottom >= screen_rect.bottom:
|
||||
|
|
Loading…
Reference in New Issue