游戏功能概述:在游戏《外星人入侵》中,玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键射击。游戏开始时,一群外星人出现在天空中,并向屏幕下方移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,其移动速度更快。只要有外星人撞到玩家的飞船或到达屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。
----该项目来源《Python编程从入门到实践》
首先在系统中,新建一个名为alien_invasion的工作文件夹,后续将在该文件下建立下述文件:
其中alien_invasion的工作文件夹下的images文件夹包含飞船和外星人图片:
ship.bmp
alien.bmp
下附各文件的详细代码:
若不会安装Pygame,请看这篇博客: 如何在Anaconda安装Pygame_Xx_Studying的博客-CSDN博客
alien_invation.py
import sys # 玩家退出时,使用sys模块工具退出
from time import sleep
import pygame # 模块pygame包含开发游戏所需的功能
from settings import Settings
from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button
from ship import Ship
from bullet import Bullet
from alien import Alien
class AlienInvasion:
"""管理游戏资源和行为的类"""
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") # 设置屏幕标题
# 创建存储游戏统计信息的实例
# 并创建记分牌
self.stats = GameStats(self)
self.sb = Scoreboard(self)
self.ship = Ship(self) # 在创建屏幕后创建一个Ship实例,并将当前的AlienInvasion实例作为参数
self.bullets = pygame.sprite.Group() # 创建一个编组,用于存储所有有效的子弹
self.aliens = pygame.sprite.Group()
self._create_fleet()
# 创建Play按钮
self.play_button = Button(self, "Play")
def run_game(self):
"""开始游戏的主循环"""
while True:
self._check_events()
if self.stats.game_active:
self.ship.update()
self._update_bullets()
self._update_aliens()
self._update_screen()
def _check_events(self):
# 监视键盘和鼠标事件
for event in pygame.event.get(): # 事件循环,pygame.event.get()返回一个列表,包含它上一次被调用后发生的所有事件
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN: # 检测KEYDOWN事件
self._check_keydown_events(event)
elif event.type == pygame.KEYUP:
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()