Примеры диаграмм классов для RPG (Role Playing Game) - PullRequest
27 голосов
/ 31 июля 2009

Кто-нибудь знает, где можно найти примеры диаграмм классов для разработки RP игр? Нечто похожее на здесь было бы весьма полезно. Я не ищу вещи, которые я могу рабски скопировать, но просто для разных примеров, которые намечают различные решения проблем, которые я обнаруживаю, когда пытаюсь записать свои собственные классы.

Ответы [ 7 ]

49 голосов
/ 04 августа 2009

Я знаю Эммануэля Делогета из GameDev.net, но я не уверен, что выбрал бы его иерархию! Слишком много наследства, недостаточно гибкости.

Если бы я писал текстовую RPG (как я делал в прошлом), она бы выглядела примерно так (хотя, к сожалению, у меня нет времени на ее составление):

  • Полученные Существа, Комнаты и Предметы от WorldEntity, с WorldEntity объекты расположены в Композитный структура, так что предметы могут жить в другие предметы, которые несут существа, которые существуют в комнатах. Внедрение шаблон посетителя для WorldEntities может хорошо работать.
  • Классы CreatureType и ItemType которые содержат данные «класса» для Индивидуальное Существо и Предмет случаи, которые ссылаются на их соответствующий объект типа. (например, база точки попадания и статистика в первом, текущие хитпоинты и переходные эффекты в последнем). Я мог бы реализовать это как прототипные списки свойств, которые получают копируются в экземпляры Существо или Предмет, когда они созданы. Вы можете реализовать свойство наследование через «родительское» свойство, так что конкретный экземпляр существа гоблина может относиться к «Воин Гоблин» CreatureType, который содержит родительская ссылка на «универсальный гоблин» CreatureType. И так далее.
  • Выходы, принадлежащие их комнате, и один путь, и какие детали направления проезд, различные условия прохождения и т. д.
  • Области, которые содержат группы связанных комнат какой-то логической организацией.
  • Класс Spawn, чтобы определять, где Существо и экземпляры Item созданы (например, какая комната, или по каким координатам), когда они создаются и с какой частотой и с какие CreatureTypes и ItemTypes. Ты можешь иметь здесь есть некоторая логика, чтобы немного рандомизировать вещи.
  • Заклинания, умения, способности и т. Д. все производные от базового класса Action или интерфейс, который определяет предпосылки (например, текущая позиция, очки маны, некоторые степень освоения навыка и т. д.). Нормальный команды и действия могут идти сюда, так как они часто тоже есть какие-то требования (например, команда «сон» требует, чтобы вы не уже спит.)
  • класс FutureEvent, который по сути обратный вызов, который вы нажимаете на приоритетную очередь выполнить в будущем. Вы можете использовать их для график боевых раундов, время успокоения заклинаний, ночные / дневные циклы, все что угодно.
  • Хэш / карта / словарь пар имя-> значение для статистика игроков и предметов. Не типобезопасно, но Вы оцените гибкость позже. В моем опыт создания статистики членских переменных работоспособный, но негибкий и имеющий специализацию классы "атрибута" становятся запутанными кошмар при отладке.
  • Тип модификатора, который содержит имя статистики и значение модификатора (например, +10, + 15%). Эти добавляться к вашим существам по мере их использования (например, через эффект заклинания, или с помощью зачарованное оружие) и снимают позже по времени FutureEvent или какого-либо другого события, такого как выполняемая команда.
  • Классы, специфичные для игры, такие как PlayerClass или PlayerRace, каждый из которых описывает класс игрока (например, воин, волшебник, вор) или раса (человек, эльф, карлик) и установить начальные значения статов и лимиты, списки наличия навыков, специальные способности и т. д.
  • Основные классы интерфейса проигрывателя, которые будут различаться в зависимости от вашего фактического типа игры. Ты можешь иметь классы рендеринга для графической игры, или в MUD у вас может быть класс Connection отражает TCP соединение с клиентом игрока. Старайтесь не допускать в этом всей игровой логики.
  • Скриптовый интерфейс. Большинство ваших команд, заклинаний, И ИИ существа могут быть реализованы быстрее с достойный интерфейс сценариев, и он сохраняет время компиляции вниз тоже. Это также позволяет выполнять отличную отладку в игре. и диагностические возможности.

Это была бы базовая структура высокого уровня, которую я бы использовал.

11 голосов
/ 06 августа 2009

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

Многие современные игровые движки отходят от «монолитного класса Object» (или класса Entity, что угодно) к подходу «мешка компонентов».

Вокруг множество книг и статей. В целом:

  • серия Game Programming Gems (по-видимому, и в томах 5, и в 6 есть статьи о компонентах, и я думаю, что 2, возможно, тоже имели одну)
  • на веб-сайте Game Developers Conference часто есть ссылки на презентации предыдущих лет, и это золотая жила для такого рода вещей - обычно вы даже можете купить компакт-диски / DVD-диски за предыдущие годы дешево (особенно если Вы посещаете)
  • Архивные статьи Гамасутры и журнал Game Developer backissues

В частности (некоторые примечательные, Google "компонент" и "сущность" в различных комбинациях для более):

Каждая из этих статей ссылается на еще несколько.

Попробуйте kool-aid, вам это может понравиться. =)

5 голосов
/ 31 июля 2009
<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 голосов
/ 06 августа 2009

A совсем другой подход от Стива Йегге.

3 голосов
/ 03 августа 2009

Посмотрите на JADE JAVADOC для хорошего обзора сложной игры:)

1 голос
/ 07 августа 2009

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

   +-----------------------------+
   V                             |
[Actor] ------- [Allegiance] ----+
 - risk comfort    - weight
 - temerity        
...