« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
    Популярное
Защита web-сервисов от спама

Использование Ajax с PHP и Sajax

PHPShell - скрипт php, позволяющий выполнять на веб-сервере shell-команды

Описание функций C (Си) / C++ - modf

Можно создать многострочную кнопку!

Как получить информацию о системе

Работа с множествами в Transact-SQL

Функция AccessResource

Подсказки по работе в системе Google Adsense

Функция SetClipboardData


    Архив файлов



    Сообщества



    Документация

Статьи:: Delphi :: Игры. Построение игр. :: ИИ с чего начать ?


отправить ссылку другу версия для печати  Обсудить на форуме

ИИ с чего начать ?



Игровой искусственный интеллект (ИИ) - определенно одна из наиболее интересных областей искусственного интеллекта. Его написание доставляет слишком много трудностей многим людям, так что эта статья поможет рассмотреть на некоторые пути, для преодоления этих трудностей.
В статье мы рассмотрим несколько подходов: непрограммируемый, программируемый, использующий существующие игры, и программируемый нуля.

Непрограммируемый: на примере игры MindRover

MindRover - игра, произведенная крмпанией CogniToy, в которой игрок выбирает вездеход, добавляет компоненты и соединяет их с помощью проводов, для выполнения некоторой задачи: чего-нибудь взорвать, выиграть гонку, управлять схемой или все сразу!
MindRover это превосходная платформа для экспериментов с игровым искусственным интеллектом, потому что она не требует умения программирования. Все «программирование» сделано через графический интерфейс (на рисунке). Выбираем транспорт, добавляем радар, управляющие компоненты и оружие. После, соединяем компоненты так, чтобы при обнаружении чего-либо радаром, транспорт стрелял по цели и двигался к ней. Итак запускаем сценарий и находим, что вездеход в порядке, но если противник выстреливает медленно летящую ракету, радар обнаруживает ее и поворачивается к ней. Это не совсем то, что нам надо, поэтому возвращаемся назад и добавляем IFF (опознаватель "свой-чужой") фильтр на радаре, и отфильтровываем все, что не является врагом. Запустим сценарий, теперь вездеход работает намного лучше.
В MindRover роботы могут быть гораздо более сложными чем этот и содержать много компонентов (до 30). Они могут быть связаны через логические выходы, радиопередачи (один элемент включает несколько), переключатели (разрешают и запрещают события), и тд.
MindRover основан и является графической оболочкой для языка программирования ICE. Ниже - кусок кода, который сгенерирован схемой вездехода, показанного в вышеупомянутом скриншоте.

class DkrPursuit extends Vehicle
sys as VehicleSystemObject

Filter_IFF1 as Filter_IFF
MediumEngine1 as MediumEngine
Steering1 as Steering
BumpSensor1 as BumpSensor
Filter_IFF2 as Filter_IFF
LongRangeRadar1 as LongRangeRadar
MediumRadar1 as MediumRadar
MediumRadar2 as MediumRadar
MediumRadar3 as MediumRadar
MediumRadar4 as MediumRadar
Broadcast1 as Broadcast
TurnLeft as Broadcast
Timer1 as Timer

' class functions are here...

end class 'DkrPursuit

В этой статье мы не будем касаться программирования на ICE, его возможности гораздо шире чем в графическом интерфейсе и описывать их очень долго.
В настоящее время есть группа программистов на ICE, которые расширяют набор компонентов в игре, типа более продвинутых логических выходов, компоненты, которые эмулируют память СППЗУ и более другие вещи. Так что, если вы еще не знаете высокоуровневый язык программирования, обратите внимание на MindRover. По мере того, как вы будете входить в суть, сможете программировать дополнительные компоненты и более интеллектуальные вездеходы.

Создание модов. Программируемый

С появлением игр типа Quake II, разработчики обратились к созданию легко расширяемых игр. Весь код Quake II был в DLL, которые грузились во время загрузки игры. ID Software (разработчики Quake) выложили исходники, позволив любому изменить оружие, аспекты процесса игры, физику и, что наиболее важно (для нас), искусственный интеллект.

Изменять ИИ для игр такого типа относительно легко, начиная с изменения значения параметров, изменения функциональных возможностей ИИ и заканчивая внедрением новых особенностей ИИ.

На скриншоте один из результатов моего Quake II mod, который улучшен в плане искусственного интеллекта, весьма значительно. На нем вы видите солдата, подпрыгнувшего над выстрелом, нацеленного ему в ноги, и стреляющего при этом. Этот мод имеет следующие параметры:
• Уворачивание. Враг уворачивается, только когда необходимо.
• Некоторые враги подпрыгивают, когда выстрелы направлены им в ноги.
• Монстры могут плавать. По умолчанию монстры в Q2 не плавают,
• монстры не будет стрелять, когда один из них – мешает обстрелу.
• Экспериментировал со взрывчаткой.
• Экспериментировал с алгоритмами поиска пути.

