Maze_AI: 一款基于 Python + Pygame + AI 算法的迷宫小游戏

大三课程设计周自己一个人写的迷宫小游戏

(一)课题内容

  • 实现走迷宫。
  • 主要功能为界面显示、上下左右键的响应以及当前步数统计。
  • 通过该课题全面熟悉数组、字符串等的使用,掌握程序设计的基本方法及友好界面的设计。

(二)课题要求

1. 基本要求

(1)游戏界面显示:迷宫地图、上下左右移动的特效。
(2)动作选择:上下左右键对应于上下左右的移动功能,遇到障碍的处理。
(3)得分统计功能:步数等。

2. 扩展要求

(1)用户数据管理。
(2)设计一个自动走迷宫的程序,使得得到最短路径。

(三)组队分工情况

  • 团队名称:import python
  • 团队成员:Wonz(没错就我一个人)
  • 分工:全部(好像给自己挖了个巨坑)

(四)ToDo

  • 2018.10.29-2018.10.30:学习 PyQt5 + Tkinter
  • 2018.10.31:学习 Pygame、熟悉 Python、实现随机生成迷宫地图程序
  • 2018.11.1:实现游戏界面程序、得分统计功能程序
  • 2018.11.2:学习 Python + MySQL,实现用户数据管理程序
  • 2018.11.3-2018.11.5:设计 AI 算法,实现自动走迷宫程序(DFS、BFS、强化学习、遗传算法)

(五)实际进度

  • 2018.10.29:学习 PyQt5
  • 2018.10.30:学习 Tkinter
  • 2018.10.31:放弃 PyQt5Tkinter,转 Pygame
  • 2018.11.1:尝试实现迷宫地图程序
  • 2018.11.2-2018.11.3:实现迷宫地图程序
  • 2018.11.4-2018.11.6:生成角色、实现键盘控制走迷宫、实现计分功能,改障碍处理的 bug(改了三天)
  • 2018.11.7:尝试实现 遗传算法 自动走迷宫,设置数据库连接
  • 2018.11.8:放弃 遗传算法 ,转向 强化学习 中的 Deep Q Network 实现自动走迷宫
  • 2018.11.9:Deep Q Network 中的 TensorFlow 框架看不懂,放弃,转 DFS,验收
  • 2018.11.10:实现人工生成迷宫地图,非随机生成
  • 2018.11.11:凌晨 3 点睡,早上 7 点多起,一直写报告到下午 5 点

(六)文件说明

  • main.py 为主函数
  • maze.py 为随机生成迷宫函数
  • color.py 为存储颜色函数
  • main_new.py 为被老师验收之后自己重写的主函数
  • mapp.py 为被老师验收之后自己重写的自己设计的迷宫(非随机生成迷宫)
  • 由于时间等原因,第二种生成迷宫的 AI 算法还未实现

(七)结果展示

1. 随机生成地图版本
  • 游戏界面

  • 开始游戏:左上角有步数统计

  • 遇到障碍的信息反馈

  • AI自动走迷宫(程序还有待完善,步数统计存在问题)

  • 存在的问题:有时 AI 程序会崩溃,暂时还没有找到 bug

2. 非随机生成地图的迷宫
  • 游戏界面:起点在最右边,终点在最左边红色位置

在这里插入图片描述

  • 开始游戏:左上角有步数统计

在这里插入图片描述

  • 遇到障碍的信息反馈

在这里插入图片描述

  • 走出迷宫:输出“Win”

(八)不足与反思

  • 基础不扎实:选了不是很熟悉的 Python 语言,期间复习语法也花了点时间
  • 自己给自己挖坑:拒绝了同学们的组队邀请,一个人做三个人的任务,结果做不好
  • 时间管理不够高效:进度安排不够科学,总是完不成自己规定的任务
  • 需求不明确:确实是自己没有问清楚老师的需求,导致自己的程序老师不满意,是自己的问题

