Предлагаю такой вариант:Это все хорошо звучит, но остается проблема выбора правильного места обстрела/штурма дома, что является нетривиальной задачей, с учетом того, что удобной точки может и не быть, а делать что-то нужно.
Дом находится в одной из клеток тактической расстановки войск. (обозначем буквой Д)
я не знаю как соотносится длина такой клетки с расстоянием броска гранаты, но допустим, бросок будет не дальше одной клетки.
_-_-_
_-_-_
_-Д-_
_-_-_
_-_-_
Значит для группы поддержки обстрела надо выводить войка на один из приведенных шаблонов:
и их зеркального отражения
два по фронру окон
_-O-_
_-_-_
_-Д-O
_-_-_
_-_-_
два наискосок
O-_-_
_-_-O
_-Д-_
_-_-_
_-_-_
два наискосок со сдвигом
_O_-_
_-_-O
_-Д-_
_-_-_
_-_-_
или
_O_-_
_-_-_
_-Д-O
_-_-_
_-_-_
или
_-_-O
_-_-_
_-Д-_
_-_-O
_-_-_
те некотрый шаблон размещения за радиусом броска гранаты(или двойным радиусом броска гранаты),
........................................*
...........................................*
..............................................*
................................................*
******************.................*
*__________________*..................*
*_____________Ц____*..................*
*__________________*
*__________________*
******************
Если дом длинный, то центр для круга-радиуса броска гранаты брать на оси разделяющей дом пополам вдоль длинной стороны, на расстояниии дины кототкой стороны дома
Фактические действия:
1) оценить расположение дома и имеющихся войск для того, чтобы понять, к какому из шаблонов они ближе
2) выбрать шаблон расстанвки (если их нескольно одинаковых)
3) убедиться, что в ожидаемом шаблоне место будущей позиции будет вне доступа гранат от других домов.
4) подвести недостающие войска на нужную клетку.
я играя за союзников в деревне Соколово, раз за разом побеждал уничтожел танковую и танко гренадерские атаки немцев.Те сидение в зданиях для немцев было не выгоднее, чем сидение в окопах.
---------
Так оно и у нас так, если цель стоит нанести врагу урон/не пропустить его, а не просто отсидеться пользуясь читерскими командами
немцы меня ни выкуривали, ни поджигали дома, ни рушали хибарки танками / артиллерией. Артобстрел вызывали - то там были незначительные потери.
вы дадите описать в скрипте LUA действия, командиров(те принятия решений кого атаковать, куда идти), как обработчики некотрых событий для каждого рода войск:А в модах дадут возможность подправить ИИ, как раз для такого случая, через скрипты какие-нибудь типа LUA ?
---
Нет конечно, как Вы себе это представляете?
0)первоначальное размещение войск
1)замечен враг
2)под обстрелом врага
3)раз в 20 секунд игрового времени
4)захвачена точка и надо подготовить атаку на следующую.
5) действие по передвижению в какое либо место завершено.
Вы отобразите некотрые C-шные функции в Lua-шные
и можно будет выполнять скрипт, который предопределит тактику действий.
О том, как внедрить LUA можно посмотреть тут:
http://club.shelek.ru/viewart.php?id=77
http://www.ibm.com/developerworks/ru/library/l-lua/
если надо, приведу больше ссылок.
Ниже есть пример проекта с использованием LUA
А как определить из 1400 домов какие подозрительные, а какие нет? Желательно за конечное время
Вначале определимся с терминами:
1) дом не видимый на расстоянии прямой видимости, далее -" не видимый отсюда"
2)Дом, который примыкает к точке захвата, если противник в этом доме, то при уходе танков точка автоматически перейдет под контроль игрока - далее "дом на точке захвата"
3)дом который примыкает к пути к точке захвата - далее дом у дороги/ попути
4) Дом в котором провели штурмовую операцию и есть уверенность, что там нет людей игрока. - далее зачищенный дом.
Вводная информация
Итак: ИИ надо захватить точку, для этого ИИ надо провести войска к точке и зачистить дома на точке захвата.
алгоритм:
ИИ выбирает маршрут(например по дороге) дорога проходит по ряду квадратиков – исходных для тактической расстановки. Если ИИ выбрал маршрут не по дороге, то вместо понятия дороги следует использовать понятие прямой отрезок движения.
Для каждого квадрата где проходит дорога – смотрим наличие домов в радиусе броска гранаты( те на 1 соседнюю клетку или две – не знаю дальность броска гранаты) – это дома у дороги/отрезка движения.
Те видимые дома, откуда можно бросить гранату надо пометить как подозрительные дома – их надо будет штурмовать – зайти количеству людей 2,5 на окно и проверить что в доме никого.
Таким образом, к подозрительным домам следует отнести:
1) дома на точке
2) дома у дороги(у отрезка движения)
3) Дома рядом с подбитыми БТР и танками.
Если нет пехотного отделения, то танки просто превентивно расстреливают осколочно-фугасными снарядами каждое окно в доме у дороги. Окна подлежащие расстрелу – это те, у которых нормаль направлена под углом 40-90 градусов к дороге(отрезку движения).А если штурмового отряда нет, что делать?
Введем понятие можно выстрелить по окну или нет:
Нельзя выстрелить – окно закрыто препятствиями или угол входа снаряда и нормали окна составляет 60-90 градусов – те выстрел параллелен стене.
Место для выстрела выбирают по такому способу:
Можно выстрелить с места – стрелять с места.
Если с места выстрелить нельзя – выбираем место для стрельбы по шаблону(см выше), Шаблон выбирается такой, чтобы к конечной точке меньше всего ехать, и из нее "можно" было выстрелить. еще проверяем, чтобы это место было дальше броска гранаты от других окон.
Едем на место, попутно проверяя возможность стрельбы по остальным окнам подозрительных домов.
На шаблоном месте – стреляем.
Если на шаблонном месте выстрелить нельзя(закрыто деревьями) едем дальше-расстреливаем другие окна, может потом удастся выстрелить, или выбираем другое место для шаблона.
Так как танки с собой переговариваются по радио(или флажками машут), то остальные танки не стреляют уже обстрелянным окнам и распределяют между собой окна-цели случайным образом, за исключением правила:
«Можно выстрелить с места – стрелять с места»
Ну.. вообще-то от того, что увеличено количество игровых секунд за тик игры, объем вычислений не прибавится, просто эти вычисления, что раньше происходили за 60 секунд реал тайма, - будут происходить за N тиков игры, которое пусть и не будет обязательно соответствовать 6 секундам реал тайма, но все таки будут меньше 15 секунд для скорости Х4.а если долгое время ничего не будет происходить - сделать режим времени Х10,
---
И выдавать вместе с игрой самый современный компьютер каждому игроку
В принципе, хорошо бы сделать асинхронный рендер, чтобы вычисления и модификация составляющей сцены(добавление/смена декораций) проходили в одном потоке, а вывод изображения и обработка нажатий клавишь, движения мышки - в другом.
Вот пример использования асинхронного рендера и за одно LUA. Подробности в ReadMe.
Скачать файл Lua_interpretator_OpenGL_Free_toshow.rar
Хотя это конечно точно аддон / патч.
Никак не определятьили хотя бы от того, что противник появился и скрылся на горизонте режим Х4 не отрубался.
---
Как это определить, что "появился и скрылся"?надо просто чтобы х4 не отрубался в принципе сам, а то при появлении противника он отрубается. А если ИИ ведет свои войско через лес – их моим войскам то видно, то не видно. Если они не видят противника и потом снова видят – отрубается Х4. только и делаешь что включаешь его снова
Надо будет отрубить – нажму на кнопку и отключу.