Python 趣味编程:Pygame 迷宫游戏

1. 游戏简介与玩法规则

  • • 玩家在迷宫中寻找出口

  • • 控制角色上下左右移动

  • • 不能穿墙,走到终点则游戏胜利

依赖安装:

pip install pygame

2. 面向对象架构设计

  • • Player: 玩家控制对象

  • • Wall: 迷宫墙体模块

  • • MazeGame: 主游戏管理类,包含地图、逻辑、渲染


3. 玩家类 Player

class Player:
    def__init__(self, x, y, size):
        self.rect = pygame.Rect(x, y, size, size)
        self.color = (0, 255, 0)
        self.speed = size

    defmove(self, dx, dy, walls):
        next_rect = self.rect.move(dx, dy)
        ifnotany(next_rect.colliderect(w.rect) for w in walls):
            self.rect = next_rect

    defdraw(self, screen):
        pygame.draw.rect(screen, self.color, self.rect)

4. 墙体类 Wall

class Wall:
    def __init__(self, x, y, size):
        self.rect = pygame.Rect(x, y, size, size)
        self.color = (100, 100, 100)

    def draw(self, screen):
        pygame.draw.rect(screen, self.color, self.rect)

5. 游戏类 MazeGame

class MazeGame:
    def__init__(self):
        pygame.init()
        self.tile_size = 40
        self.map_data = [
            "1111111",
            "1S00001",
            "1011101",
            "1000101",
            "1110101",
            "100000E",
            "1111111"
        ]
        self.width = len(self.map_data[0]) * self.tile_size
        self.height = len(self.map_data) * self.tile_size
        self.screen = pygame.display.set_mode((self.width, self.height))
        pygame.display.set_caption("迷宫小游戏")
        self.clock = pygame.time.Clock()
        self.player = None
        self.walls = []
        self.end_rect = None
        self.running = True
        self.parse_map()

6. 解析地图与绘制

    def parse_map(self):
        for y, row in enumerate(self.map_data):
            for x, cell in enumerate(row):
                pos = (x * self.tile_size, y * self.tile_size)
                if cell == "1":
                    self.walls.append(Wall(*pos, self.tile_size))
                elif cell == "S":
                    self.player = Player(*pos, self.tile_size)
                elif cell == "E":
                    self.end_rect = pygame.Rect(*pos, self.tile_size, self.tile_size)

7. 控制与碰撞检测

    def run(self):
        whileself.running:
            self.clock.tick(10)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.running = False

            keys = pygame.key.get_pressed()
            dx = dy = 0
            if keys[pygame.K_LEFT]: dx = -self.tile_size
            if keys[pygame.K_RIGHT]: dx = self.tile_size
            if keys[pygame.K_UP]: dy = -self.tile_size
            if keys[pygame.K_DOWN]: dy = self.tile_size

            if dx != 0or dy != 0:
                self.player.move(dx, dy, self.walls)

            ifself.player.rect.colliderect(self.end_rect):
                print("🎉 恭喜通关!")
                self.running = False

            self.draw()

    defdraw(self):
        self.screen.fill((0, 0, 0))
        for wall inself.walls:
            wall.draw(self.screen)
        self.player.draw(self.screen)
        pygame.draw.rect(self.screen, (255, 255, 0), self.end_rect)
        pygame.display.update()

8. 拓展建议与总结

🎮 可添加:

  • • 计时系统

  • • 多关卡地图

  • • 自动迷宫生成算法

  • • 迷宫随机物品收集

✅ 本项目帮助你掌握:

  • • 类组织复杂对象

  • • 碰撞检测逻辑

  • • 地图与玩家交互实现

走出迷宫,开启你的 Python 游戏之旅!🧱🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值