Главная » Документация » Алгоритмы, применяемые в играх

RSS

Алгоритмы, применяемые в играх

Двумерные имитаторы

К этой группе относятся имитаторы подводных лодок и наземных средств передвижения типа автомобилей или танков. Эта группа значительно проще предыдущей. Моделирование изгибающейся дороги тривиально, меняющийся пейзаж легко создается с помощью фоновой FLI-анимации, прокручиваемой непрерывно в одну или другую сторону. Таким образом устроены игры типа «Formula One» или «Test Drive». Ряд других игр использует стандартные трехмерные анимационные пакеты для создания более реалистичной обстановки, которая требуется, как правило, в боевых играх на большом театре действий. Это игры «Steel Thunder», «Tank», где используется типичное моделирование окружающих объектов – горок, деревьев, пушек и БМП противника и т.д.

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

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

Спортивные имитаторы

Спортивные имитаторы охватывают огромное число спортивных игр, которые можно условно разделить на четыре большие группы. Первая – это симуляторы самого процесса игры, когда результат вашей команды зависит от вашей реакции и координации. Чем быстрее вы лупите по клавишам, тем быстрее бежит спортсмен, точнее летит мяч в ворота, мощнее наносит удар боксер. Это игры типа «Dream Team» или «World» «Class Soccer». К второй группе относятся чисто стратегические имитаторы, в которых вы играете роль тренера, задающего команде подробный план на игру («Playmaker Football»). Третья группа – спортивные игры-менеджменты. Вы являетесь хозяином команды, и осуществляете планирование всех ее расходов – от покупки новых игроков до строительства большого стадиона. Алгоритм спортивных менеджментских игр будет рассмотрен ниже в более общей главе «Менеджмент». И к четвертой группе относятся имитаторы спортивных гонок типа «The Cycles». Они являются не очень сложными расширениями имитаторов автомобилей (см.пред.главу).

Sport-Arcade игры

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

Спортивные имитаторы

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

Каждая команда представлена массивом объектов типа «Спортсмен». В него включается следующая информация: координаты на игровом поле, дискретные, если поле разбито на условные квадраты, или непрерывные, как в реальной жизни, идентификационная информация об игроке типа его имени, возраста и т.д. и ряд параметров, характеризующих его физические способности. Это могут быть текущий уровень усталости, выносливость, скорость бега, сила удара по мячу, дриблинг, вероятностное распределение вратарских качеств в зависимости от направления и скорости полета принимаемого мяча и многое другое, относящееся к конкретной игре и определяемое профессиональными спортивными экспертами.

Отдельным объектом является мяч (или шайба). Он содержит собственные координаты, текущую скорость и направление перемещения, характеристики движения на различных видах покрытия и дополнительную информацию для разных видов игр. Этот объект реально присутствует далеко не во всех играх. В большинстве случаев достаточно имитировать лишь точность приземления мяча, так как все передачи и удары носят целенаправленный характер. Например, бросок мяча в корзину из-за шестиметровой зоны может быть запрограммирован так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{ если i-й игрок команды Command_A за шестью метрами от корзины ...}
if (BackMan[ Command_A, i ].X > 6) and
 
{ и если i-й игрок команды Command_A решает бросить из-за
шестиметровой зоны - порог вероятности Six_Goal_Value
пропорционален индивидуальному качеству i-го игрока - у кого-то
лучше получаются броски из-за шести метров, у кого-то хуже }
 
(Random(100) < BackMan[ Command_A, i ].Six_Goal_Value) and
 
{ и игрок успешно попал в корзину - порог вероятности
Six_Point_Value - опять-таки индивидуальная величина }
 
(Random( 100 ) < BackMan[ Command_A, i ].Six_Point_Value) then
begin
  { засчитать три очка }
end;

Рассмотрим основные действия игрока в игре в футбол. Он может бежать с мячом, изменять направление движения, отдавать пас, бить по воротам, нападать и отбирать мяч и в роли вратаря ловить мячи. Все эти действия совершаются при нажатии на соответствующие клавиши. Желательно, чтобы их было немного для удобства управления. Игроки, контролируемые компьютером, как правило, придерживаются довольно тупой тактики. Да это и не мудрено, потому что теория искусственного интеллекта требует слишком больших вычислительных мощностей для удовлетворительной имитации человеческого поведения даже в простых ситуациях.

Например, в футболе команда компьютера придерживается зонной системы, когда каждый игрок перемещается только в пределах некоего прямоугольного участка поля, нападая на появляющегося в зоне игрока противника и оставляя его, когда он уходит за пределы зоны. В баскетболе иногда используется персональная опека, когда каждому из пяти игроков предоставляется опекун, постоянно мешающий вашему баскетболисту. Пока алгоритмы этой группы спортивных компьютерных игр не оформились окончательно и фирмы предлагают совершенно отличные друг от друга методы управления спортивной борьбой. Рассмотрим общий алгоритм Sport-Arcade игр.

  1. Инициализация параметров игры. Выбрать некоторого спортсмена для управления.
  2. Если игрок нажал клавишу, то выбрать действие:
    • перемещение: переместить выбранного спортсмена;
    • дриблинг: перемещать спортсмена с проверкой сопротивления игроков противника;
      при необходимости отдать мяч;
    • пас: в соответствии с длиной паса и индивидуальными характеристиками спортсмена
      определить точку приземления мяча;
    • оборона: рассчитать вероятность отбора мяча у игрока противника в соответствии
      с индивидуальными характеристиками;
    • удар по воротам: с учетом положения игрока по отношению к воротам и их защищенностью
      игроками противника рассчитать вероятность попадания в створ ворот; по индивидуальным
      характеристикам вратаря рассчитать вероятность ловли мяча.
  3. Для i-го игрока, управляемого компьютером, выполнить простейшие действия:
    • если мяч или игрок команды соперников с мячом в зоне контроля данного игрока,
      то перемещаться к нему и попытаться отобрать мяч;
    • если мяч у игрока своей команды, то перемещаться вперед до границы своей зоны;
    • если мяч у игрока чужой команды, то перемещаться назад до границы своей зоны;
    • если мяч у самого игрока, то в зависимости от функций (нападающий, защитник)
      и распределения вероятностей рассчитать необходимость паса/дриблинга/удара по
      воротам.
  4. Вернуться к п.2.

