一个基于Python的迷宫游戏,集成了本地GUI界面、HTTP API服务和MCP(Model Context Protocol)服务,支持多种交互方式控制游戏进程。项目采用模块化设计,实现了游戏逻辑、UI展示、API服务和MCP服务的清晰分离。
🚨 重要说明
整个项目几乎99%的代码和文档都是基于AI生成的哦! 🤖 由DeepSeek AI模型(DeepSeek-V3.2)协助开发完成,展示了AI在软件开发中的强大能力。
- Python 3.7+
- 依赖包:参见 requirements.txt
# 克隆项目
git clone <repository-url>
cd maze_game
# 创建虚拟环境
python -m venv .venv
# 激活虚拟环境
# Windows:
.venv\Scripts\activate
# Linux/Mac:
source .venv/bin/activate
# 安装依赖
pip install -r requirements.txtpython python/main.py启动后,游戏窗口将自动打开,同时:
- HTTP API服务将在 http://127.0.0.1:8080 启动
- MCP SSE服务将在 http://127.0.0.1:8000 启动
SimpleMaze/
├── python/ # 主要源代码目录
│ ├── main.py # 程序入口
│ ├── constants.py # 常量配置
│ ├── logger.py # 日志配置
│ ├── app/ # 应用层
│ │ ├── ApplicationController.py
│ │ └── GameEventBus.py
│ ├── core/ # 核心游戏逻辑
│ │ ├── models/ # 数据模型
│ │ │ ├── GameModels.py
│ │ │ └── MazeModels.py
│ │ ├── game/ # 游戏服务
│ │ │ └── MazeGameService.py
│ │ ├── maze/ # 迷宫生成
│ │ │ └── MazeGenerator.py
│ ├── ui/ # 用户界面
│ │ ├── GameWindow.py # 主窗口
│ │ ├── MazeRenderer.py # 迷宫渲染器
│ │ └── components/ # UI组件
│ │ ├── GameInfoPanel.py
│ │ ├── ControlPanel.py
│ │ ├── FunctionPanel.py
│ │ └── MazePanel.py
│ ├── server/ # 服务器
│ │ ├── HttpGameServer.py # HTTP服务器
│ │ └── McpGameServer.py # MCP服务器
│ └── utils/ # 工具类
│ └── FontManager.py
├── resources/ # 资源文件
│ ├── HarmonyOS_SansSC_Regular.ttf # 中文字体
│ ├── LICENSE.txt # 中文字体许可证
│ └── doc_imgs # 文档图片
│ ├── game_ui.jpg
│ └── mcp_client_demo.jpg
├── .gitignore
├── requirements.txt # 项目依赖
├── README.md # 项目说明
└── LICENSE # 许可证
- 本地GUI界面:可视化操作,支持按钮和键盘控制
- 键盘快捷键:
- 方向键/WASD:控制移动
- 空格键:等待
- R键:重置当前关卡
- N键:生成新关卡
- HTTP API:支持程序化控制,便于AI集成
- MCP协议:通过标准MCP协议供AI自然语言调用
- 随机生成迷宫(55×35大小)
- 玩家从左下角出发,目标到达右上角出口
- 实时显示移动次数和位置信息
- 到达终点时显示胜利界面
- 服务器地址:http://127.0.0.1:8080
- 请求格式:JSON
- 响应格式:JSON
GET /api/health # 健康检查
GET /api/state # 获取游戏状态
POST /api/move # 移动玩家
POST /api/reset # 重置当前关卡
POST /api/new-level # 生成新关卡
{
"maze_size": {"width": 55, "height": 35},
"player_position": {"col": 1, "row": 33},
"exit_position": {"col": 53, "row": 1},
"move_count": 0,
"is_completed": false
}up:向上移动down:向下移动left:向左移动right:向右移动wait:等待(不移动)
import requests
# 移动玩家
response = requests.post(
"http://127.0.0.1:8080/api/move",
json={"direction": "up"}
)
# 获取游戏状态
state = requests.get("http://127.0.0.1:8080/api/state").json()
# 重置关卡
requests.post("http://127.0.0.1:8080/api/reset")- 服务器地址:http://127.0.0.1:8000
- 协议:SSE (Server-Sent Events)
- 框架:fastmcp
GET /sse # SSE事件流
POST /tools/call # 调用MCP工具
GET /tools # 获取工具列表
描述:获取当前游戏状态信息
使用示例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_game_state",
"arguments": {}
}
}描述:移动玩家到指定方向
参数:
- direction:移动方向,可选值:up(上), down(下), left(左), right(右), wait(等待)
使用示例:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "move_player",
"arguments": {"direction": "up"}
}
}描述:重置当前关卡,将玩家放回起点
使用示例:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "reset_level",
"arguments": {}
}
}描述:生成全新迷宫关卡
使用示例:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "new_level",
"arguments": {}
}
}在 CherryStudio 配置文件中添加:
{
"mcpServers": {
"maze_game": {
"name": "SimpleMaze迷宫游戏API",
"description": "",
"baseUrl": "http://localhost:8000/sse",
"command": "python",
"args": [
"python/server/mcp/McpServer.py"
],
"env": {},
"isActive": true,
"type": "sse",
"longRunning": true,
"provider": "Powerinv",
"providerUrl": "https://github.com/PowerinvGames/SimpleMaze",
"logoUrl": "",
"tags": [
"游戏"
]
}
}
}任何支持MCP协议的客户端都可以通过以下方式连接:
import requests
import json
# 调用MCP工具
def call_mcp_tool(tool_name, arguments=None):
url = "http://127.0.0.1:8000/tools/call"
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": tool_name,
"arguments": arguments or {}
}
}
response = requests.post(url, json=payload)
return response.json()
# 获取游戏状态
result = call_mcp_tool("get_game_state")
print(result)
# 移动玩家
result = call_mcp_tool("move_player", {"direction": "right"})
print(result)
# 重置关卡
result = call_mcp_tool("reset_level")
print(result)
# 生成新关卡
result = call_mcp_tool("new_level")
print(result)AI可以直接使用自然语言调用工具,例如:
用户:告诉我当前游戏状态
AI:调用 get_game_state() 工具
用户:让玩家向右移动
AI:调用 move_player({"direction": "right"}) 工具
用户:重新开始这一关
AI:调用 reset_level() 工具
用户:生成一个新的迷宫
AI:调用 new_level() 工具
- 事件驱动架构:使用事件总线解耦UI与游戏逻辑
- 模块化组件:UI元素封装为独立组件
- MVC分离:模型、视图、控制器清晰分离
- 协议分离:HTTP API与MCP协议独立实现
- 精简核心功能:只提供4个核心工具,对应HTTP API的核心功能
- 独立运行:MCP服务器独立于HTTP服务器,使用不同端口
- 标准协议:基于官方MCP协议,兼容所有MCP客户端
- 自然语言友好:工具设计简洁,适合AI自然语言调用
- 异步支持:完全异步设计,性能优秀
项目中包含中文字体文件(HarmonyOS Sans SC),确保中文正常显示。如需更换字体,请:
- 将新字体文件放入 resources/ 目录
- 在 python/constants.py 中更新 ResourcePaths.FONT_FILE 路径
- 使用Python标准logging模块
- 日志级别:INFO
- 输出到控制台
python python/main.py --help可用参数:
--host:HTTP服务器主机地址(默认:127.0.0.1)--port:HTTP服务器端口(默认:8080)--maze-width:迷宫宽度(默认:55)--maze-height:迷宫高度(默认:35)
- 中文显示乱码
- 确保 resources/HarmonyOS_SansSC_Regular.ttf 文件存在
- 检查字体文件路径是否正确
- 端口占用
- 默认使用8080端口,如被占用会自动尝试其他端口
- 可通过 --port 参数指定其他端口
- MCP连接失败
- 确保MCP服务器正在运行(与主程序一起启动)
- 检查端口是否被防火墙阻止
- 验证SSE连接:访问 http://127.0.0.1:8000/sse
- 依赖安装失败
- 确保使用Python 3.7+
- 尝试升级pip:
pip install --upgrade pip - 确保fastmcp正确安装:
pip install fastmcp
如需更详细的日志,可修改 python/logger.py 中的日志级别:
logger.setLevel(logging.DEBUG) # 改为DEBUG级别本项目采用 MIT 许可证 - 详见 LICENSE 文件。
- Fork 本仓库
- 创建功能分支:
git checkout -b feature/新功能 - 提交更改:
git commit -m '添加新功能' - 推送到分支:
git push origin feature/新功能 - 提交 Pull Request
如有问题或建议,请提交GitHub Issue。
开始你的迷宫冒险吧! 🚶♂️➡️🎯


