Программирование игр для Windows. Советы профессионала


Шаблонные мысли


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

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

Когда они выполняют эти движения, то всего лишь следуют командам, заранее написанных шаблонов. Конструирование шаблонов - чрезвычайно легкое занятие и они нашли использование во многих сценариях. Как пример, используем шаблоны и случайные числа для моделирования «разума», который можно использовать, например, для управления небольшим космическим кораблем. Он пытается уклониться от вас, и в то же время пробует прицельно стрелять. То, что можно для этого сделать, показано в Алгоритме 13.3.

Алгоритм 13.3. Шаблоны со случайным выбором.

// Предположим, что pattern

- это массив, содержащий набор команд

// для реализации десяти различных шаблонов поведения

while(идет игра)

{

...код программы

// Проверяем, закончена ли обработка текущего шаблона

if (если обработка команд текущего шаблона закончена)

{

// Выбираем

новый шаблон

current_pattern = pattern[rand()%10];

позиция противника = старая позиция +следующий элемент текущего шаблона

Увеличиваем на единицу значение индекса элементов шаблона

...код программы

}

Алгоритм 13.3 кажется сложнее предыдущих Алгоритмов Преследования и Уклонения, но на самом деле это не так. В сущности:


§

Случайным образом выбирается некоторый шаблон;

§          Движение созданий в каждом проходе цикла изменяется в соответствии с направлением, указанным в шаблоне;

§          Затем мы переходим к следующему элементу шаблона.


Начало  Назад  Вперед



Книжный магазин