Помощь - Поиск - Пользователи - Календарь
Полная версия: Иерархия объектов
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Bokul
Хочим работать... Давайте!

Иерархия - это скелет. От нее будет зависит быстрота и надежность дальнейшей разработки, по этому решил подключить всю команду. Сам пытался объединить свои идеи в логическую цепочку, но как видите... т.е. не видите результаты 10.gif smile.gif Пришел к выводу что диздок нуждается в доработке по мере развитии иерархии - в более детальном описании (Archon уже работает). Т.е. надо работать над тем и другим параллельно.

И-так, поехали!

Пока моя картинка всего происходящего в логике игры таковая:

Есть игровой мир, где протекает жизнь наших юнитов (дома тоже относятся к этой категории, надо подумать над оружием). У каждого з них есть свой интеллект - способ реагировать на событие, собирать информацию (сенсорные органы СО). Его мы обзовем Ai юнита. Он позволяет игроку и глобальному Ai (для игрового мира нету разницы между ними) не следить за каждым шагом их подопечных, а задавать более общие задания: патрулировать или охранять территорию или, даже просто, стоять, ведь при этом задействованы их органы чувств, постоянно собирающие и анализирующие информацию. Все эти разведданные направляются в очередь сообщений (структуры хранения данных на этом этапе не обсуждаем). В этих данных может храниться вся информация о юните, а также все что он воспринимает своими СО. Таким способ мы реализовываем односторонние средство общения между игровым миром и Ai с игроком, создавая вспомогательный транзитный уровень. Т.е. моя цель - поделить всю игру на логические уровни, что позволить каждому заниматься тем, что умеет, а в случае смены инструментов, локализовать изменения.
6 уровней
1 игровой мир ИМ: все что "живет", Ai юнитов
2 централизации информации о ИМ: различные структуры данных, с него снимают информацию уровень вывода и ИИ
3 ИИ
4 уровень вывода: монитор
5 уровень ввода: мышка, клава
6 уровень управления ()или уровень команд), чем-то похож на 2-ой, так как служит промежуточным между ИМ с ИИ и уровнем ввода

Ну, пока вот... wacko.gif Честно говоря не хочется перечитывать написанное - не легкое это задание сформулировать словами ту белиберду, что твориться в голове.. Но пока основная идея состоит в этих уровнях и их взаимодействии между собой, что скажите по этому поводу?

PS для тех, кто не в курсе - сайт Обреченных http://doomed-game.narod.ru/
Archon
Вот, как я это вижу (описал более подробно, чтобы понятней было):
1 World. Тут все как у тебя. Еще: Этот уровень отправляет сообщения в Environment, сообщая таким образом о своем изменении).
2 Environment - посредник между World и Game. Содержит очереди сообщений, а также все необходимые функции для их отправки и получения. Выполняет команды, полученые от игрока и АИ (то есть меняет World).
3 Game - обобщает AI и Human. Проходит циклом по всем игрокам (их же несколько) и обеспечивает взаимодействие между каждым игроком и AI/Human (в зависимости кто играет).
3 AI - запрашивает через Game информацию о мире, принимает решения, и отправляет комманды в Environment (тоже через Game).
4 Human - запрашивает через Game информацию о мире, выводит все что надо на экран и на колонки (используя граф-движок), считывает данные с клавы и мышки и отправляет комманды в Environment через Game.

