首页 文章

一种特定的PathFinding方法

提问于
浏览
0

我正在使用Unity,使用C#进行一个非常简单的项目 . 我坚持使用pathFinding .

我看着Dikjstra 's and A* for reference, but for some reason I still can' t采用它们来处理我的情况 . 我想我的大脑 :=while(1);

这是想法:

从文本文件中我导入一个“ Map ”,其中每个“*”表示Wall,以及每个“”walkarea . 在 Map 中,该区域随机放置了2个物体:炸弹和代理 .

代理人必须调查 Map (形成迷宫)并发现炸弹 . 如果代理不是Wall,代理可以移动到他的8个邻居区块 . 在我的代码中,代理类拥有自己的映射 . 对于他访问的每个瓷砖,他向“世界 Map ”询问有关他的8个邻居瓷砖的信息 .

在他自己的 Map 上,他记下已知的瓷砖类型(墙/步行路径),如果它是一个步道,他还注意到,他访问了多少次 . 代理商还有一个“首选方向”列表 . 如果未访问过多于1,则会告知要移动到哪个磁贴 .

到目前为止,我已经把它设置得很好并且正在运行,如果我让它运行,他最终会找到炸弹 . 问题在于,因为他只根据最少访问的瓷砖在首选方向上运行,所以他必须像傻瓜一样多次重访一些瓷砖 . 所以呢

我必须这样做:

如果代理人到达的地砖,每个邻居都是墙或已经访问过,那么他应该调查他自己的 Map ,以及过去的笔记找到一个未访问的地砖,然后走到那里 . 每个步行方向都具有相同的重量/成本,因此我们不需要考虑路径成本 .

在我看来,Dijkstra是最接近申请的,但我仍然无法做到正确 .

任何想法或帮助将不胜感激 .

谢谢

亚历克斯

1 回答

  • 0

    部分问题是您希望允许代理商提供多少信息 . 如果您愿意让他知道目标的位置,或者至少是他自己的总体方向,那么您可以使用它来帮助影响代理人的决策 . 这将允许你让他总是喜欢朝着让他最接近目标的方向移动,同时采取最少访问的路径 .

    否则,我会在一个单独的 Map 中跟踪他访问过的每个地方,以及8个相邻的瓷砖,因为他已经“看到”了它们,例如-1表示已经看到的墙,-2表示看不见的位置,0表示看到但未见过 . 然后,我会在它上面使用A *或变体,根据遍历的瓷砖数量将其移动到最近的未访问点,随机打破关系 . 这将导致在迷宫方法中更多的试验和错误老鼠 .

相关问题