📜  pygame python 射击游戏教程 - Python (1)

📅  最后修改于: 2023-12-03 15:33:49.870000             🧑  作者: Mango

Pygame Python 射击游戏教程

Pygame 是一个用于制作游戏的 python 库。在这个教程中,我们将创建一个简单的射击游戏。我们将演示如何使用 pygame 库来创建游戏,并向您介绍一些常用的 pygame 函数和方法。

准备工作

在开始创建游戏之前,您需要安装 pygame 库。您可以通过以下命令在终端中安装 pygame:

pip install pygame
创建 Pygame 窗口

在 pygame 中,我们使用 Pygame 的 display 模块来创建窗口。以下是如何创建一个简单的 Pygame 窗口:

import pygame

pygame.init()

# 创建窗口
window = pygame.display.set_mode((500,500))

# 游戏循环
while True:
    # 事件循环
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    # 刷新窗口
    pygame.display.update()
添加背景

在游戏中添加背景是很重要的。在 Pygame 中,我们可以使用 Pygame 的 surface 模块来创建一个背景,并将其放置在窗口中。以下是如何添加一个简单的背景:

# 创建背景
background = pygame.Surface(window.get_size())
background.fill((255, 255, 255))

# 将背景放置在窗口中
window.blit(background, (0, 0))
创建角色

在我们的射击游戏中,我们需要一个玩家角色和一些敌人。在 Pygame 中,我们可以使用 Pygame 的 sprite 模块来创建角色。以下是如何创建一个玩家角色:

# 创建玩家角色
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()

        self.image = pygame.Surface((50, 50))
        self.image.fill((0, 255, 0))

        self.rect = self.image.get_rect()

        self.rect.x = 225
        self.rect.y = 450

    def update(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            self.rect.x -= 5
        elif keys[pygame.K_RIGHT]:
            self.rect.x += 5

# 将玩家角色添加到精灵组中
player = Player()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
创建敌人

我们还需要一些敌人来让游戏变得更有挑战性。在 Pygame 中,我们可以创建敌人角色,并使用精灵组来管理它们。以下是如何创建一个简单的敌人:

# 创建敌人角色
class Enemy(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.x = 225
        self.rect.y = 50

    def update(self):
        self.rect.y += 3

        if self.rect.y > 500:
            self.rect.y = -50

# 将敌人添加到精灵组中
enemies = pygame.sprite.Group()
for i in range(0, 5):
    enemy = Enemy()
    enemy.rect.x += i * 100
    enemies.add(enemy)
all_sprites.add(enemies)
碰撞检测

在我们的游戏中,我们需要检测玩家是否与敌人碰撞。在 Pygame 中,我们可以使用 Pygame 的 sprite 模块来检测碰撞。以下是如何检测玩家是否与敌人碰撞:

# 碰撞检测
if pygame.sprite.spritecollide(player, enemies, False):
    print("Game Over")
    pygame.quit()
    quit()
添加射击

最后,我们需要添加一些射击。在 Pygame 中,我们可以使用 Pygame 的 sprite 模块来创建子弹,并在游戏循环中更新它们。以下是如何添加一个简单的射击功能:

# 创建子弹角色
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()

        self.image = pygame.Surface((10, 20))
        self.image.fill((255, 255, 0))

        self.rect = self.image.get_rect()

        self.rect.x = x
        self.rect.y = y

    def update(self):
        self.rect.y -= 5

# 射击
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    bullet = Bullet(player.rect.x + 20, player.rect.y - 20)
    bullets.add(bullet)
    all_sprites.add(bullet)

# 更新子弹
bullets.update()
完整代码
import pygame

pygame.init()

# 创建窗口
window = pygame.display.set_mode((500,500))

# 创建背景
background = pygame.Surface(window.get_size())
background.fill((255, 255, 255))

# 创建玩家角色
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()

        self.image = pygame.Surface((50, 50))
        self.image.fill((0, 255, 0))

        self.rect = self.image.get_rect()

        self.rect.x = 225
        self.rect.y = 450

    def update(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            self.rect.x -= 5
        elif keys[pygame.K_RIGHT]:
            self.rect.x += 5

# 创建敌人角色
class Enemy(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.x = 225
        self.rect.y = 50

    def update(self):
        self.rect.y += 3

        if self.rect.y > 500:
            self.rect.y = -50

# 创建子弹角色
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()

        self.image = pygame.Surface((10, 20))
        self.image.fill((255, 255, 0))

        self.rect = self.image.get_rect()

        self.rect.x = x
        self.rect.y = y

    def update(self):
        self.rect.y -= 5

# 将角色添加到精灵组中
player = Player()
enemies = pygame.sprite.Group()
bullets = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)

# 将敌人添加到精灵组中
for i in range(0, 5):
    enemy = Enemy()
    enemy.rect.x += i * 100
    enemies.add(enemy)
all_sprites.add(enemies)

# 游戏循环
while True:
    # 事件循环
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        # 射击
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            bullet = Bullet(player.rect.x + 20, player.rect.y - 20)
            bullets.add(bullet)
            all_sprites.add(bullet)

    # 更新玩家角色
    player.update()

    # 更新敌人角色
    enemies.update()

    # 更新子弹
    bullets.update()

    # 碰撞检测
    if pygame.sprite.spritecollide(player, enemies, False):
        print("Game Over")
        pygame.quit()
        quit()

    # 渲染画面
    window.blit(background, (0, 0))
    all_sprites.draw(window)

    # 刷新窗口
    pygame.display.update()
总结

在本教程中,我们介绍了如何使用 Pygame 创建一个简单的射击游戏,并学习了 Pygame 中许多常用的函数和方法。虽然这只是一个简单的示例程序,但它可以作为您开始使用 Pygame 的起点。我们希望您能够继续探索 Pygame 并创造出更出色的游戏!