--Arrows---Puzzle-Escape
GitHub ↗Python + Tkinter/matplotlib 箭头解谜逃脱游戏,支持随机关卡生成、GUI 交互与解法验证
2
Stars
1
Forks
0
Issues
2
Watchers
技术栈
Python 100%
Arrows - Puzzle Escape
一款基于 Python 的箭头解谜逃脱游戏,玩家需合理安排箭头移动顺序,使所有箭头无碰撞地滑出网格边界。
✨ 功能特性
- 核心玩法:点击箭头使其沿指向方向滑动,路径上遇到其他箭头则碰撞失败
- 随机关卡生成:支持自定义网格尺寸与箭头数量,自动生成合法可解关卡
- 关卡合法性验证:内置求解算法,检查当前布局是否存在有效移动顺序
- 解决方案展示:可视化逐步展示箭头逃脱的完整步骤
- 图形界面(GUI):基于 Tkinter + Matplotlib 的交互式界面,支持鼠标点选箭头
- 命令行交互:支持交互式命令模式与演示模式
- 难度分级:从 3x3 简单关卡到 12x12+ 专家关卡,箭头数量与网格尺寸可调
🛠 技术栈
| 类别 | 技术 |
|---|---|
| 语言 | Python 3.7+ |
| GUI 框架 | Tkinter(标准库) |
| 可视化 | Matplotlib >= 3.5.0 |
| 数值计算 | NumPy >= 1.20.0 |
| 测试 | unittest(标准库) |
📁 项目结构
Arrows - Puzzle Escape/
├── main.py # 游戏主入口,支持 --gui / --demo / --interactive / --generate
├── requirements.txt # 项目依赖
├── src/
│ ├── arrow_puzzle.py # 核心游戏逻辑:Arrow/ArrowPuzzle 类、关卡生成与求解算法
│ ├── gui.py # Tkinter 图形界面,支持创建关卡、添加箭头、移动与求解
│ └── visualization.py # Matplotlib 可视化:网格绘制、轨迹显示、解决方案分步展示
├── tests/
│ └── test_arrow_puzzle.py # 核心逻辑单元测试
├── docs/
│ └── level_design_analysis.md # 关卡设计分析与优化建议文档
└── README.md
🚀 快速开始
环境要求
- Python >= 3.7
- pip
安装
git clone https://github.com/G-YOUNG01/--Arrows---Puzzle-Escape.git
cd --Arrows---Puzzle-Escape
pip install -r requirements.txt
运行
启动图形界面(推荐):
python main.py --gui
运行演示:
python main.py --demo
进入交互式命令行模式:
python main.py --interactive
直接生成随机关卡:
python main.py --generate 5 5 3
📖 使用说明
游戏规则
- 网格中分布着若干箭头,每个箭头有固定方向(↑ → ↓ ←)
- 点击箭头后,箭头沿自身方向持续滑动,直到滑出网格边界
- 若滑动路径上遇到其他箭头,则发生碰撞,移动失败
- 成功滑出边界的箭头从网格中移除
- 目标:找到一种移动顺序,使所有箭头都能无碰撞地逃脱
GUI 操作指南
| 操作 | 说明 |
|---|---|
| 创建自定义关卡 | 输入行数、列数,点击「创建」 |
| 生成随机关卡 | 输入行数、列数、箭头数,点击「生成」 |
| 添加箭头 | 输入行、列、方向(up/right/down/left),点击「添加」 |
| 选中箭头 | 在游戏区域点击箭头,状态栏显示选中位置 |
| 移动箭头 | 选中箭头后点击「移动选中箭头」,箭头沿方向滑动 |
| 检查关卡 | 点击「检查关卡」验证当前布局是否有解 |
| 显示解决方案 | 点击「显示解决方案」,Matplotlib 窗口逐步展示逃脱步骤 |
| 清除关卡 | 点击「清除关卡」重置当前游戏 |
交互式命令
在 --interactive 模式下可用以下命令:
| 命令 | 说明 |
|---|---|
create <rows> <cols> |
创建自定义空关卡 |
generate <rows> <cols> <num_arrows> [min_diff] [max_diff] |
生成随机关卡 |
add <row> <col> <direction> |
添加箭头(方向: up/right/down/left) |
display |
显示当前关卡 |
move <row> <col> |
模拟指定位置箭头的移动 |
check |
检查关卡是否合法(有解) |
solution |
显示关卡解决方案 |
exit |
退出游戏 |
核心 API
ArrowPuzzle 类:
ArrowPuzzle(rows, cols)— 初始化指定大小的网格add_arrow(row, col, direction)— 在指定位置添加箭头remove_arrow(row, col)— 移除指定位置的箭头move_arrow(row, col)— 模拟箭头移动,返回(trajectory, collision)is_valid_level()— 检查关卡是否存在有效解display()— 文本方式显示关卡
ArrowPuzzleVisualizer 类:
show()— 显示当前关卡simulate_movement(row, col)— 模拟移动并显示轨迹(绿色=成功,红色=碰撞)show_level_solution()— 分步展示完整解决方案
🧪 测试
python -m unittest tests/test_arrow_puzzle.py
🤝 贡献指南
欢迎提交 Issue 和 Pull Request!代码遵循 PEP 8 风格,关键函数需包含文档字符串。
📄 许可证
MIT License
👤 作者
GYOUNG - GitHub