Кто-нибудь знает, где я могу найти примеры диаграмм классов для разработки RP-игр? Что-то похожее на здесь было бы весьма полезно. Я не ищу вещи, которые я могу рабски копировать, но только для разных примеров, которые отображают различные решения проблем, которые я обнаруживаю, когда пытаюсь карандашом вниз по своим классам.
Примеры диаграмм классов для RPG (игра с ролевой игрой)
Ответ 1
Я знаю Эммануэля Делалого от GameDev.net, но я не уверен, что я решил использовать иерархию, которую он получил там! Слишком много наследования, недостаточно гибкости.
Если бы я писал текстовую RPG (как я делал в прошлом), это выглядело бы примерно так (хотя я не успел составить схему для нее, к сожалению):
- Существа, комнаты и предметы, полученные из WorldEntity, с WorldEntity объекты, расположенные в композитном структуры, поэтому элементы могут жить внутри другие предметы, переносимые существами, которые существуют в комнатах. Внедрение шаблон посетителя для WorldEntities может работать хорошо.
- Типы CreatureType и ItemType которые содержат данные "класса" для индивидуальное Существо и Предмет примеры, которые ссылаются на их соответствующий объект типа. (например, базовый hitpoints и stats в первом, текущие хитпоинты и переходные эффекты в последнем). Я мог бы реализовать их как прототипы списков свойств, которые копируются в Существо или предметы, когда они созданы. Вы можете реализовать свойство наследования через "родительское" свойство, так что конкретный экземпляр существительного гоблина может относиться к "Воин-гоблин" CreatureType, который содержит родительская ссылка на "Generic goblin" CreatureType. И так далее.
- Выходы, принадлежащие их Комнате, и в одном направлении, и которые подробно определяют направление путешествия, различные условия проезда и т.д.
- Области, в которых есть группы комнат, соединенных некоторой логической организацией.
- Класс Spawn, чтобы диктовать, где существо и экземпляры элементов (например, какая комната, или в каких координатах), когда они созданы и с какой частотой и с которые CreatureTypes и ItemTypes. Ты можешь иметь некоторая логика здесь немного рандомизировала вещи.
- Заклинания, навыки, способности и т.д. все производные от базового класса Action или интерфейс, определяющий предварительные условия (например, текущая позиция, точки маны, некоторые степень обучения навыку и т.д.). Нормальный команды и действия могут идти здесь, так как они часто имеют какие-то требования (например, команда "сна" требует, чтобы вы не уже спит.)
- Класс FutureEvent, который по существу является обратный вызов, который вы нажимаете на очередь приоритетов для исполнения в будущем. Вы можете использовать их для расписание боевых раундов, время охлаждения заклинаний, ночные/дневные циклы, независимо от того, что вам нравится.
- Хеш/карта/словарь пар name- > value для игрок и статистика предметов. Небезопасно, но вы по достоинству оцените гибкость позже. В моем опытные статистические переменные-члены работоспособны, но негибкие, и специализируясь Классы атрибутов становятся запутанными кошмар при отладке.
- Тип модификатора, который содержит имя stat и значение модификатора (например, +10, + 15%). Эти добавляться к вашим существам, поскольку они используются (например, через эффект заклинания или путем владения зачарованное оружие) и получить позже с помощью запланированного FutureEvent или какого-либо другого события, такого как как выполняемая команда.
- Игровые классы, такие как PlayerClass или PlayerRace, каждый из которых описывает класс игрока (например, воин, волшебник, вор) или раса (человек, эльф, карлик) и установить стартовые значения и лимиты старта, списки доступности навыков, специальные полномочия и т.д.
- Основные классы интерфейса проигрывателя, которые будут меняться в зависимости от вашего фактического типа игры. Ты мог бы иметь классы рендеринга для графической игры или в MUD у вас может быть класс Connection отражающий TCP-соединение с клиентом игрока. Постарайтесь оставить всю логику игры из них.
- Интерфейс сценариев. Большинство ваших команд, заклинаний, и AI существа могут быть реализованы быстрее с помощью достойный скриптовый интерфейс, и он сохраняет время компиляции вниз тоже. Это также позволяет использовать некоторые отличные внутриигровые отладки и диагностические возможности.
Это будет базовая структура высокого уровня, которую я бы использовал.
Ответ 2
Возможно, вы захотите рассмотреть систему компонентов компонента, а не традиционную иерархию наследования; они, как правило, более гибки для определенных типов изменений, делают инструмент (например, мировой редактор) намного проще и предоставляют возможности для распараллеливания, которые в противном случае не могли бы быть очевидными или легкими.
Многие современные игровые движки отходят от "объекта монолитного класса" (или класса Entity, независимо от того, что) и к подходу "мешок компонентов".
Существует множество книг и статей. Как правило:
- Серия Game Programming Gems (по-видимому, и тома 5, и 6 содержат статьи-составляющие, и я думаю, что 2, возможно, и один)
- Конференция разработчиков игр часто ссылается на презентации предыдущих лет и является золотым рудником для такого рода вещей - вы можете даже обычно покупают компакт-диски/DVD-диски для бывших лет дешево (особенно если вы посещаете)
- Архив статей о функциях Gamasutra и Журнал разработчиков игр backissues
В частности (некоторые примечательные, "компонент" Google и "сущность" в разных комбинациях для большего):
- Развивайте свою иерархию, Mick West
- Entity Systems - будущее разработки MMOG; также часть 2 и часть 3
- Введение в архитектуру осады подземелья на вики-странице Gas Powered Games wiki
- Система игровых объектов, управляемая данными, Скотт Билас (GDC 2002)
- Nocturnal Initiative, открытый доступ к библиотекам и инструментам из Insomniac Games (у них есть одна из самых больших инструментов в промышленности, из того, что я видел)
Каждая из этих статей ссылается на несколько других.
Попробуйте помощь kool, вам это может понравиться. =)
Ответ 3
<tongue_in_cheek_mode_because_it_is_friday>
Просто для начала:
---------------- --------------
| Creature | | Item |
|--------------| |------------|
| Name | | Name |
| Hp | | Value |
| Abilities |--------------------| Weight |
|--------------| --------------
| Attack |
----------------
^
|
----------------------
| |
---------------- ----------------
| Hero | | Monster |
|--------------| |--------------|
| Level | | |
|--------------| |--------------|
| KillMonster | | AttackAndDie |
| GrabTreasure | | DropTreasure |
---------------- ----------------
</tongue_in_cheek_mode_because_it_is_friday>
Ответ 4
Как насчет чего-то подобного:
alt text http://img217.imageshack.us/img217/4886/classwo0.png
Вот несколько других диаграмм:
- http://www.russelldare.net/media/2dgame/uml.jpg
- http://dirkkok.files.wordpress.com/2007/12/domainmodel1.jpg?w=505&h=573
- http://members.gamedev.net/emmanuel_deloget/images/text_rpg_rule_system.png
- http://theworldofdan.co.uk/wp-content/uploads/2009/05/classdiagram1.jpg
- http://www.c-sharpcorner.com/UploadFile/mgold/SpaceInvaders06292005005618AM/Images/SpaceInvadersUML.jpg
- http://blog.xlandersoftware.com/wp-content/uploads/2008/08/tankrushuml.png
Ответ 5
A очень отличный подход от Steve Yegge.
Ответ 6
Посмотрите JADE Javadoc для хорошего обзора сложной игры:)
Ответ 7
Будьте смелыми, ваша игра не должна быть клоном взлома и взлома. Ваши актеры должны иметь возможность переключать стороны, принимать свою собственную инициативу привлекать других актеров и т.д. В противном случае, в чем смысл?
+-----------------------------+
V |
[Actor] ------- [Allegiance] ----+
- risk comfort - weight
- temerity