(九)项目地址

GitHub

(十)Liscense

MIT

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的迷宫游戏的实现,使用了Python中的Pygame库。 首先需要安装Pygame库,可以通过以下命令安装: ``` pip install pygame ``` 然后可以使用以下代码实现迷宫游戏: ```python import pygame import random # 定义迷宫的大小 MAZE_WIDTH = 640 MAZE_HEIGHT = 480 # 定义迷宫的格子大小 CELL_SIZE = 20 # 定义迷宫的行列数 ROW_COUNT = MAZE_HEIGHT // CELL_SIZE COL_COUNT = MAZE_WIDTH // CELL_SIZE # 定义迷宫中的墙壁和通道 WALL = 0 PATH = 1 # 定义迷宫的颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) class Maze: def __init__(self): self.grid = [[WALL for col in range(COL_COUNT)] for row in range(ROW_COUNT)] self.generate() def generate(self): # 随机选择一个起始点 start_row = random.randint(0, ROW_COUNT - 1) start_col = random.randint(0, COL_COUNT - 1) # 将起始点标记为通道 self.grid[start_row][start_col] = PATH # 递归生成迷宫 self._generate_recursive(start_row, start_col) def _generate_recursive(self, row, col): # 随机打乱四个方向的顺序 directions = [(0, -1), (0, 1), (-1, 0), (1, 0)] random.shuffle(directions) # 尝试向四个方向扩展迷宫 for direction in directions: dr, dc = direction new_row = row + 2 * dr new_col = col + 2 * dc # 如果新的位置在迷宫范围内,并且是墙壁 if 0 <= new_row < ROW_COUNT and 0 <= new_col < COL_COUNT and self.grid[new_row][new_col] == WALL: # 将当前位置和新位置之间的墙壁打通 self.grid[row + dr][col + dc] = PATH self.grid[new_row][new_col] = PATH # 递归生成迷宫 self._generate_recursive(new_row, new_col) def draw(self, surface): for row in range(ROW_COUNT): for col in range(COL_COUNT): if self.grid[row][col] == WALL: pygame.draw.rect(surface, BLACK, (col * CELL_SIZE, row * CELL_SIZE, CELL_SIZE, CELL_SIZE)) else: pygame.draw.rect(surface, WHITE, (col * CELL_SIZE, row * CELL_SIZE, CELL_SIZE, CELL_SIZE)) class Player: def __init__(self): self.row = 1 self.col = 1 def move(self, direction, maze): dr, dc = direction new_row = self.row + dr new_col = self.col + dc # 如果新的位置在迷宫范围内,并且是通道 if 0 <= new_row < ROW_COUNT and 0 <= new_col < COL_COUNT and maze.grid[new_row][new_col] == PATH: self.row = new_row self.col = new_col def draw(self, surface): pygame.draw.circle(surface, (255, 0, 0), (self.col * CELL_SIZE + CELL_SIZE // 2, self.row * CELL_SIZE + CELL_SIZE // 2), CELL_SIZE // 2) def main(): pygame.init() screen = pygame.display.set_mode((MAZE_WIDTH, MAZE_HEIGHT)) clock = pygame.time.Clock() maze = Maze() player = Player() while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() return elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: player.move((-1, 0), maze) elif event.key == pygame.K_DOWN: player.move((1, 0), maze) elif event.key == pygame.K_LEFT: player.move((0, -1), maze) elif event.key == pygame.K_RIGHT: player.move((0, 1), maze) # 绘制迷宫和玩家 maze.draw(screen) player.draw(screen) # 更新屏幕 pygame.display.update() # 控制游戏帧率 clock.tick(30) if __name__ == '__main__': main() ``` 运行以上代码后,可以通过方向键控制玩家在迷宫中行走。每次运行游戏时,都会生成一个随机的迷宫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wonz

创作不易,一块就行。

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

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

打赏作者

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

抵扣说明:

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

余额充值