我正在使用Unity,使用C#进行一个非常简单的项目。 我坚持使用pathFinding。
我看过Dikjstra和A *作为参考,但由于某种原因,我仍然不能采用它们来处理我的情况。我想我的大脑:=while(1);
这是理念:
从文本文件中导入一个“地图”,其中每个“*”表示Wall,以及每个“”walkarea。在地图中,该区域随机放置了2个物体:炸弹和代理。
代理人必须调查地图(形成迷宫)并发现炸弹。如果代理不是Wall,代理可以移动到他的8个邻居区块。在我的代码中,代理类拥有自己的映射。对于他访问的每个瓷砖,他向“世界地图”询问有关他的8个邻居瓷砖的信息。
在他自己的地图上,他记下已知的瓷砖类型(墙/步行路径),如果是步行路径,他还会注意到他访问了多少次。代理商还有一个“首选方向”列表。如果未访问过多于1,则会告知要移动到哪个磁贴。
到目前为止,我已经把它设置得很好并且正在运行,如果我让它运行,他最终会找到炸弹。问题在于,因为他只根据最少访问的瓷砖在首选方向上运行,所以他必须像傻瓜一样多次重访一些瓷砖。那是什么
我必须这样做:
如果经纪人到达了一块瓷砖,每个邻居都是墙或已经访问过,那么他应该调查他自己的地图,以及过去的笔记找到一块未经检查的瓷砖,然后走到那里。每个步行方向都具有相同的重量/成本,因此我们不需要考虑路径成本。
在我看来,Dijkstra是最接近申请的,但我仍然无法做到正确。
任何想法或帮助将不胜感激。
谢谢
亚历
答案 0 :(得分:0)
部分问题是您希望允许代理商提供多少信息。如果您愿意让他知道目标的位置,或者至少是他自己的总体方向,那么您可以使用它来帮助影响代理人的决策。这样他就可以让他总是倾向于朝着最接近目标的方向移动,同时采取最少访问的路径。
否则,我会在一个单独的地图中跟踪他访问过的每个地方,以及8个相邻的瓷砖,因为他已经“看到”了它们,其中-1表示已经看到的墙,-2表示一个看不见的位置,0表示看到但未访问。然后,我会在它上面使用A *或变体,根据遍历的瓷砖数量将其移动到最近的未访问点,随机打破关系。这将导致在迷宫方法中出现更多的试验和错误。