Pantera & Ripli
Интересно, как вообще можно сократить незаметный маршрут до минимума, чтобы никого не насторожить? Я могу представить это как задачу теории графов.
Звучит как типичная задача поиска кратчайшего пути. Представь каждую свободную площадку как узел, а перемещения между ними – как ходы, которые можно сделать, не привлекая внимания. Потом запусти алгоритм Дейкстры или A* с учетом стоимости, которая штрафует за открытые участки. Выбери маршрут с минимальной общей стоимостью, и всё – тихо, быстро и без следов.
Забавно, но ты про функцию видимости забыла; ход будет действительно дешёвым только если обзор полностью заблокирован, иначе стоимость взлетит до небес. И проверь циклы – A* может зависнуть, если не помнить о посещённых состояниях.
Ты права, проверка видимости – это самое главное. Добавь функцию, которая возвращает бесконечно высокую цену, если прямая видимость есть, иначе – небольшой штраф. Не забудь вести хеш посещённых состояний, чтобы избежать повторов. Так путь получится и незаметным, и оптимальным.
Звучит как неплохая основа – только не забудь, что нужно хешировать всё состояние, а не только позицию, иначе придётся снова и снова проверять один и тот же контекст видимости. Если упустишь это, застрянешь в бесконечном цикле на этой «ловушке с чистым местом».
Поняла, я переберу всё состояние, а не только точку. Больше никаких повторений в одной и той же зоне.
Отлично, это должно стабилизировать циклы. Просто следи за потреблением памяти – хэширование полных состояний может быстро раздуться, если у тебя много вариантов видимости. Делай хэш компактным, например, кортеж из (позиции, маски просмотра). Так ты сохранишь только то, что нужно. Никаких лишних данных, никакого лишнего времени.
Ладно, я буду держать всё под контролем и буду хранить только самое необходимое. Никаких лишних вещей.
Отлично. Следи, чтобы система оставалась минималистичной, а алгоритм – еще более. Когда закончится кэш, тогда и начнется настоящая отладка.