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

Состояние Существо 3: Хныкалка

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


Читайте также:
  1. I. Состояние вещей
  2. V2: Деформируемое состояние в точке. Связь между деформациями и напряжениями
  3. V2: Напряженное состояние в точке. Главные площадки и главные напряжения
  4. VI. НАСТОЯЩЕЕ СОСТОЯНИЕ
  5. А могут ли в Космосе существовать такие виды энергий, природа которых современной науке неизвестна?
  6. А) Процесс, деятельность как основной способ существования психического
  7. А. Критическое состояние

(А) Атака 5% (П)Преследование 60% (С)Случайное 20% (Р)Роение 10% (Ш)Шаблон 5%

Как вы можете судить по распределению вероятностей, Аннигилятор преимущественно атакует, Хныкалка предпочитает преследование, а Умник -что-то среднее между ними. Прежде чем перейти к разговору о реализации вероятностей, я хочу поговорить еще об одном принципе поведения игровых объектов — о роении. Роение означает, что создания в игре сбиваются в кучи и пытаются как-то сгруппироваться. Это похоже на то, как настоящие солдаты или насекомые иногда стремятся собраться вместе и остаться рядом друг с другом.

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

Моделирование этого состояния не очень сложно:

§ Выбрать существа, которые вы хотите сгруппировать вместе;

§ Выбрать среднюю относительно всех созданий позицию. Эта точка в пространстве является центром и может быть использована для вычисления траекторий движения всех объектов, которые следуют к ней;

§ Вычислить траекторию так, чтобы каждое создание следовало к центру.

В состояние роения имеет смысл переходить, когда слишком много противников вдруг начинают одновременно изрыгать огонь, торпеды и прочие средства уничтожения. Наверное, логичнее всего объединять существ по типам. Посмотрим на рисунок 13.6, на котором показано геометрическое представление роения.


Теперь перейдем к тому, как мы могли бы составить справочные таблицы вероятностей. Давайте посмотрим на наш игровой «мозг», изображенный на рисунке 13.7, с другой стороны.

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

Вот они:

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

§ Уклонение;

§ Случайное;

§ Шаблон;

§ Роение;

§ Неподвижность.

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

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

§ Дистанция до игрока;

§ Состояние и вооружение игрока: стреляет или нет.

Теперь можно построить таблицы вероятностей. Чтобы сделать это, заполним массивы цифрами от 1 до 6, которые представляют различные состояния. У нас получится таблица из 20 элементов. Для выбора состояния проиндексируем таблицу случайными числами от 0 до 19. Конечно, когда мы выбирай случайное число таким способом, как показано здесь:

sel= rand()%20

числа от 0 до 19 получаются равноценными. Возникает вопрос, как сделать так, чтобы переключение в то или иное состояние происходило чаще или реже? Иначе, что вам делать, чтобы заполнить таблицу тем распределением вероятностей которое вы желаете. К примеру, если вы хотите получить 50% преследования вам необходимо поместить в таблицу 10 единиц. Если роение должно составлять 20%, то вам необходимо занести в таблицу четыре пятерки. Начало вашей таблицы выглядело бы примерно так:

int table_1[20] = {1,1,1,1,1,1,1,1,1,1,5,5,5,5,... остальные_состояния}

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

Я надеюсь, что вы понимаете, о чем идет речь, но даже если нет, то поверьте мне - все, о чем мы говорим, довольно круто! Теперь, когда вы видите форму справочных таблиц, мы можем поговорить насчет выбора состояний. Как вы видели в программе «Умная муха» (Листинг 13.4), дистанция до игрока и случайные числа были использованы для выбора следующего состояния. Мы подошли к тому, чтобы сделать для этого же значительно больше. Мы будем учитывать как дистанцию, так и вооружение игрока для выбора одной из двух плотностей вероятности: одна используется, когда противники далеко, а другая - когда они близко.

При таком подходе всеми врагами используется только одна модель «характера», но, внося разнообразие в «индивидуальность» противников, мы без особых дополнительных затрат заметно обогатим игру. Такой алгоритм показан ниже.


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


<== предыдущая страница | следующая страница ==>
Листинг 13.4. Умная «Муха» (BFLY.C).| Алгоритм 13.6. Использование плотности вероятностей в выборе состояния.

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