目录
13.6.2 响应外星人和飞船碰撞
class GameStats():
"""跟踪游戏的统计信息"""
def __init__(self, ai_settings):
"""初始化统计信息"""
self.ai_settings = ai_settings
1 self.reset_stats()
def reset_stats(self):
"""初始化在游戏运行期间可能变化的统计信息"""
self.ships_left = self.ai_settings.ship_limit
# 飞船设置
self.ship_speed_factor = 1.5
self.ship_limit = 3
--snip--
from settings import Settings
1 from game_stats import GameStats
--snip--
def run_game():
--snip--
pygame.display.set_caption("Alien Invasion")
# 创建一个用于存储游戏统计信息的实例
2 stats = GameStats(ai_settings)
--snip--
# 开始游戏主循环
while True:
--snip--
gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
3 gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets)
--snip--
import sys
1 from time import sleep
import pygame
--snip--
def ship_hit(ai_settings, stats, screen, ship, aliens, bullets):
"""响应被外星人撞到的飞船"""
# 将ships_left减1
2 stats.ships_left -= 1
# 清空外星人列表和子弹列表
3 aliens.empty()
bullets.empty()
# 创建一群新的外星人,并将飞船放到屏幕底端中央
4 create_fleet(ai_settings, screen, ship, aliens)
ship.center_ship()
# 暂停
5 sleep(0.5)
6 def update_aliens(ai_settings, stats, screen, ship, aliens, bullets):
--snip--
# 检测外星人和飞船碰撞
if pygame.sprite.spritecollideany(ship, aliens):
ship_hit(ai_settings, stats, screen, ship, aliens, bullets)
def center_ship(self):
"""让飞船在屏幕上居中"""
self.center = self.screen_rect.centerx
注意
我们根本没有创建多艘飞船,在整个游戏运行期间,我们都只创建了一个飞船实例,并 在该飞船被撞到时将其居中。统计信息ships_left让我们知道飞船是否用完。
13.6.3 有外星人到达屏幕底端
def check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets):
"""检查是否有外星人到达了屏幕底端"""
screen_rect = screen.get_rect()
for alien in aliens.sprites():
1 if alien.rect.bottom >= screen_rect.bottom:
# 像飞船被撞到一样进行处理
ship_hit(ai_settings, stats, screen, ship, aliens, bullets)
break
def update_aliens(ai_settings, stats, screen, ship, aliens, bullets):
--snip--
# 检查是否有外星人到达屏幕底端
2 check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets)
13.6.4 游戏结束
def __init__(self, settings):
--snip--
# 游戏刚启动时处于活动状态
self.game_active = True
def ship_hit(ai_settings, stats, screen, ship, aliens, bullets):
"""响应飞船被外星人撞到"""
if stats.ships_left > 0:
# 将ships_left减1
stats.ships_left -= 1
--snip--
#暂停一会儿
sleep(0.5)
else:
stats.game_active = False
13.7 确定应运行游戏的哪些部分
# 开始游戏主循环
while True:
gf.check_events(ai_settings, screen, ship, bullets)
if stats.game_active:
ship.update()
gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets)
gf.update_screen(ai_settings, screen, ship, aliens, bullets)
13.8 小结
第14 章
记 分
14.1 添加 Play 按钮
def __init__(self, ai_settings):
"""初始化统计信息"""
self.ai_settings = ai_settings
self.reset_stats()
# 让游戏一开始处于非活动状态
self.game_active = False
def reset_stats(self):
--snip--
关于“Python”的核心知识点整理大全35-CSDN博客
关于“Python”的核心知识点整理大全34-CSDN博客
关于“Python”的核心知识点整理大全33-CSDN博客
关于“Python”的核心知识点整理大全32-CSDN博客
关于“Python”的核心知识点整理大全31-CSDN博客
关于“Python”的核心知识点整理大全30-CSDN博客
关于“Python”的核心知识点整理大全29-CSDN博客
关于“Python”的核心知识点整理大全28-CSDN博客
关于“Python”的核心知识点整理大全27-CSDN博客
关于“Python”的核心知识点整理大全26-CSDN博客
关于“Python”的核心知识点整理大全25-CSDN博客
关于“Python”的核心知识点整理大全12-CSDN博客