Я работаю над Unity, используя C# для проекта, который должен быть довольно простым. Я привязался к pathFinding.Конкретный подход PathFinding
Я смотрел на Dikjstra и A * для справки, но по какой-то причине я все еще не могу принять их для работы в моем случае. Я предполагаю, что мой мозг :=while(1);
Вот идея:
Из текстового файла я импортировать «карту», где каждый «*» означает, что стена, и каждый «» walkarea. На карте в области случайно помещены 2 объекта: бомба и агент.
Агент должен исследовать карту (которая образует лабиринт) и открыть для себя бомбу. Агент может перейти к своим 8 соседним плиткам, если они не являются Стенами. В моем коде класс агента содержит свою собственную карту. для каждой плитки, которую он посещает, он спрашивает «карту мира» для информации, о его 8 соседних плитках.
На своей собственной карте он берет на заметку известный тип плитки (стена/дорожка для ходьбы), и если это дорожка для ходьбы, он также отмечает, сколько раз он его посещал. Агент также имеет список «Предпочтительное направление». Это говорит о том, какую плиту выбрать рядом с ней, если более 1 не было посещено.
До этого момента я установил все хорошее и работает, и если я позволю ему запустить, он в конце концов найдет бомбу. Проблема заключается в том, что, поскольку он работает только по приоритетному направлению в соответствии с наименее посещаемой плиткой, он должен повторно посещать некоторые плитки слишком много раз, как идиот. Так что
я должен сделать это:
Если агент достигает плитки, для которого, каждый nighbour является либо стены или уже посетил, то он должен исследовать свою собственную карту, и заметки из прошлого, чтобы найти незаметная плитка, и добираться туда. Каждое направление ходьбы имеет одинаковый вес/стоимость, поэтому нам не нужно учитывать стоимость пути.
На мой взгляд, Dijkstra's является ближайшим к применению, но я все еще не могу понять это правильно.
Любые идеи или помощь будут высоко оценены.
Спасибо
Alex
Возможно, вы захотите попробовать [DFS] (http://en.wikipedia.org/wiki/Depth-first_search) –
Все алгоритмы эвристического поиска используют какую-то стратегию открытого/закрытого списка, где изначально текущий агент позиция находится в открытом списке. Когда узел оценивается (это означает: все его соседи рассматриваются и могут быть помещены в открытый список), сам узел помещается в закрытый список.Узлы в закрытом списке никогда не должны оцениваться снова. Если намерение заключается в том, чтобы выполнять поиск на основе оператора, итеративно, каждый кадр, WHILE, когда агент движется, тогда вам нужно «обновить» открытые/закрытые узлы на основе постоянно увеличивающегося «идентификатора запроса» поиска. – StarShine