当前位置: 首页 > article >正文

基于python的随机迷宫游戏

游戏

运行代码后,会显示一个随机生成的迷宫和一个红色圆形玩家。
使用方向键控制玩家移动,避开墙壁,找到绿色方块表示的出口。
到达出口后,游戏会自动生成新的迷宫并重置玩家位置,进入下一局。

界面

在这里插入图片描述

代码

import pygame
import sys
import random

# 初始化Pygame
pygame.init()

# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# 设置屏幕大小
WIDTH, HEIGHT = 400, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("随机迷宫游戏")

# 定义方块大小
MAZE_SIZE = 8  # 迷宫大小 (8x8)
BLOCK_SIZE = WIDTH // MAZE_SIZE

# 定义玩家初始位置
player_pos = [1, 1]


# 生成随机迷宫
def generate_maze(size):
    # 初始化迷宫,全部为墙壁
    maze = [[1 for _ in range(size)] for _ in range(size)]

    # 使用深度优先搜索算法生成迷宫
    def dfs(x, y):
        maze[y][x] = 0  # 打通当前单元格
        directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
        random.shuffle(directions)  # 随机打乱方向
        for dx, dy in directions:
            nx, ny = x + dx * 2, y + dy * 2
            if 0 <= nx < size and 0 <= ny < size and maze[ny][nx] == 1:
                maze[y + dy][x + dx] = 0  # 打通路径
                dfs(nx, ny)

    dfs(1, 1)  # 从起点开始生成迷宫
    maze[1][1] = 0  # 确保起点是空的
    maze[size - 2][size - 2] = 2  # 设置出口
    return maze


# 重置游戏状态
def reset_game():
    global maze, player_pos
    maze = generate_maze(MAZE_SIZE)
    player_pos = [1, 1]


# 游戏主循环
def main():
    clock = pygame.time.Clock()
    running = True
    reset_game()  # 初始化迷宫和玩家位置

    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_UP:
                    move_player(0, -1)
                elif event.key == pygame.K_DOWN:
                    move_player(0, 1)
                elif event.key == pygame.K_LEFT:
                    move_player(-1, 0)
                elif event.key == pygame.K_RIGHT:
                    move_player(1, 0)

        # 绘制迷宫和玩家
        screen.fill(WHITE)
        draw_maze()
        draw_player()
        pygame.display.flip()

        # 检查是否到达出口
        if maze[player_pos[1]][player_pos[0]] == 2:
            print("恭喜你,成功找到出口!进入下一局...")
            reset_game()  # 重置游戏状态

        clock.tick(30)

    pygame.quit()
    sys.exit()


# 绘制迷宫
def draw_maze():
    for y, row in enumerate(maze):
        for x, block in enumerate(row):
            if block == 1:
                pygame.draw.rect(screen, BLACK, (x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))
            elif block == 2:
                pygame.draw.rect(screen, GREEN, (x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))


# 绘制玩家
def draw_player():
    pygame.draw.circle(screen, RED,
                       (player_pos[0] * BLOCK_SIZE + BLOCK_SIZE // 2, player_pos[1] * BLOCK_SIZE + BLOCK_SIZE // 2),
                       BLOCK_SIZE // 3)


# 移动玩家
def move_player(dx, dy):
    new_x = player_pos[0] + dx
    new_y = player_pos[1] + dy
    # 检查新位置是否合法
    if 0 <= new_x < len(maze[0]) and 0 <= new_y < len(maze):
        if maze[new_y][new_x] != 1:  # 不能穿过墙壁
            player_pos[0] = new_x
            player_pos[1] = new_y


if __name__ == "__main__":
    main()

http://www.kler.cn/a/465119.html

相关文章:

  • 行为模式5.中介者模式-聊天室收发消息
  • 【游戏设计原理】47 - 超游戏思维
  • 从 TiDB 学习分布式数据库测试
  • Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析|数据分享...
  • Flink源码编译与运行
  • 期末速成C++【大题汇总完】
  • element-ui的rules中正则表达式
  • 微服务三大配件深度解析、实现
  • 深圳南柯电子|净水器EMC测试整改:确保水质安全的电磁防护
  • 探索Milvus数据库:新手入门指南(tencent云)
  • 大带宽服务器和普通服务器相比较的优势
  • 局域网中单台交换机VLAN应用
  • rsync中远端文件的校验和存储缓存的黑科技
  • Docker--Docker Image(镜像)
  • Visual Point Cloud Forecasting enables Scalable Autonomous Driving——点云论文阅读(12)
  • STM32的LED点亮教程:使用HAL库与Proteus仿真
  • RT-Thread中堆和栈怎么跟单片机内存相联系
  • XIAO Esp32S3 播放网络Mp3
  • ELK日志收集系统部署
  • C与语言GDB调试
  • ubuntu 常见问题(持续记录)
  • BLDC无感控制的驱动逻辑
  • [网络安全]数据安全领域关键技术总结
  • 深入刨析数据结构之排序(上)
  • 【GPT】Coze使用开放平台接口-【8】创建应用
  • 多模态论文笔记——CogVLM和CogVLM2