我正在使用Unity,使用C#作爲一個應該很簡單的項目。 我堅持pathFinding。一個特定的PathFinding方法
我在Dikjstra的和一種參考*看了,但由於某些原因,我仍然不能採取他們在我的情況下工作。我想我的大腦:=while(1);
這裏的理念是:
從文本文件導入我一個「地圖」,其中每個「*」表示牆,每個「」 walkarea。在地圖上,這個區域隨機放置了兩個物體:一個炸彈和一個代理。
代理必須研究地圖(形成一個迷宮),並發現炸彈。如果代理不是Wall,代理可能會移動到他的8個鄰居貼圖。在我的代碼中,代理類擁有他自己的地圖。對於他所訪問的每一塊瓷磚,他都會詢問「世界地圖」以瞭解關於他的8個鄰居瓷磚的信息。
在他自己的地圖,然後他把一張紙條已知的磚型(牆/ walkpath)的,如果它是一個walkpath,他也指出,他曾多少次訪問它。代理商還有一個「首選方向」列表。這將告訴下一個要移動到哪個圖塊,如果超過1個圖塊沒有被訪問過。
到現在爲止,我已經將它設置都好正常運行,如果我讓他跑,他最終發現了炸彈。問題在於,因爲他只根據訪問次數最少的瓷磚在優先的方向上運行,所以他必須像白癡一樣多次重新訪問某些瓷磚。那麼,什麼
我必須做的是這樣的:
如果主體到達了這一片瓦,每nighbour要麼是牆或已經訪問過,那麼他應該研究自己的地圖,並從過去的筆記找一個未訪問的瓷磚,然後步行到那裏。每個步行方向具有相同的權重/成本,所以我們不需要考慮路徑成本。
在我看來,Dijkstra的是最接近申請,但我仍然無法得到它的權利。
任何想法或幫助將不勝感激。
謝謝
亞歷克斯的問題
您可能想嘗試[DFS](http://en.wikipedia.org/wiki/Depth-first_search) –
所有啓發式搜索算法都使用某種開放/關閉列表策略,最初,當前代理的位置在打開的列表中。當一個節點被評估(這意味着:所有它的鄰居都被考慮並且可能被放入打開的列表中),節點本身被放入封閉列表中。永遠不要重新評估封閉列表中的節點。如果打算在每一幀迭代地進行基於代理的搜索,則當代理正在移動時,則必須基於搜索的不斷增加的「請求ID」來「開放」/關閉節點。 – StarShine