Каталог статей
Меню сайта


Категории каталога
Программирование [3]
Статьи по Программированию.
Разное. [1]
Статьи на разные темы.


Форма входа


Поиск


Друзья сайта




Онлайн всего: 1
Гостей: 1
Пользователей: 0
Приветствую Вас, Гость · RSS 24.09.2017, 04:26
Главная » Статьи » Статьи » Программирование

Основы проектирования искусственного интеллекта.

Основы проектирования искусственного интеллекта.

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

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

силы. А я попытаюсь дать вам основные понятия, служащие для разработки

AI. В общем, поехали. :-)

Детерминированные алгоритмы

Детерменированные алгоритмы означают предопределённое и заранее

запрограммированное поведение объектов. Это встречается довольно часто

в современных играх, хотя и было придумано во времена игр типа PacMan.

Но все-таки из множества простых алгоритмов можно построить мощный алгоритм.

Случайное движение

Этот алгоритм можно объединять с детерминированными, т.е. случайным образом

выбирается какое-либо действие при определённых событиях. Также можно и без

него, но получится это некрасиво! Если в цикл добавить этот код,

x+= -8 + rand()%10 ;

y+= -8 + rand()%10 ;

то всё видно даже ребёнку. Этот код можно записать иначе, тем самым можно

сделать более плавные движения. Просто сделайте условие и переменные xp, yp

указывающие на точку, в которую нужно переместиться. А также переменную st

которая будет указывать, что объект должен делать, искать новую позицию для

перемещения или перемещаться. Теперь запишем и сам алгоритм:

if( st == 0)

{

xp=rand()%10;

yp=rand()%10;

st = 1

} else {

if( x < xp )
x+=1;

if( x > xp )

x-=1;

if( y < yp )

y+=1;

if( y > yp )

y-=1;

if((x==xp) & (y==yp))

st=0;

}

Всё просто!!! Комбинация и соединение различных алгоритмов AI

дадут вам большой результат. Конечно же это зависит и от

профессионализма программиста.

А теперь чтобы это доказать, запишем наш алгоритм в функцию

и поэкспериментируем!

void ai_function( int max_rand, int p)

{

if( st == 0)

{

xp=rand()%max_rand;

yp=rand()%max_rand;

st = 1

} else {

if( x < xp )
x+=p;

if( x > xp )

x-=p;

if( y < yp )

y+=p;

if( y > yp )

y-=p;

if((x==xp) & (y==yp))

st=0;

}

}

Теперь у вас есть функция ai_function (int max_rand, int p).

С помощью её можно сделать ещё более мощный алгоритм.

Ниже написан код с использованием этой функции.

Перед условиями нужно переменной object_ai задавать

случайные значения от 1 до 5, а потом запишем следующее:

[cj]

if( object_ai == 1 )

ai_function( 5, 1 );

if( object_ai == 2 )

ai_function( 14,4 );

if( object_ai == 3 )

ai_function( 2, 7 );

if( object_ai == 4 )

ai_function( 6, 5 );

if( object_ai == 5 )

ai_function( 7, 7 );

Кстати, предпоследний алгоритм это почти алгоритм следования

, переменные xp yp, можно считать координатами второго объекта!

Немного поправить код и всё готово. :-)

Я надеюсь всем всё понятно! Если нет, то прочитайте ещё раз :-)

Ну а теперь перейдём к другим вопросам!

Сценарии действий

Сценарии это те же детерменированные алгоритмы, т.е.

сценарий это одно из действий объекта, который он может

выполнить, действия могут быть детерменированные частично или полностью.

Например, объект с координатами x, y, может выполнить только 5 различных действий,

т.е. сценариев (дальше я их буду сценариями называть). Переменная get будет

хранить номер сценария, который выполняет объект. Сценарии следующие:

1) sc_1(); - объект двигается прямо

2) sc_2(); - объект ищет укрытие

3) sc_3(); - объект нападает

4) sc_4(); - объект ждёт, при этом медленно двигается

5) sc_5(); - объект выполняет случайные движения

Теперь просто напишите функцию, которая будет проверять значения переменной

get, и в зависимости от значения выполнять сценарии!

Всё просто! Обязательно попробуйте что-нибудь сделать со сценариями,

и с предыдущими способами (хотя они особо не отличаются).

Copyright © DRAG 2008

Категория: Программирование | Добавил: SashaRX (21.03.2008) | Автор: DRAG
Просмотров: 855 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]