Отправляет email-рассылки с помощью сервиса Sendsay

Новости сайта www.dyda.info

  Все выпуски  

DarkBASIC - легко создаем 3D миры и игры!


Информационный Канал Subscribe.Ru


БЕСПЛАТНО! Русский DarkBASIC демо + примеры и "фенечки"
  Ограничение по трафику
Номер 20/декабрь 2002
От редактора

  Баннер справа приведет вас в интернет-магазин, где продаются не только наладонники, но и сотовые телефоны и даже поддержанные нотебуки, и много еще чего. Магазин работает более 4-х лет и я рекомендую его как надежный.
  Информация для новых подписчиков! Если вы "не врубаетесь" о чем идет речь в рассылке - посмотрите предыдущие номера рассылки. И вам станет интереснее! :-) Также советую посетить оффициальный русский сайт www.darkbasic.ru и darkbasic.narod.ru

  Замирая в глубоком пардоне, Илья Середа.


Содержание номера:

      1. Новости

      2. "Искусственный интеллект в компьютерных играх" Часть 2.




Новости

  В январе Crow Interactive обещает показать новые скриншоты, которые "... покажут все что будет в ДЕМО, драки, графику, визуализацию, AI, световые эффекты, магия, NPC, короче все что вы еще не видели. Посмотрите на обновленный двигатель. Короче другими словами основная работа, над самим двигателем переходит на стадию завершения. Теперь только штамповка и безумная красота нашего МИРА. Как говорится чем больше тем лучше. Ну а потом подождем какого нибудь КОНКУРСА, Ха-ха-ха. Мы надеемся на успех." Я тоже надеюсь на ваш успех и жду скриншоты! :-)

  На английском официальном сайте выложены новые игры, из которых интересны на мой взгляд две: это трехмерный вариант классической игры Sokoban и "Звездное привидение 3: Тени Ориона" вариант на тему звездных войн, играть можно также и по сети. Хочу также заметить, что это два коммерческих и вполне успешных проекта. Так что и на играх написанных с помощью DarkBASIC-а можно довольно прилично зарабатывать. Если вы автор оригинальной игры - можете попробывать продавать ее, хотя бы с помощью сервиса www.softkey.ru. Кстати, если вам эта тема интересна - напишите мне и я сделаю небольшую статью в следующем выпуске рассылки. А ниже вы видите мини-скриншоты игр и нажав на них - вы попадете на странички для скачивания.

Virtual Insanity Limited Edition (Demo) Star Wraith 3



Дмитрий Хороших (aka David Good)

ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ В КОМПЬЮТЕРНЫХ ИГРАХ

Продолжение.

Уклонение

Продолжу свою статью разговором о явлении противоположном преследованию - об уклонении. Чтобы заставить объект, которым управляет компьютер, уклоняться от игрока нужно сделать в точности противоположное предыдущим действиям. Т.е. поменять плюс на минус, а минус на плюс. Или, в нашем случае, Dec на Inc, а Inc на Dec.

Листинг 1.2. показывает это:


`Мозг :-) врага:
if cz# > pz#
and cz# < 900
inc cz#, 2.0
endif
if cz# < pz#
and cz# > 100
dec cz#, 2.0
endif
if cx# > px#
and cz# < 900
inc cx#, 2.0
endif
if cx# < px#
and cz# > 100
dec cx#, 2.0
endif


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

Чтобы увидеть этот алгоритм в действии, скопируйте код из предыдущего листинга в редактор и замените код преследования на код уклонения из листинга 1.2.

ШАБЛОННЫЕ МЫСЛИ

Шаблоны

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

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

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

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

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

По аналогии с нервной системой, случайное число можно представить как нервный импульс, а выбранный шаблон действий - реакцию на него.

Пути

А сейчас я расскажу вам о том, как заставить монстра совершать обход территории. Прогуливающийся монстр производит на нас впечатление разумного существа, но на самом деле здесь так же действует специальный вариант того же шаблона. На терминологии дизайнеров уровней такие шаблоны называются путями. Пути, как и шаблоны, представляют собой набор координат в пространстве. Самый простой вариант присутствует в приставочной игре "Super Mario". Каждый, кто играл в эту игру, наблюдал как, например, улитка ползала по островку в бесконечном цикле вперед и назад. Ее путь состоял всего из двух координат. В более сложных путях их может быть десять и более. Далее, двигателю игры, остается только перемещать объект от точки к точке. При этом мы должны не забывать воспроизводить анимацию ходьбы (если это, например, гоблин) и поворачивать объект так, чтобы он смотрел на следующую точку.

 Конструирование путей (как и шаблонов) вручную не благодарное занятие, а при конструировании их на DarkBASIC еще и не для слабонервных. В Microsoft C++ или Microsoft Visual Basic мы можем присваивать элементам массива все числа в одной строке. При программировании на DarkBASIC у нас такой возможности нет. Единственное, что можно попробовать в этом случае - написать шаблон или путь в файле, а затем загружать по мере необходимости в массив функцией Load Array. Созданием путей вручную уже никто не занимается, это делается в редакторе уровней - мы просто расставляем точки на уровне, объединяем их в путь и назначаем объекту.

Подведу итог рассказа о путях листингом 1.3., демонстрирующим применение путей.

Листинг 1.3.:


`Стандартные настройки
set display mode 640, 480, 16
sync on
autocam off


