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

Как самому создать компьютерную игру #11


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
Как самому создать компьютерную игру
Выпуск 12

Сайт рассылки - http://gamemaker.by.ru 
Адрес для обратной связи - gamemaker@pisem.net

Приветствую всех, кто читает эту рассылку!

Сегодня в выпуске:
1. Искусственный интеллект. Часть 2.
2. Рейтинг внимательных читателей.
3. Наши друзья.
4. В следующем выпуске.



Искусственный интеллект. Часть 2.

     В прошлый раз мы рассматривали модель двух точек, одна из которых движется произвольно, а другая к ней притягивается, причем скорости у них различны. (Это в общем случае) Далее, модель была немного усложнена. Было ограничено пространство, где могут "двигаться" тачки, а также появились некоторые множества со своими свойствами. Их условно назвали "препятствиями". Точки играли роль различных объектов.
     Теперь попробуем еще усложнить нашу модель. Пусть дано два множества объектов, каждое из которых имеет свои свойства. Пока не будем уточнять, какие именно. Считаем, что в предыдущей модели одна из точек (а она играет роль какого-то объекта) была из первого множества, другая из второго. Можно пока что условно называть первое множество "дичь", а второе "охотники". (Множества А и В) Тогда обозначим за U множество, в котором "действуют" элементы из А и В. Т.е. по сути, игровое поле, где могут перемещаться наши объекты. V - множество препятствий.
     Возьмем объекта а из А и b1, b2 из В. Элемент (объект, точка) а будет произвольно двигаться в U, а b1 и b2 будут стараться с ним сблизиться. Определим понятие сблизиться. Введем норму элемента как квадратный корень из суммы квадратов координат. Т.е. норма элемента x(x1,...,xn) равна sqrt(sqr(x1)+...+sqr(xn)). Элементы сблизились, если норма их разности меньше какого-то наперед заданного числа. Вернемся к нашим элементам. Сначала опять разберем простейший вариант, когда V - пустое множество. Т.е. "препятствий" нет. Тогда попробуем алгоритмически описать действия b1 и b2, зависящие от a. Обозначим b1(t) и b2(t) - траектории b1 и b2, зависящие от времени t. a(t) - траектория а. На самом деле b1(t) и b2(t) зависят от a(t), а а(t) в нашей модели пока что произвольна. Получается некоторая неопределенность. Потому введем еще множество G - возможные действия по управлению объектом а. Фактически действия игрока. В нашем случае это множество состоит из перемещений (только). Определим g из G - функция, управляющая объектом а. На практике это функция, которая считывает определенную информацию с устройств ввода (клавиатура, мышь, джойстик итд) и переводит ее во множество G. Т.е. строго можно написать g:I->G. И тогда a(t), траектория, зависит не только от t, но и от g, т.е. будем писать a(t,g). (причем нужно понимать, что t и g - элементы разной природы: t - непрерывная величина, обозначающее время, а g - отображение) Теперь попробуем предположить независимость функций b1(t) и b2(t). Тогда задача разбивается на две отдельные и сводится к предыдущей модели. Пусть b1(t) и b2(t) зависимы. Тогда вспомним тактику охотников на охоте. Одна группа гонит дичь к другой. Так же и здесь. Рассчитаем расстояние b1 от а и b2 от а. (нормы b1-а и b2-а) Пусть оно меньше у b1. Тогда b1 будет сокращать расстояние, а b2 - анализировать возможные перемещения а и направление движения b2 будет к наиболее вероятному перемещению а. В частном случае, когда U, например, прямоугольная область, рассчитываем расстояние до краев области U в каждом из возможных (четырех) направлений. Далее, учитывая расположение b1 и b2, получаем вероятность перемещения в каждую сторону. После b1 просто "тупо" сокращает расстояние по прямой, а b2 движется к наиболее вероятному направлению движения, т.е. вводим функцию a_max(t+1) - координата точки, наиболее вероятной для продолжения траектории a в следующий момент времени. Модифицируем эту модель.
     Вспомним, что расстояние от b1 до a мы предполагали меньше, чем b2 до a. Теперь введем новые переменные bMax и bP, - указатели на b1 или b2 в зависимости от того, какой способ приближения выбирается. bMax - по прямой, bP - по вероятности.
     Возникает разумный вопрос. Вот мы тут придумываем различные алгоритмы, пытаемся научить компьютер думать. А каким же образом можно оценить тот или иной алгоритм. Как их можно сравнить. Пока что давайте возьмем лишь два критерия. Т.е. поставим два вопроса. Во-первых, что можно сказать о сходимости произвольного алгоритма? Как можно определить, какой алгоритм быстрее приводит к результату, которого мы так хотим добиться?
     Именно это и будет сегодня "домашним заданием". :) Действительно, очень интересно узнать, что Вы об этом думаете. Пишите.


