Rel*_*ual 9 java artificial-intelligence a-star path-finding
我正在开发一个简单的基于2d网格的SIM游戏,并且具有完整功能的路径查找功能.
我使用上一个问题中找到的答案作为实现A*路径查找的基础.(寻路2D Java游戏?).
为了向您展示我真正想要的东西,我需要向您展示我制作的这个视频截屏.我只是在测试,看看这个人将如何移动到某个位置并再次返回,这就是结果......
http://www.screenjelly.com/watch/Bd7d7pObyFo
不同的路径选择取决于方向,意外的结果.有任何想法吗?
如果您正在寻找一个简单的解决方案,我可以建议一些随机化吗?
我的意思是:在 cokeandcode 代码示例中,有嵌套的 for 循环生成“后继状态”(使用 AI 术语)。我指的是它在“当前”状态周围的 3x3 正方形上循环的点,在堆上添加要考虑的新位置。
一个相对简单的修复将(应该:))稍微隔离该代码,并让它在处理步骤的其余部分之前生成节点的链接列表。然后Containers.Shuffle(或者是Generics.Shuffle?)那个链表,并在那里继续处理。基本上,有一个例程,“createNaiveNeighbors(node)”返回一个 LinkedList = {(node.x-1,node.y), (node.x, node.y-1)... } (请原谅pidgin Java,我试图(但总是失败)保持简短。
然而,一旦构建了链表,您应该能够执行“for (Node n : myNewLinkedList)”而不是
for (int x=-1;x<2;x++) {
for (int y=-1;y<2;y++) {
Run Code Online (Sandbox Code Playgroud)
并且仍然使用完全相同的主体代码!
理想情况下,这会“改变”所考虑的节点的顺序,并创建更接近对角线的路径,但不必改变启发式。这些路径仍然是最有效的,但通常更接近对角线。
当然,缺点是,如果您多次从 A 到 B,则可能会采取不同的路径。如果这是不可接受的,您可能需要考虑进行更彻底的修改。
希望这可以帮助!-阿戈尔
| 归档时间: |
|
| 查看次数: |
3504 次 |
| 最近记录: |