Добавлено через 1 мин.
Кстати, может Environment и Game объединить?
Archon
После обсуждения с Hardcase`ом система притерпела изменения. Во первых рекомендую прочитать статью об уровнях исскуственного интеллекта: http://pmg.org.ru/ai/ai_rt.htm.

Уровни World и Environment слились. Общие очереди команд были признаны ненужными. Теперь у каждого юнита есть своя очередь приказов. В последствии специальный обработчик (он включен в объект юнита), последовательно считывает эти приказы и вызывает соответствующие методы.

1 World. Включает в себя все внутриигровые объекты, карту, объекты на ней, юнитов, здания...
2 Game. Главный элемент. Отвечает за внутриигровую логику. В целом, все как в предыдущем посте.
3 Human/AI - можно, их, конечно, разделить... но с точки зрения Game, Human и AI идентичны. Human получает информацию из World, затем выводит ее на экран с помощью уровня Graphics. Также он реагирует на нажатия клавиш/движения мыши и дозаписывает юнитам/зданиям команды в их очереди приказов. AI действует аналогично, только информацию он не на экран выводит, а использует ее, чтобы выработать стратегию действия и отдать юнитам нужные приказы.
4 Graphics. Графический движок.

Народ, включайтесь. Без обсуждения мы ничего не родим smile.gif.
WishMaster
Давным-давно, в самом начале, я давал ссылки на книги по созданию игр(правда на С++), там прекрассно написано, что куда и как...
Archon
Цитата
Давным-давно, в самом начале, я давал ссылки на книги по созданию игр(правда на С++), там прекрассно написано, что куда и как...

Некоторые из них я читал. Не густо в них... В других я думаю не лучше. Если есть конкретная книга, где все пучком, давай smile.gif.

Привожу несколько файлов:
1 Диаграмма, объясняющая общее устройство игры by Hardcase
2 Более подробная схема, ближе к реализации и с коментариями by me

Еще есть идея научить юнитов кооперироваться без участия глобального AI. Высказываемся, стоит ли, и если стоит, то как?

Вопросы тоже сюда, я отвечу.
volvo
Цитата
Еще есть идея научить юнитов кооперироваться без участия глобального AI
Это должно привести к 3-м уровням AI в программе? То есть, юнит сам перемещается по местности/выполняет примитивные команды (уровень №1), группа юнитов совместно производит некоторые действия (уровень №2 - тактический), и командование определяет, какие действия должна производить та или иная группа юнитов (уровень №3 - стратегический) ?
Archon
Цитата
Это должно привести к 3-м уровням AI в программе? То есть, юнит сам перемещается по местности/выполняет примитивные команды (уровень №1), группа юнитов совместно производит некоторые действия (уровень №2 - тактический), и командование определяет, какие действия должна производить та или иная группа юнитов (уровень №3 - стратегический) ?
Именно так. Хотя... Я потому и вынес это на обсуждение, потому что плохо представляю как этот групповой AI должен быть устроен и нужен ли он вообще.

Я вижу AI несколько иначе (однако, любые улучшения поддерживаю):
В каждый момент времени юнит выполняет только то, что прописано в его приказе. Юнит не может сам менять себе приказ, но сами приказы написаны так, что в их пределах юнит действует достаточно свободно. То есть приказ - это своего рода модель поведения. Например у юнита есть приказ - "стой на месте, если видишь врага - атакуй, после битвы вернись на место" (все эти уточнения задаются параметрами приказа). Вот так юнит и будет себя вести, пока не получит другой приказ. Таким образом, никакого группового AI в самом юните реализовывать я еще не думал. Хотя можно сделать групповой AI, как подуровень глобального. Ну что, есть мысли?
volvo
Цитата
Таким образом, никакого группового AI в самом юните реализовывать я еще не думал
Группового AI в самом юните и не надо... Я бы попробовал сделать вот что: если AI №3 (стратег) посылает группу юнитов на выполнение задания (какого - сейчас неважно, это потом), то все эти юниты объединяются в некий виртуальный блок, который имеет AI ... То есть, если 4 юнита будут действовать так:
Цитата
Например у юнита есть приказ - "стой на месте, если видишь врага - атакуй, после битвы вернись на место" (все эти уточнения задаются параметрами приказа). Вот так юнит и будет себя вести, пока не получит другой приказ.
, то в случае если враг подкрался на границу видимости одного из них (но НЕ находится в зоне видимости остальных), и начал его методично расстреливать, то остальные юниты будут стоять как и стояли без движения, потому что приказа отвечать на атаку "своего" у них не было... В итоге, что имеем? Первый юнит расстрелян, враг подходит на границу видимости второго, и делает то же самое... По одному уничтожаются все...

(заметь, я не говорю вообще о случае, когда оружие врага имеет дальность, превышающую максимальное расстояние, на котором юнит может "увидеть" соперника; тогда твой юнит, а тем более его "друзья" даже не осознает, что на него совершено нападение, и откуда именно. Чтобы он узнал, надо сильно усложнить приказ, внести в него гораздо больше условий)...

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

Так что, промежуточный уровень желателен, хоть это и будет чуть сложнее реализовать...
Archon
Мысль понял, полностью согласен. Но, имхо, это относится к реализации модуля искусственного интеллекта в целом, а уж как он там подразделяется на тактический и стратегический уровни - это вопрос программирования AI, а программирование AI еще не началось. Схему эта идея, похоже, не затрагивает. Сейчас важнее вопрос, что стоит менять в схеме. Если ничего, то пора ее уже наконец углубить, реализовать в коде и получить скелет будущей проги.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.