M.A.X.    Вы вошли как гость
Российский Клуб игроков M.A.X.
 
[Новости]   [Новичку]   [Энциклопедия]   [Документы]   [Файлы]   [Игроки]   [Архивы]   [Архив форума]  
[Новый сайт]   [M.A.X. Gold]   [Партии]  

 
 
 
Архив форума  МаксГолд
[Основной форум] [Голосования] [МаксГолд] [Off-Topic]
 


На счёт отмены маршрута.  -  Hruks,  14.02.2011  5:24:08

Мне не нравится, что маршрут будет отменяться, если целевая клетка занята.
Возможно клетка занята лишь временно, тогда можно клетку освободить и опять выполнить команду движения (Готово).
Было бы логичнее либо просто игнорировать выполнение команды, либо выполнить её насколько возможно, то есть по маршруту откатиться назад и найти клетку, в которую лететь можно. Соответственно только до неё и долететь.
Однако проложенный маршрут пусть по прежнему указывает на прежнюю занятую клетку.

Кстати, приведённый выше алгоритм никак не разруливает параллельное (одновременное) движение нескольких самолётов. По прежнему можно будет дать двум самолётам задачу двигаться в одну и ту же клетку и передать ход или быстро обоим дать команду Готово.
Думаю проверку занятости клетки нужно выполнять при движении самолёта. В программе есть место, где самолёт пролетает очередную клетку маршрута и высчитывает движение в следующую точку. Вот там и нужно вставлять проверку.
Однако самолёт не должен спотыкаться о занятую клетку, если он способен пролететь дальше.
Тут есть тонкий момент. Нужно посмотреть не только следующую клетку, но и несколько клеток вперёд до конца запаса хода и если есть свободные клетки, то лететь, если нет, то останавливаться. Кроме того, команда Стоп не должна останавливать летящий самолёт, если он находится в занятой другим самолётом клетке или движется в такую клетку.

Кроме того, если клетка является клеткой назначения самолёта и он способен достигнуть её в этом ходу, то стоит пометить её как занятую, например предусмотреть специальный юнит-плейсхолдер. На его место сможет встать только самолёт владелец, он создаётся только в момент отдачи приказа на движение и удаляется при окончании движения или отмене приказа на движение. Не учавствует в отображении юнитов и целеуказании. Назначение только занимать воздушную клетку на карте. То еть отдал приказ самолёту двигаться, всё - в эту клетку сможет выдвинуться только этот самолёт.
В конце хода таких юнитов не должно оставаться, так как либо самолёт достиг намеченной клетки, либо вообще не двигался.