Рейтинг внимательных читателей.


      В одном из прошлых выпусков были рассмотрены некоторые алгоритмы движения точки по окружности. (или, скорее, один алгоритм) После этого мне пришло много писем с предложение другого, более быстрого и простого в понимании алгоритма. И это не может не радовать. Поэтому могу сказать, что эксперимент прошел удачно и впредь, в рассылке будут оставляться некоторые пробелы. Если Вы их находите, это очень хорошо. Значит, прочтение рассылки идет на пользу, и ничего не скрылось от Вашего понимания по данному вопросу. Все дополнения присылайте на почтовый адрес рассылки. Кое-что из этого будет опубликовано в рассылке, а остальное на сайте. Также, с этого выпуска на сайте будет открыт рейтинг лучших читателей, в который войдут читатели, присылающие интересные и полезные замечания и дополнения. Так что есть, к чему стремиться :)))
     А сейчас несколько слов о более быстром алгоритме. Он предельно прост, поэтому публикация авторских писем по этому вопросу, по моему, не требуется. Но в будущем нетривиальные алгоритмы из писем обязательно будут публиковаться.
     Суть метода заключается в следующем. Кроме обычной декартовой системы координат существуют и другие. В данном случае удобнее взять полярную систему координат. Тогда после замены x=r*cos alfa, y=r*sin alfa приходим к системе, где каждая точка характеризуется расстоянием от центра и углом наклона. А это как раз то, что нужно. Изменяя угол наклона, будем двигать нашу точку по окружности. Угол изменяем от 0 до 2 пи.
     Усовершенствовать этот метод можно следующим образом. Вводим сетку значений и не каждый раз считаем выражение, а берем значение из сетки. Вот и все. Вроде очевидно.


PS: Кстати, никто не заходил на сайт Morfit? (кто заходил, тот поймет, про что идет речь) Поделитесь впечатлениями. Вообще как, реальная вещь? (может быть об этом будет рассказано в следующих выпусках).




Наши друзья.


     
Рассылки:
Кодировка:
Формат:
Ваш E-Mail:
Выберете рассылку:
Мир компьютерных и настольных РПГ
G-PLAY: информация об играх
Хостинг: Место для вашего сайта. Обзоры, Вопросы,Ответы
Мир 3d-Action Games
Программирование на Visual Basic и Active Server Pages
Головоломки для умных людей
Логические задачи на сообразительность




В следующем выпуске.


      За это время накопилось много материала, который найдет отражение в следующих выпусках рассылки. Самое интересное, наверное, это искусственный интеллект в стратегических играх (типа Дюны), а также рассказы о виртуальной реальности (рассмотрим структуру wad файлов и побегаем по лабиринтам). И, конечно, еще много всего интересного. К тому же Вы сами тоже предлагайте темы для следующих выпусков. Что бы Вам было интересно. На сайт сходите, покритикуйте дизайн. :) Кстати, по идее он должен теперь часто обновляться, так что есть, к чему стремиться. :) А вообще, пишите письма, скоро увидимся. Удачи Вам.



SlyMagic.

"Как самому создать компьютерную игру" (с) 2001
Использование любых материалов рассылки возможно только с разрешения автора.
Тираж 5430 экземпляров.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное