【发布时间】:2011-10-17 09:30:20
【问题描述】:
我正在使用 python 开发实时等距 RPG,并希望将移动设备作为平台。我遇到困难的主要领域是我的寻路。我尝试了一些算法,包括 A* 和一些调整以更好地适应我正在使用的地图。
我对我的算法的结果感到满意——它们给人一种智能的错觉,同时具有确定性,并且在任一方向上都保持一致,这样两个针对彼此位置的角色就会在中间发生碰撞。
我的问题是,虽然结果在我拥有所有我可以要求的处理能力的 PC 上看起来不错,但在我的手机上却完全是另一回事,而且在计算算法时通常会有一秒或更长时间的延迟。出于这个原因,我正在考虑使用用 C 编写的性能最密集的代码为此编写一个库,但是如果有一个现有的解决方案,或者我可以做到这一点的更好方法,我会全力以赴。
我偶然发现了python-pathfinding,但这似乎比我自己为我的用例构建的要慢。
我的用例:
我的地图是从关卡构建的,这些关卡被墙壁(可见或不可见)包围,并且必须通过门(可见或不可见)连接。
我目前的方法是有两种不同的算法:
在房间内,我搜索单个图块作为节点,每个边界作为等成本边,在目标位置方向使用深度优先
每个门都是一个节点的房间之间。使用第一种算法计算通过房间(从门到门)的最短路径,并将其存储在哈希表中作为这些节点之间的边缘成本。然后计算可以遍历以从一个节点到另一个节点的一组边,并将其存储在哈希表中,并且不允许在同一路径中多次包含同一边。
我在启动时生成了一个单独的进程,它使用第一个算法为第二个算法生成图表,这解决了我的许多问题,房间往往相对较小,因此动态路径的惩罚 -发现保持低于其他情况,然后是更长的距离:
- 第一个算法用于计算从当前位置到当前房间内每扇门的距离。
- 第一种算法用于计算目标房间内每扇门到目标位置的距离。
- 第二个算法的输出用于获取房间之间的路径集
- 这些费用被添加到到达第一扇门和最后一扇门的费用中
- 解决方案集按成本排序,这样成本相同的路径的顺序将始终保持一致
- 选择解决方案集中的第一项。
【问题讨论】:
-
您如何使用 Python 定位移动设备?我知道有一个适用于 Android 的 Python 运行时,但我认为它的边缘仍然很粗糙,而且我不知道在 iOS 上运行 Python 的任何方法。只是好奇。
-
我一直瞄准的主要平台是 Maemo/Meego,它本机支持它,但是您可以生成自包含的可分发包。
标签: python c performance path-finding