# 自动寻路小程序 **Repository Path**: webcc/aStarPathfinder ## Basic Information - **Project Name**: 自动寻路小程序 - **Description**: a星寻路小程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-03 - **Last Updated**: 2026-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

迷宫自动寻路效果图

A* 迷宫寻路程序

Prim 算法生成随机迷宫 · A* / BFS / Dijkstra 自动寻路 · 2D / 3D 通用寻路库

Python tkinter A* 2D/3D

--- ## 功能特性 - **随机迷宫生成** — 动态 Prim 算法,支持调整尺寸 - **A\* 自动寻路** — 曼哈顿距离启发式,保证最短路径 - **多种算法** — A* / BFS / Dijkstra 可切换 - **多条路模式** — 勾选后迷宫产生环路,验证 A* 仍能找到最短路径 - **键盘控制** — 方向键手动移动角色 - **通用寻路库** — `pathfinder.py` 支持 2D / 3D,可直接迁移到任何游戏项目 ## 快速开始 ```bash # 安装依赖(图片显示需要 Pillow) pip install Pillow # 运行 python main.py ``` ## 操作说明 | 操作 | 说明 | |:----:|------| | ↑ ↓ ← → | 移动角色 | | **生成新迷宫** | 随机生成迷宫 | | **显示路径** | A* 自动寻路,绿色显示最短路径 | | **多条路** | 迷宫产生多条路径和环路 | | **宽/高滑块** | 调整迷宫尺寸 | --- ## 迁移到你的游戏项目 只需拷贝一个文件: ```bash cp pathfinder.py /你的游戏项目目录/ ``` ### 2D 游戏寻路 ```python from pathfinder import GridMap, Pathfinder # 1. 创建地图 grid = GridMap(10, 10) # 2. 设置障碍 grid.set_walkable(3, 5, False) grid.set_walkable(4, 5, False) # 3. 寻路 path = Pathfinder.find(grid, start=(0, 0), end=(9, 9)) # 返回: [(0,0), (1,0), ..., (9,9)] 或 None(不可达) ``` ### 3D 游戏寻路 ```python # 多层地图 (宽 x 高 x 层数) grid = GridMap(10, 10, 5) grid.set_walkable(3, 5, False, z=2) # 第2层 (3,5) 不可通行 path = Pathfinder.find(grid, start=(0, 0, 0), end=(9, 9, 4)) ``` ### 切换算法 ```python # A* — 默认,启发式,速度快 path = Pathfinder.find(grid, start, end, algorithm=Pathfinder.ASTAR) # BFS — 无权图最短路径 path = Pathfinder.find(grid, start, end, algorithm=Pathfinder.BFS) # Dijkstra — 带权图最短路径 path = Pathfinder.find(grid, start, end, algorithm=Pathfinder.DIJKSTRA) # 允许对角线移动 path = Pathfinder.find(grid, start, end, diagonal=True) # 自定义代价(如地形权重) path = Pathfinder.find(grid, start, end, cost_func=my_cost_func) ``` --- ## API 参考 ### GridMap ```python GridMap(width, height) # 2D 地图 GridMap(width, height, depth) # 3D 地图 grid.set_walkable(x, y, bool) # 2D 设置 grid.set_walkable(x, y, bool, z=z) # 3D 设置 grid.is_walkable(x, y) # 2D 查询 grid.is_walkable(x, y, z=z) # 3D 查询 grid.set_block_map_2d(block_map) # 从 2D 数组批量导入 grid.set_block_map_3d(block_map) # 从 3D 数组批量导入 ``` ### Pathfinder.find() ```python Pathfinder.find(grid, start, end, algorithm=None, # ASTAR / BFS / DIJKSTRA diagonal=False, # 允许对角线 cost_func=None) # 自定义代价函数 ``` **返回值:** 成功返回 `list[tuple]`(含起止点),失败返回 `None` --- ## 性能 | 地图大小 | A* 平均耗时 | |:--------:|:-----------:| | 21×15 | ~0.14ms | | 51×41 | ~1.1ms | | 20×20×5 (3D) | ~2ms | --- ## 项目结构 ``` ├── main.py # tkinter GUI 主程序 ├── maze.py # 迷宫生成 (Prim算法) + 调用寻路库 ├── pathfinder.py # ★ 通用寻路库 — 迁移只需这一个文件 ├── brick.jpg # 墙壁纹理 ├── smallHJ.png # 玩家角色 ├── out.png # 出口标记 ├── 迷宫.png # 效果截图 ├── doc/ │ └── 封装过程中set_walkable参数顺序Bug分析.md └── README.md ``` ## 致谢 基于 [Maze](https://github.com/m-iDev-0792/Maze) 项目(C++ / Qt)用 Python 重写。