Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 13.3. Одинокая муха. (DFLY.C).

Листинг 12.3. Автономное управление светом. | Листинг 12.4. Функция ответа (PRES.C). | Листинг 12.5. Перепрограммируем системные часы (OUTATIME.C). | Листинг 12.6. Трехмерное звездное небо (STARS.C). | Листинг 12.7. Киберточка (CYBER.C)._____________________ | ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ | Алгоритм 13.1. Алгоритм Преследования. | Листинг 13.1. Программа Терминатор (TERM.С). | Алгоритм 13.2. Алгоритм Уклонения. | Алгоритм 13.3. Шаблоны со случайным выбором. |


Читайте также:
  1. Алгоритм 13.3. Шаблоны со случайным выбором.
  2. Листинг 11.2. Структура данных игрока.
  3. Листинг 11.3. Функции полета мухи.
  4. Листинг 11.4. Муравейник (ANTS.С).
  5. Листинг 11.5. Падение мяча (BALL.C).
  6. Листинг 11.6. Идеальный газ (GAS.C).
  7. Листинг 12.2. Шпионим за часами (SPY.C)._________________

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ////////////////////////////////////////

#include <stdio.h>

#include <graph.h>

#include <math.h>

// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ////////////////////////////////////////

// Указатель на системную переменную, содержащую

// значение таймера. Содержимое этой 32-битовой ячейки

// обновляется 18.2 раза в секунду

unsigned int far *clock=(unsigned int far *)0x0000046C;

//////////////////////////////////////////

void Timer(int clicks)

{

// эта функция использует значение таймера для формирования

// задержки. Необходимое время задержки задается в "тиках"

// интервалах в 1/18.2 сек. Переменная, содержащая 32-битовое

// текущее значение системного таймера расположена

// по адресу 0000:046Ch

unsigned int now;

// получить текущее время

now = *clock;

// Ничего не делать до тех пор пока значение таймера не

// увеличится на требуемое количество "тиков".

// Примечание: один "тик" соответствует примерно 55 мсек.

while(abs(*clock - now) < clicks){}

} // конец функции Timer

// ОСНОВНАЯ ФУНКЦИЯ /////////////////////////////////////

void main(void)

{

int ex=160,ey=100; // начальная позиция "Мухи"

int curr_xv=1,curr_yv=0, // текущие факторы

// преобразования Координат.

clicks=0; // время, через которое

// "Муха" прекращает движение

//в произвольном направлении.

_setvideomode(_MRES256COLOR);

printf(" The Dumb Fly - Any Key to Quit");

//главный игровой цикл

while(!kbhit())

{

// очищаем точки на экране

_setcolor(0);

_setpixel(ex,ey); // перемещение "Мухи"

// "мозговой штурм"

// закончить ли движение в текущем направлении?

if (++clicks—20)

{

curr_xv = -5 + rand()%10; // от -5 до +5

curr_yv = -5 + rand()%10; // от -5 до +5

clicks=0;

} // конец задания нового направления

// перемещаем "Муху"

ex+=curr_xv;

ey+=curr_yv;

// убеждаемся, что "Муха" находится в пределах экрана

if (ex>319) ex=0; if (ех<0) ех=319;

if (ey>199) ey=0; if (еу<0) еу=199;

// конец "мозгового штурма"

// рисуем "Муху"

_setcolor(12);

_setpixel(ех,еу);

// небольшая задержка...

Timer(1);

} // конец цикла while

_setvideomode(_DEFAULTMODE);

} // конец функции main

Думаю, после запуска программы вы согласитесь с тем, что мы, наконец получили все необходимое для моделирования летающего «разумного существа». Несколько простых правил, шаблоны и случайные числа помогли нам создать довольно правдоподобную имитацию полета насекомого. Это просто чудесно! Теперь настало время поговорить о конечных автоматах.

Конечные автоматы

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

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

 


Теперь у нас есть набор решений, чтобы ответить на вопросы:

§ Какая причина заставит КА изменить свое состояние?

§ Как заставить КА выбрать следующее состояние?

Это хорошие вопросы - посмотрим, как выглядят видеоигры изнутри. Взгляните на рисунок 13.4. На нем показано абстрактное представление некоторого КА, правда, пока еще без логики смены состояний.

Конечный автомат, управляемый окружающей средой

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

Начнем создавать КА с того, что он будет случайным образом выбирать одно из нижеперечисленных состояний:

§ преследование;

§ уклонение;

§ случайное;

§ шаблон.

Но в настоящей игре для управления состоянием КА вместо случайных чисел было бы лучше привлечь саму игровую ситуацию. Ниже приведен пример КА действующего по обстоятельствам:

§ Если игрок близко, КА переключается в состояние Шаблон;

§ Если игрок далеко, можно заставить ПК охотиться за ним, используя состояние Преследование;

§ Если игрок обрушил на наше маленькое создание шквальный огонь, КА моментально переходит в состояние Уклонение;

§ Наконец, при любой иной ситуации КА отрабатывает состояние Случайное. Рисунок 13.5 демонстрирует подобное поведение конечного автомата.

Перейдем к программной реализации описанного КА. Мы не станем создавать сложное игровое пространство. Для демонстрации нам достаточно иметь чистый экран с парой точек, изображающих игрока и противника. Чтобы понять суть, этого вполне достаточно. Программа из Листинга 13.4 моделирует полет действительно назойливой мухи, которая буквально заедает игрока.


Дата добавления: 2015-07-12; просмотров: 126 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 13.2. Муха (FLY.C).| Листинг 13.4. Умная «Муха» (BFLY.C).

mybiblioteka.su - 2015-2024 год. (0.014 сек.)