Python开发《外星人入侵》游戏项目,付详细代码和注释

本文介绍了使用Python的pygame库开发《外星人入侵》游戏的过程。玩家通过控制飞船左右移动并射击外星人,清除全部外星人后难度升级。当外星人碰撞飞船或触底时,玩家会损失飞船,三次损失后游戏结束。项目包括多个模块文件,如settings.py、ship.py、bullet.py等,详细代码和说明旨在帮助初学者理解游戏开发。
摘要由CSDN通过智能技术生成

游戏功能概述:在游戏《外星人入侵》中,玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键射击。游戏开始时,一群外星人出现在天空中,并向屏幕下方移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将出现一群新的外星人,其移动速度更快。只要有外星人撞到玩家的飞船或到达屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。

----该项目来源《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()

            
好的,我可以为您提供一个简单的外星人入侵游戏Python 代码示例。以下是代码: ```python import pygame import random # 初始化游戏 pygame.init() # 设置游戏窗口的大小 screen_width = 800 screen_height = 600 screen = pygame.display.set_mode((screen_width, screen_height)) # 设置游戏的标题 pygame.display.set_caption("外星人入侵游戏") # 加载游戏背景 background = pygame.image.load('bg.jpg') # 加载玩家的飞船 player = pygame.image.load('player.png') player_width = player.get_width() player_height = player.get_height() player_x = (screen_width - player_width) / 2 player_y = screen_height - player_height - 20 # 加载敌人的飞船 enemy = pygame.image.load('enemy.png') enemy_width = enemy.get_width() enemy_height = enemy.get_height() enemy_x = random.randint(0, screen_width - enemy_width) enemy_y = - enemy_height enemy_speed = 3 # 加载子弹 bullet = pygame.image.load('bullet.png') bullet_width = bullet.get_width() bullet_height = bullet.get_height() bullet_x = 0 bullet_y = -1 bullet_speed = 5 bullet_state = "ready" # 设置游戏循环 running = True while running: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player_x -= 5 if event.key == pygame.K_RIGHT: player_x += 5 if event.key == pygame.K_SPACE: if bullet_state == "ready": bullet_x = player_x + player_width / 2 - bullet_width / 2 bullet_y = player_y bullet_state = "firing" # 移动敌人的飞船 enemy_y += enemy_speed if enemy_y > screen_height: enemy_x = random.randint(0, screen_width - enemy_width) enemy_y = -enemy_height # 移动子弹 if bullet_state == "firing": bullet_y -= bullet_speed if bullet_y < 0: bullet_state = "ready" # 检测子弹是否击中敌人 if bullet_state == "firing": if bullet_x + bullet_width > enemy_x and bullet_x < enemy_x + enemy_width and bullet_y < enemy_y + enemy_height: bullet_state = "ready" enemy_x = random.randint(0, screen_width - enemy_width) enemy_y = -enemy_height # 将游戏元素绘制到屏幕上 screen.blit(background, (0, 0)) screen.blit(player, (player_x, player_y)) screen.blit(enemy, (enemy_x, enemy_y)) if bullet_state == "firing": screen.blit(bullet, (bullet_x, bullet_y)) # 更新屏幕显示 pygame.display.update() # 结束游戏 pygame.quit() ``` 这是一个非常简单的游戏,玩家需要控制飞船躲避敌人的攻击并且射杀敌人。游戏代码中有一些注释,以帮助您理解每个部分的作用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值