Уворачивание просто требовало подбора числа. В конечном счете я научился вычислять время, требуемое для уворачивания от выстрела. Что означает, что стало очень трудно уничтожить кого-нибудь из бластера.
Функция прыжка появилась несколько позже, когда я стал более свободно разбираться в исходных текстах, так как нужно было изменить игровые структуры. Я использовал мультипликацию от уворачивания, но запустил врагов в воздух, чтобы прыжок был более реалистичным! Так как враги стали после этого увертываться, прыгать и отступать после атаки игрока, первый уровень стал очень труднопроходимым, без дополнительного оружия.
Плавание также требовало много модификаций, так как большинство монстров не умеют плавать. Так, я нашел, что монстры после попадания в воду не двигались, пока они не поражали пол. В общем я добавил специальный флажок, что разрешило им плавать и ходить по земле!
Изменяя ИИ вы можете получить абсолютно непохожую на оригинал игру. Другие игры типа Unreal, HalfLife и Quake III также позволяют изменять код. Так что, если у вас есть, какая-нибудь из этих игр и вы знаете C/C++ - модифицируйте их на здоровье! (ну а мы как-нибудь на Delphi перебьемся ;) )

С нуля...

Настольные игры - превосходный выбор для написания ИИ, так как они имеют очень простую графику (которая может многократно использоваться в других играх) и правила - необходимую часть ИИ. Вот некоторые из настольных игр, с указанием уровня сложности реализации ИИ:
• Pente (средний)
• Крестики-Нолики (легкий)
• Othello (легче среднего)
• Шашки (средний)
• Шахматы (тяжелый)
• Connect 4 (легкий)
• Go (тяжелый)
• 3D Крестики-Нолики (легче среднего)

Написание настольных игр - наилучший путь к изучению принципов искусственного интеллекта, так как довольно сильные противники могут быть созданы, через использование простой эвристики (см. Простой ИИ Настольной игры) без использования сложных методов. Можно расширить ИИ игры "игровыми деревьями" и "минимаксным" алгоритмом. Выгодное отличие в создании игры с нуля это, то что вы сами решаете насколько простым или сложным будет алгоритм, и вы можете постоянно менять его. Конечно, написание любой игры может утомить, поэтому не ставьте перед собой заоблачные планы. Будет гораздо интереснее добавлять и расширять возможности работающей игры, чем ковыряние в супер алгоритме незаконченной пре-альфы.







XML документация в C#.

XML в .NET

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


Подробнее... | Рубрика: XML в .NET | Добавлено: 08.10.2008

Курсоры в MySQL 5.

MySQL

Начиная с 5-ой версии, MySQL имеет возможность создавать курсоры. Курсор — это виртуальная таблица, предоставляющая альтернативный способ просмотра табличных данных. Курсор не содержит данных, а лишь ссылается на них из других таблиц. Из этого вытекает ряд особенностей, но об этом ниже.


Подробнее... | Рубрика: MySQL | Добавлено: 08.10.2008

Microsoft опубликовала подробности о сессиях Windows 7.

Мероприятия

В преддверии конференции WinHEC компания Microsoft опубликовала подробный список сессий, которые пройдут в рамках конференции. Довольно-таки большое количество выступлений будет посвящено Windows 7, что не может не радовать. Принимая во внимание тот факт, что PDC и WinHEC разделяют несколько дней, а пройдут они в одном здании - Los Angeles Convention Center, - можно несколько дней поиграть в прятки, спрятавшись в какой-нибудь комнате, но зато бесплатно посетить WinHEC.


Подробнее... | Рубрика: Мероприятия | Добавлено: 08.10.2008

Остальные статьи:

Microsoft делится подробностями о том, что будет после Windows
Тестируем новый javascript от нового браузера Google
MySQL Query Cache
Использование провайдеров компиляции в Asp.net
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новый вебсайт для программистов - StackOve...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейса
Генераторы отчетов FastReport 4 и QuickReport 5: версии 2008 года
День программиста — набор стерeотипов
Индусские програмисты
Вышел Django 1.0
Портативная версия Google Chrome Portable
Исходные коды .Net Frameword 3.5 SP1 для отладки в Visual Studio
Пишем правильный online WYSIWYG-редактор


Цитата дня (все,добавить):

Портал фрилансеров

    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 145
Пользователей: 0