Python 语言 用 Pygame 制作 2D 飞机大战 玩家飞机 + 敌机 + 子弹碰撞

Python阿木 发布于 2 天前 4 次阅读


Python Pygame 2D 飞机大战游戏开发教程

Pygame 是一个开源的 Python 库,用于创建 2D 游戏和多媒体应用程序。本文将围绕 Python 语言和 Pygame 库,详细讲解如何使用 Pygame 制作一款简单的 2D 飞机大战游戏。游戏将包含玩家飞机、敌机、子弹以及子弹与敌机的碰撞效果。

环境准备

在开始编写代码之前,请确保已经安装了 Python 和 Pygame。可以通过以下命令安装 Pygame:

bash
pip install pygame

游戏设计

游戏元素

1. 玩家飞机:玩家控制的飞机,可以发射子弹。
2. 敌机:随机生成的敌机,被子弹击中后会消失。
3. 子弹:玩家飞机发射的子弹,击中敌机后敌机消失。
4. 背景音乐和音效:游戏背景音乐和子弹发射、敌机被击中的音效。

游戏规则

1. 玩家飞机可以左右移动,但不能离开屏幕。
2. 敌机随机生成,向玩家飞机移动。
3. 玩家飞机发射的子弹可以击中敌机,敌机被击中后消失。
4. 游戏结束条件:玩家飞机被敌机击中或游戏时间结束。

代码实现

1. 初始化 Pygame

python
import pygame
import random

初始化 Pygame
pygame.init()

设置屏幕大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

设置标题
pygame.display.set_caption("2D 飞机大战")

设置帧率
clock = pygame.time.Clock()

2. 定义游戏元素

python
定义玩家飞机类
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
self.rect.centerx = screen_width // 2
self.rect.bottom = screen_height - 10

def update(self):
self.rect.x += self.speedx
if self.rect.right > screen_width:
self.rect.right = screen_width
if self.rect.left screen_height + 10:
self.rect.x = random.randrange(screen_width - self.rect.width)
self.rect.y = random.randrange(-100, -40)

定义子弹类
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((5, 10))
self.image.fill((255, 255, 0))
self.rect = self.image.get_rect()
self.rect.bottom = y
self.rect.centerx = x
self.speedy = -10

def update(self):
self.rect.y += self.speedy
if self.rect.bottom < 0:
self.kill()

3. 游戏主循环

python
创建精灵组
player_group = pygame.sprite.Group()
enemies_group = pygame.sprite.Group()
bullets_group = pygame.sprite.Group()

创建玩家飞机实例
player = Player()
player_group.add(player)

游戏主循环
running = True
while running:
事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.speedx = -5
elif event.key == pygame.K_RIGHT:
player.speedx = 5
elif event.key == pygame.K_SPACE:
bullet = Bullet(player.rect.centerx, player.rect.top)
bullets_group.add(bullet)

更新精灵
player_group.update()
enemies_group.update()
bullets_group.update()

碰撞检测
hits = pygame.sprite.groupcollide(enemies_group, bullets_group, True, True)
for hit in hits:
敌机被击中,随机生成新的敌机
new_enemy = Enemy()
enemies_group.add(new_enemy)

敌机与玩家飞机碰撞检测
hits = pygame.sprite.spritecollide(player, enemies_group, False)
if hits:
running = False

绘制背景
screen.fill((0, 0, 0))

绘制精灵
player_group.draw(screen)
enemies_group.draw(screen)
bullets_group.draw(screen)

更新屏幕
pygame.display.flip()

控制帧率
clock.tick(60)

退出游戏
pygame.quit()

总结

本文详细讲解了如何使用 Python 和 Pygame 库制作一款简单的 2D 飞机大战游戏。通过定义游戏元素、游戏规则和游戏主循环,实现了玩家飞机、敌机和子弹的碰撞效果。在实际开发过程中,可以根据需求添加更多功能和优化游戏性能。希望本文对您有所帮助!