![]() |
![]() |
Конечным инициальным детерминированным автоматом называют объект, определенный следующими шестью понятиями:
входной алфавит A = { a1,...,am };
внутренний алфавит – множество состояний конечного автомата B = { b1,...,bn };
выходной алфавит C = { c1,...,cp };
функция переходов f : A x B → C или f ( ai bi ) = bj , где ai
A; bi, bj
B;
функция выходов φ: B → C или φ ( bi ) = ci , где bi
B, ci
C .
Пример .
Большинство игр основано на некотором конфликте, который может быть основной идеей или фоном. Нам нужно разработать простейшую модель поведения персонажа, которая позволит ему действовать под постоянными атаками игрока.
# define STATE_ATTACK 0 // атака игрока
# define STATE_RETREAT 1 // отступление
# define STATE_RANDOM 2 // случайное движение
# define STATE_STOP 3 // остановка на время
# define STATE_SEARCH 4 // поиск энергии
# define STATE _ PATTERN 5 // выбор и выполнение шаблона
int creature_state = STATE_STOP; // начальное состояние
int creature _ counter = 0; // отслеживание времени
int creature _ x = 320; // начальная позиция на экране
int creature_y = 200;
int creature_dx = 0; // текущая траектория
int creature_dy = 0;
int player_x = 10;
int player _ y = 20;
// реализация логики персонажа.
// обработка текущего состояния
switch ( creature _ state )
{
case STATE _ ATTACK :
// первый шаг: движение в направлении игрока
if (player_x > creature_x) creature_x++;
if (player_x < creature_x) creature_x--;
if (player_y > creature_y) creature_y++;
if (player_y < creature_y) creature_y--;
((rand ()) % 5) = = 1 FireCommon;
break ;
case STATE_RETREAT:
// движение от игрока
if (player_x > creature_x) creature_x--;
if (player_x < creature_x) creature_x++;
if (player_y > creature_y) creature_y--;
if (player_y < creature_y) creature_y++;
break ;
case STATE _ RANDOM :
// перемещение персонажей в случайном направлении, которое было определено при входе в это состояние
creature_x += creature_dx;
creature_y += creature_dy;
break ;
case STATE_STOP:
break ;
case STATE _ SEARCH :
// выбираем объект для поиска и движемся по направлению к нему
...
case STATE _ PATTERN :
// выбираем выбранный шаблон
...
}
![]() |
![]() |