`Высота ландшафта
ground_height# = 0

`Красный шар компьютера
mdl_Enemy = 1

`Столбы
Dim mdl_Columns(2)
mdl_Columns(1) = 2
mdl_Columns(2) = 3

`Путь перемещения шара компьютера - десять координат X и Z
Dim pth_Enemy#(10, 2)
pth_dot = 1

pth_Enemy#(1, 1) = 500
pth_Enemy#(1, 2) = 900
pth_Enemy#(2, 1) = 700
pth_Enemy#(2, 2) = 800
pth_Enemy#(3, 1) = 700
pth_Enemy#(3, 2) = 600
pth_Enemy#(4, 1) = 300
pth_Enemy#(4, 2) = 400
pth_Enemy#(5, 1) = 300
pth_Enemy#(5, 2) = 200
pth_Enemy#(6, 1) = 500
pth_Enemy#(6, 2) = 100
pth_Enemy#(7, 1) = 700
pth_Enemy#(7, 2) = 200
pth_Enemy#(8, 1) = 700
pth_Enemy#(8, 2) = 400
pth_Enemy#(9, 1) = 300
pth_Enemy#(9, 2) = 600
pth_Enemy#(10, 1) = 300
pth_Enemy#(10, 2) = 800

`Создаем ландшафт
make matrix 1, 1000.0, 1000.0, 25, 25
randomize matrix 1, 20
set matrix 1, 1, 1, 1, 1, 1, 1, 1

`Создаем шар компьютера
make object sphere mdl_Enemy, 50.0
color object mdl_Enemy,
rgb(255, 0, 0)

толбы
for c = 1 to 2
make object
cylinder mdl_Columns(c), 100.0
scale object mdl_Columns(c), 70, 500, 70
color object mdl_Columns(c),
rgb(0, 255, 0)
next c

position object mdl_Columns(1), 500, 200, 700
position object mdl_Columns(2), 500, 200, 300

`По
мещаем шар компьютера на первую точку пути
cx# =
pth_Enemy#(1, 1)
cz# =
pth_Enemy#(1, 2)

`Получим высоту ландшафта под шаром компьютера
ground_height# =
get ground height(1, cx#, cz#)
inc ground_height#, 20.0

`Помещаем шар компьютера
position object mdl_Enemy, cx#, ground_height#, cz#

`Наводим камеру на игровое поле
position camera 500, 1000, -200
xrotate camera 50.0

`Игра
Do

`
Проверяем, не достиг ли объект текущей точки пути
if cx# = pth_Enemy#(pth_dot, 1)
and cz# = pth_Enemy#(pth_dot, 2)
`Нацеливаем объект на следующую точку
inc pth_dot
`Если весь путь пройден - начинаем все сначала
if pth_dot > 10 then pth_dot = 1
endif

`Перемещаем шар к текущей точке пути
if cx# > pth_Enemy#(pth_dot, 1)
dec cx#, 2.0
endif
if
cx# < pth_Enemy#(pth_dot, 1)
inc cx#, 2.0
endif
if cz# > pth_Enemy#(pth_dot, 2)
dec cz#, 2.0
endif
if cz# < pth_Enemy#(pth_dot, 2)
inc cz#, 2.0
endif

`Получим высоту ландшафта под шаром компьютера
ground_height# =
get ground height(1, cx#, cz#)
inc ground_height#, 20.0

`Перемещаем шар компьютера
position object mdl_Enemy, cx#, ground_height#, cz#

`Рендерим картинку
sync

Loop


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

СЛУЧАЙНЫЕ ПЕРЕДВИЖЕНИЯ

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

Случайные передвижения используются во многих компьютерных играх как один из способов реагирования виртуального мира на действия игрока. Такой образ действий можно назвать "неявной логикой". Неявная логика помогает принять решение при отсутствии части необходимой информации, или полном ее отсутствии.

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

К примеру, когда вы сталкиваетесь с решением некоторого вопроса, такого как обход препятствия, возникшего на вашем пути, вы попытаетесь обойти его двигаясь направо или налево. Если все варианты равны между собой и одинаково возможны, решение скорее случайно, и следовательно, является "нейвным решением". Если бы кто-нибудь спросил вас, например, почему вы решили обойти столб справа, а не слева, то вряд ли вы сумели бы внятно объяснить мотивы своего поведения. В нашем случае, "неявная логика" это случайные числа и шаблоны.

Продолжение следует.

(c) 2002 Дмитрий Хороших (aka David Good)
e-mail:
advcoder@mail.ru


Выпуск закончил 13 января 2003 года в 16:43 мск


(C) 2002 Илья Середа
http://darkbasic.narod.ru - это и так понятно :-)
    http://virland.narod.ru - "Домашняя киностудия"
     http://sereda.narod.ru - "ВАЗ 1111 ОКА"

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное