В прошлых примерах мы рассматривали только два типа проходимости, где можно пройти и где нельзя. Давайте исправим ситуацию и рассмотрим реализацию, когда каждая клетка имеет разную степень проходимости, или как ещё говорят имеют разный вес. Мы просто раздадим разным клеткам разный вес в зависимости от рельефа. Чем темнее у нас будет клетка, тем больше времени она будет отнимать у "путника", который будет по ней идти.
Как же это реализовать? А все очень и очень просто! В структуре CMapChunk (смотрите прошлые статьи) мы введем дополнительный параметр RankPassability, который будет хранить вес проходимости.
Я, например, заполнил так, что в середине карты у меня получилась синусоида, как будто тропа между холмами :)
Сейчас вы наверно подумали, опять будет куча расчетов и нудятины, а вот и ничего подобного!
Как один из вариантов: мы просто в оценке пути при расчете F (F это сумма G и H) умножаем его результат на вес клетки:
Chunk.F = (Chunk.H + Chunk.G) * WayMap->GetRankPass(Chunk.ID);
Если вам эта строка ни о чем не говорит, и вы не знаете что такое F, H и G, то вы не читали мои прошлые статьи. А зря :)
ДА! И это все :) Вот результат:
Но внезапно на нашем пути появилась китайская стена :)
Ну и последний пример:
Таким образом можно задать болота, реки, рельеф и другие типы местности на карте.
0 коммент.:
Отправить комментарий