Python 使用Pygame库实现简单松鼠大作战游戏:控制一个角色来击败地图上出现的松鼠,收集宝藏并躲避陷阱

介绍:

在本项目中,我们将使用Python编程语言以及Pygame库来实现一个名为“复杂松鼠大作战”的游戏。游戏的目标是控制一个角色来击败地图上出现的松鼠,收集宝藏并躲避陷阱。

环境设置:

  • Python 3.x
  • Pygame库

项目分布:

  1. 创建游戏窗口
  2. 加载游戏素材
  3. 实现角色移动
  4. 实现松鼠的生成与移动
  5. 实现碰撞检测
  6. 添加宝藏和陷阱
  7. 完善游戏逻辑
  8. 扩展复杂功能

详细代码实现:

1. 创建游戏窗口

# 导入必要的库
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("复杂松鼠大作战")

2. 加载游戏素材

# 定义颜色
WHITE = (255, 255, 255)

# 加载角色图像
player_img = pygame.Surface((50, 50))
player_img.fill(WHITE)

# 加载松鼠图像
squirrel_img = pygame.Surface((30, 30))
squirrel_img.fill(WHITE)

# 加载宝藏图像
treasure_img = pygame.image.load("treasure.png").convert_alpha()

# 加载陷阱图像
trap_img = pygame.image.load("trap.png").convert_alpha()

3. 实现角色移动

# 定义角色类
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = player_img
        self.rect = self.image.get_rect()
        self.rect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)

    def update(self):
        # 处理角色移动
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 5
        if keys[pygame.K_RIGHT]:
            self.rect.x += 5
        if keys[pygame.K_UP]:
            self.rect.y -= 5
        if keys[pygame.K_DOWN]:
            self.rect.y += 5

4. 实现松鼠的生成与移动

# 定义松鼠类
class Squirrel(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = squirrel_img
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width)
        self.rect.y = random.randrange(SCREEN_HEIGHT - self.rect.height)

    def update(self):
        # 实现松鼠移动
        self.rect.x += random.randint(-3, 3)
        self.rect.y += random.randint(-3, 3)

5. 实现碰撞检测

# 创建精灵组
all_sprites = pygame.sprite.Group()
squirrels = pygame.sprite.Group()
treasures = pygame.sprite.Group()
traps = pygame.sprite.Group()

# 创建角色对象并添加到精灵组
player = Player()
all_sprites.add(player)

# 创建松鼠对象并添加到精灵组
for i in range(10):
    squirrel = Squirrel()
    all_sprites.add(squirrel)
    squirrels.add(squirrel)

# 创建宝藏对象并添加到精灵组
for i in range(5):
    treasure = pygame.sprite.Sprite()
    treasure.image = treasure_img
    treasure.rect = treasure.image.get_rect()
    treasure.rect.x = random.randrange(SCREEN_WIDTH - treasure.rect.width)
    treasure.rect.y = random.randrange(SCREEN_HEIGHT - treasure.rect.height)
    all_sprites.add(treasure)
    treasures.add(treasure)

# 创建陷阱对象并添加到精灵组
for i in range(5):
    trap = pygame.sprite.Sprite()
    trap.image = trap_img
    trap.rect = trap.image.get_rect()
    trap.rect.x = random.randrange(SCREEN_WIDTH - trap.rect.width)
    trap.rect.y = random.randrange(SCREEN_HEIGHT - trap.rect.height)
    all_sprites.add(trap)
    traps.add(trap)

# 游戏主循环
running = True
while running:
    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 更新所有精灵
    all_sprites.update()

    # 碰撞检测
    hits = pygame.sprite.spritecollide(player, squirrels, False)
    if hits:
        # 处理碰撞逻辑(这里可以添加游戏失去生命值、重新开始等功能)
        pass

    hits = pygame.sprite.spritecollide(player, treasures, True)
    for hit in hits:
        # 处理宝藏逻辑(这里可以添加游戏得分等功能)
        pass

    hits = pygame.sprite.spritecollide(player, traps, True)
    for hit in hits:
        # 处理陷阱逻辑(这里可以添加游戏失去生命值等功能)
        pass

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

    # 绘制所有精灵
    all_sprites.draw(screen)

    # 刷新屏幕
    pygame.display.flip()

# 退出游戏
pygame.quit()

6. 添加宝藏和陷阱

# 创建宝藏对象并添加到精灵组
for i in range(5):
    treasure = pygame.sprite.Sprite()
    treasure.image = treasure_img
    treasure.rect = treasure.image.get_rect()
    treasure.rect.x = random.randrange(SCREEN_WIDTH - treasure.rect.width)
    treasure.rect.y = random.randrange(SCREEN_HEIGHT - treasure.rect.height)
    all_sprites.add(treasure)
    treasures.add(treasure)

