Воздушные имитаторы
Игровая карта имеет обычно фиксированный размер. Способ представления разных частей поверхности разными цветами – земли зеленой, пустыни желтой, рек и моря – голубыми, и различных их комбинаций относится к стандартным возможностям 3D-библиотек и поэтому здесь рассматриваться не будет. Попытки вылететь за границы карты либо не разрешены в игре, либо предоставляют возможность лететь, пока есть топливо, но кроме голой поверхности вы не увидите никаких новых предметов.
Основным в игре является массив объектов, участвующих в миссии. Структура отдельного объекта уже упоминалась выше. Он обязательно содержит свои координаты, отсчитываемые от одного из углов карты. Каждый момент времени, когда ваш самолет изменил свои трехмерные координаты, происходит проверка видимости каждого из объектов массива. Для этого после вычисления двумерного образа его угловой размер сравнивается с минимальным ограничивающим значением для необходимости отображения на экране.
Важным моментом в имитаторах этого рода является моделирование стрельбы. Как и в играх типа Arcade появляются новые динамические объекты типа «пуля». Но в зависимости от типа вооружения в этих структурах появляется новое поле – идентификатор цели. Это необходимо для самонаводящихся ракет, которые должны динамически изменять свою траекторию, преследуя мишень. Еще несколько полей будут характеризовать дополнительные параметры оружия, такие как дальность стрельбы, поражающая способность и т.д.
Некоторые игровые объекты, атакующие самолет героя, программируются иначе. Они в реальности не выстреливают снаряды, живущие в игре, а действуют по иному алгоритму. Когда ваш самолет попадает в поле их контроля, то по заданным вероятностям, меняющимся в зависимости от уровня, просто определяется сам факт поражения вашего истребителя и размеры ущерба. Это, конечно, сопровождается визуальными эффектами – кабина дрожит, экран заволакивают клубы дыма, и звуковыми – грохот взрывов. Например:1
2
3
4
5
6 { если i-й танк обнаружил наш объект Main: }
if Tank[i].See( Main ) then
{ если с некоторой вероятностью, зависящей от типа танка, он стреляет и поражает цель }
if Tank[i].RandFire( Main ) then
{ внести разрушения в наш объект в соответствии с разрушительной мощью i-й танка }
Main.Destroy(Tank[i].FirePower );
Для моделирования движения самолетов противника используются специальные алгоритмы преследования, иногда простые, иногда сложные. Вообще тема поведения различных объектов в игре заслуживает отдельного разговора, относящегося к алгоритмам искусственного интеллекта.
Некоторые имитаторы, делающие упор на боевые схватки с противником, не уделяют большого внимания реалистичности управления самолетом. В то же время в некоторых играх вам потребуется тщательно изучить многостраничное руководство, и иногда настоящие летные инструкции к реальному самолету, чтобы научиться отрывать истребитель от земли и не разбиваться при посадке. Моделирование реалистичного движения самолета достаточно сложно. Надо учитывать массу специфической информации, хорошо знать физику полета и подробные характеристики имитируемых машин. Но все усилия по созданию реалистичных имитаторов, как правило, окупаются сторицей. Сегодня хорошие имитаторы продаются сотнями тысяч копий, и интерес к новым играм этого жанра постоянно возрастает.
Главный объект-самолет содержит поля своих текущих координат, скорость и направление движения, текущее вооружение и техническое состояние различных систем. Мы приведем алгоритм простого имитатора боевого самолета.
Выбрать очередную миссию, проинициализировать все начальные значения в игре,
установить игровым объектам их координаты и характеристики. Начать полет.
Переместить самолет, изменить вид из кабины.
Опросить клавиатуру или джойстик. Если человек ничего не делает, то перейти
к п.6.
Если человек управляет самолетом, то внести коррективы в скорость, направление
движения и т.д.
Если герой выстрелил, то добавить объект «пуля» в список динамических объектов.
Просканировать список динамических объектов.Для объектов типа самолет противника: переместиться по алгоритму маневрирования,
по заданному закону распределения вероятности вести огонь по самолету героя;
Для наземных объектов типа танк: если самолет героя в зоне обнаружения, то начать
огонь по случайному закону;
Для объектов типа пуля: переместиться в новую точку в соответствии с возможностью
автоматического преследования;
Если она не пуста, то:
» если в ней поражаемая цель, то изменить характеристики цели (нанести технический
урон, вычеркнуть из списка объектов);
» вычеркнуть себя из списка динамических объектов.
Перейти к п.2.
Самым сложным в этом жанре компьютерных игр является моделирование реальных характеристик самолета, требующее использования достаточно сложных математических методов, грамотное и эффективное использование трехмерных библиотек, а также в ряде случаев моделирование разумного поведения самолетов противника. Попробуем рассмотреть приемы программирования тех или иных деталей авиаимитаторов более подробно. Сначала выделим те критерии оценки, которые относятся к работе дизайнеров, художников, сценаристов и музыкантов, но не программистов:
Соответствие самолету-прототипу по геометрическим размерам, общему виду (пропорциям),
камуфляжу, маркировке, расположению приборов и оборудования в кабине.
Разнообразие имитируемых самолетов соответствующего исторического периода.
Соответствие прототипам самолетов противника по внешнему виду, составу вооружения,
летным характеристикам.
Сложность и насыщенность воздушной обстановки.
Сложность и насыщенность наземной обстановки (объекты своих войск и цели противника).
Реалистичность изображения наземных целей.
Логическая последовательность и сложность заданий.
Специальные (нетиповые) задачи.
Исторические задания.
Дружественность интерфейса пользователя при планировании заданий, возможность
настройки опций.
Звуковая имитация.
Музыка.
Оцифрованная речь.
Увлекательность игрового пространства.
Общая привлекательность графики.
Простота освоения.
Теперь рассмотрим проблемы, возникающие при программировании других характеристик имитаторов.
Источник: http://delphi-graphics.ru