Спортивные стратегические игры

В этих играх вы выступаете в роли тренера, определяющего тактическое задание команде на игру. К примеру, в игре «Playmaker» «Football» вы оперируете огромным количеством информации, касающейся игроков вашей команды, такой как скорость бега, точность паса, сила, выносливость и другие. Вы определяете тактическую расстановку игроков перед каждым матчем, детализируя ее до схем передачи мяча, персональной опеки и так далее. Кроме того, в процессе самого матча вы можете вносить некоторые коррективы в тактические расстановки с помощью мышки или клавиш, например, меняя направление паса или давая указание на прорыв по флангу.

Внутри программы порядок распасовки или дриблинга на территории противника устанавливается некоторым распределением вероятностей между задачами игрока. Для футбола в тактические параметры игрока могут входить: пас, дриблинг, удар по воротам. Вы задаете расстановку игроков на футбольном поле (например, по системе 4+4+2) и указываете для каждого игрока цель для паса, частоту ударов по воротам для нападающих или попытку дриблинга для сольного прохода. В программе каждому объекту-игроку соответствует список параметров, описывающий его поведение. Например, для защитника, когда он оказывается с мячом, указываются номера игроков, которым он должен будет отдавать пас:

1
2
3
4
5
6
7
8
9
10
{ Количество игроков, которым третий номер будет пасовать (два): }
Player[ 3 ].NTargets := 2;
{ Номер первого игрока-5: }
Player[ 3 ].Target := 5;
{ Вероятность в процентах частоты пасования этому игроку-30% }
Player[ 3 ].TargetRnd := 30;
{ Номер второго игрока-7: }
Player[ 3 ].Target := 7;
{ Вероятность в процентах частоты пасования этому игроку-70% }
Player[ 3 ].TargetRnd := 70;

Визуально эти параметры задаются с помощью диалогового окна или другими графическими элементами типа управляющих линеек.

В реальности получение мяча игроком, кому был адресован пас, определяется индивидуальными характеристиками пасующего (в нашем случае, распределением точности паса в зависимости от расстояния до принимающего у третьего номера). Если мяч был потерян во время передачи или дриблинга, то определяются ближайшие к мячу игроки. Если несколько ближайших игроков расположены примерно на одинаковом расстоянии от мяча, то происходит имитация борьбы за мяч в соответствии с индивидуальными параметрами каждого из игроков, вступающих в борьбу. Понятно, у защитников характеристики отбора мяча будут выше, чем у нападающих и т.п.

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

Непростым является настройка скорости прохождения игры. Количество событий за один квант времени требует точного регулирования, чтобы за игру не забивалось слишком много или слишком мало голов. Это достигается лишь практическими экспериментами с готовой моделью, когда количество действий за одну минуту игрового времени, например, определяется исходя из счета игры при встречах различных по силе команд. Количество забитых мячей подвержено нормальному распределению. За 90 квантов игры равные по силе команды могут забивать друг другу до 2-3 мячей, преимущественно 2, реже 0,1,3, очень редко 4. Слабые команды в состоянии забить более сильной команде обычно один мяч, реже 2, а чаще ноль, а пропустить от 2 до 6-7. Точная балансировка параметров этого типа компьютерных игр являеся неотъемлемой частью их разработки.

Возможный алгоритм спортивных стратегических игр на примере футбола:

  1. Проинициализировать начальные параметры и расстановки игроков каждой команды.
  2. Если мяч находится у i-го игрока j-й команды, то определить его действия с
    мячом – дриблинг, пас или удар по воротам.

    • дриблинг: для траектории до конечной точки перемещения игрока определить возможных
      защитников противника, находящихся в некоторой эпсилон-окрестности траектории
      дриблинга, и для каждого из них проверить факт отбора мяча в соответствии с индивидуальными
      характеристиками игрока и защитника. В случае отбора поменять хозяина мяча;
    • пас: в соответствии с индивидуальной точностью паса рассчитать точку приземления
      мяча; определить ближайших к мячу игроков в некотором радиусе приземления, и если
      игроков окажется несколько из разных команд, то начать борьбу за мяч, как в дриблинге.
      При необходимости поменять хозяина мяча;
    • удар по воротам: с учетом технической характеристики игрока «точность удара
      по воротам», расстояния до ворот и угла удара определить вероятность попадания
      мяча в створ ворот. При удачном раскладе учесть качество «непробиваемости» вратаря
      и уже в случае пропуска мяча вратарем засчитать гол.
  3. Если мяч не находится ни у одного из игроков, то вступить в борьбу за него
    (см.выше). Определить обладателя мяча и перейти к п.2.
  4. Увеличить время на некоторый квант. Проверить окончание игры. Перейти к п.2.
  5. Если забит гол, то изменить счет, передать мяч определенному игроку пропустившей
    гол команды в центре поля и перейти к п.2.

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

Страницы : 1 2 3 4 5 6 7