# 创建陷阱对象并添加到精灵组
for i in range(5):
    trap = pygame.sprite.Sprite()
    trap.image = trap_img
    trap.rect = trap.image.get_rect()
    trap.rect.x = random.randrange(SCREEN_WIDTH - trap.rect.width)
    trap.rect.y = random.randrange(SCREEN_HEIGHT - trap.rect.height)
    all_sprites.add(trap)
    traps.add(trap)

7. 完善游戏逻辑

# 碰撞检测
hits = pygame.sprite.spritecollide(player, squirrels, False)
if hits:
    # 处理碰撞逻辑(这里可以添加游戏失去生命值、重新开始等功能)
    pass

hits = pygame.sprite.spritecollide(player, treasures, True)
for hit in hits:
    # 处理宝藏逻辑(这里可以添加游戏得分等功能)
    pass

hits = pygame.sprite.spritecollide(player, traps, True)
for hit in hits:
    # 处理陷阱逻辑(这里可以添加游戏失去生命值等功能)
    pass

8. 扩展复杂功能

  1. 添加多个关卡,随着游戏进度增加难度。
  2. 增加不同种类的松鼠,每种松鼠具有不同的移动方式和攻击方式。
  3. 引入游戏道具,如加速道具、护盾道具等,增加游戏策略性。
  4. 实现多人游戏模式,让多个玩家可以同时参与游戏互相竞技。
  5. 添加背景音乐和音效,增强游戏的氛围和趣味性。

完整代码

# 导入必要的库
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("复杂松鼠大作战")

# 定义颜色
WHITE = (255, 255, 255)

# 加载角色图像
player_img = pygame.Surface((50, 50))
player_img.fill(WHITE)

# 加载松鼠图像
squirrel_img = pygame.Surface((30, 30))
squirrel_img.fill(WHITE)

# 加载宝藏图像
treasure_img = pygame.image.load("treasure.png").convert_alpha()

# 加载陷阱图像
trap_img = pygame.image.load("trap.png").convert_alpha()

# 定义角色类
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = player_img
        self.rect = self.image.get_rect()
        self.rect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)

    def update(self):
        # 处理角色移动
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 5
        if keys[pygame.K_RIGHT]:
            self.rect.x += 5
        if keys[pygame.K_UP]:
            self.rect.y -= 5
        if keys[pygame.K_DOWN]:
            self.rect.y += 5

# 定义松鼠类
class Squirrel(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = squirrel_img
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width)
        self.rect.y = random.randrange(SCREEN_HEIGHT - self.rect.height)

    def update(self):
        # 实现松鼠移动
        self.rect.x += random.randint(-3, 3)
        self.rect.y += random.randint(-3, 3)

# 创建精灵组
all_sprites = pygame.sprite.Group()
squirrels = pygame.sprite.Group()
treasures = pygame.sprite.Group()
traps = pygame.sprite.Group()

# 创建角色对象并添加到精灵组
player = Player()
all_sprites.add(player)

# 创建松鼠对象并添加到精灵组
for i in range(10):
    squirrel = Squirrel()
    all_sprites.add(squirrel)
    squirrels.add(squirrel)

# 创建宝藏对象并添加到精灵组
for i in range(5):
    treasure = pygame.sprite.Sprite()
    treasure.image = treasure_img
    treasure.rect = treasure.image.get_rect()
    treasure.rect.x = random.randrange(SCREEN_WIDTH - treasure.rect.width)
    treasure.rect.y = random.randrange(SCREEN_HEIGHT - treasure.rect.height)
    all_sprites.add(treasure)
    treasures.add(treasure)

# 创建陷阱对象并添加到精灵组
for i in range(5):
    trap = pygame.sprite.Sprite()
    trap.image = trap_img
    trap.rect = trap.image.get_rect()
    trap.rect.x = random.randrange(SCREEN_WIDTH - trap.rect.width)
    trap.rect.y = random.randrange(SCREEN_HEIGHT - trap.rect.height)
    all_sprites.add(trap)
    traps.add(trap)

# 游戏主循环
running = True
while running:
    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 更新所有精灵
    all_sprites.update()

    # 碰撞检测
    hits = pygame.sprite.spritecollide(player, squirrels, False)
    if hits:
        # 处理碰撞逻辑(这里可以添加游戏失去生命值、重新开始等功能)
        pass

    hits = pygame.sprite.spritecollide(player, treasures, True)
    for hit in hits:
        # 处理宝藏逻辑(这里可以添加游戏得分等功能)
        pass

    hits = pygame.sprite.spritecollide(player, traps, True)
    for hit in hits:
        # 处理陷阱逻辑(这里可以添加游戏失去生命值等功能)
        pass

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

    # 绘制所有精灵
    all_sprites.draw(screen)

    # 刷新屏幕
    pygame.display.flip()

# 退出游戏
pygame.quit()

总结:

通过这个项目,我们学习了如何使用Pygame库创建一个简单的2D游戏。我们实现了角色的移动、松鼠的生成与移动、碰撞检测、宝藏和陷阱的添加等功能。

通过专栏《专栏Python实现复杂小游戏源码教程》(点击可跳转)进一步了解扩展游戏的功能

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序熊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值