2009-07-31 78 views
26

有谁知道在哪里可以找到RP游戏开发的类图示例?类似于here的东西会非常有用。我不是在寻找我可以大肆复制的东西,而是针对不同的例子,这些例子对我在尝试和下课时自己发现的问题绘制了各种解决方案。角色扮演游戏的类图示例

+7

我爱你链接到一个。我发誓我们大多数程序员,特别是日常工作中的程序员,只能为编写像`bool isLivingDead()`这样的函数的爽快体验做RPG。 – Gavin 2009-08-05 15:48:57

+3

if(creature.isLivingDead()&& hero.isSlayer())hero.slay(creature); – 2009-08-06 13:05:03

回答

48

的一个很好的概述,我知道,从GameDev.net灵光Deloget但我不确定我会选择使用层次结构他到了那里!继承太多,灵活性不够。

如果我在写一个基于文本的RPG(正如我在过去所做的那样),它看起来有点像这样(虽然我没有时间来制定一个图呢,黯然):

  • 生物,房间和物品衍生 从WorldEntity,与WorldEntity排列成复合 结构 对象,所以项目可以在其他 项目,通过生物携带, 存在客房内谁住。实施 WorldEntities 的访问者模式可能运作良好。
  • CreatureType而itemtype类 包含用于 个体生物的“类”数据和Item 实例中,其是指回其 对应的“类型”的对象。 (例如前者中的基地 生命值和统计数据,后者中的当前生命值和 中的 )。我可以实现这些为 原型的属性列表,当 被创建时, 被复制到Creature或Item实例。您可以通过一个“父”财产执行财产 继承,以便 特定妖精怪物实例可能涉及 “妖精战士” CreatureType,其中包含了 家长参考“通用妖精” CreatureType。等等。
  • 其房间拥有的出口,单程为 ,其中详细说明了 的行驶方向,各种通行条件等。
  • 区域,其中包含由某个逻辑组织连接的 房间组。
  • 一个菌种类决定在其中创建生物 和项目实例(例如,哪个房间, 或在什么坐标),它们被创建时,并 什么频率,并从 其中CreatureTypes和ItemTypes。你可能在这里有一些逻辑来使事情随机化。
  • 咒语,技能,能力等 所有从基Action类 或接口来指定的先决条件 (例如当前位置,魔法点,一些 度的技术人员学习等)衍生的。普通 命令和动作可以在这里过,因为他们往往 都有某种要求太 (如“睡眠”命令要求,你是不是已经 睡觉。)
  • 一个FutureEvent类基本上是一个 回拨,您将推入未来执行的优先队列 。你可以使用这些来到 时间表的战斗回合,拼写冷静时间, 夜间/星期循环,无论你喜欢什么。
  • 玩家和物品统计信息的名称 - >值对的哈希/地图/字典。不是类型安全的,但是 稍后您会体会到灵活性。在我的 制作stats成员变量的经验是 可行但不灵活,并有专门的 '属性'类成为一个令人费解的 调试时的噩梦。
  • 包含统计名称 和修饰符值(例如+10,+ 15%)的修饰符类型。这些 被添加到您的动物,因为它们被用来 (通过法术效果,或挥舞 的怡人武器如)并获得由定时FutureEvent或某些其他事件后 剥离等 为被执行的命令。
  • 游戏特定的类,如PlayerClass或 PlayerRace,其每一个描述一个玩家的类 (例如战士,向导,小偷)或种族(人,小精灵, 侏儒),并设置开始统计值和限制, 技能可用性列表,特殊能力等。
  • 基本玩家界面类将根据您的实际游戏类型而变化 。你可能在有一个图形游戏的渲染类,或者在MUD中有 ,你可能有一个连接类 反映到玩家客户端的TCP连接。 尽量保持所有游戏逻辑不在这些。
  • 一个脚本界面。大多数命令,法术, 和生物AI可以通过 体面的脚本界面更快地实现,并且它也可以保持编译时间减少 。它还允许在游戏中进行一些很好的调试和诊断功能。

这将是我使用的基本高级结构。

5
<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> 
+0

它看起来非常熟悉我自己的设计,我不得不承认:) – Steerpike 2009-07-31 12:33:44

+1

大声笑,它完全取决于你想要实现的系统。它可以很简单,但像往常一样,RPG系统非常复杂。但是,再次,游戏还没有完成,直到你找到hackmaster + 12 ;-)。 – 2009-07-31 12:36:55

+2

我想我的主要问题是,我不知道到底是什么“帐篷”应该继承... – Steerpike 2009-07-31 12:41:07

4
11

您可能需要考虑组件实体系统而不是传统的继承层次结构;他们倾向于对某些类型的变化更加灵活,使工具(例如,世界编辑器)的开发更容易,并且提供并行化的机会,否则这些并不明显或容易。

很多现代游戏引擎正在远离“单片类对象”(或实体类,等等),并朝着“袋组件”的做法。

周围有很多书籍和文章。一般:

具体(某些noteworth ÿ的,谷歌 “组件” 和以各种组合 “实体” 以上):

这些文章中的每一个链接到一些更多。

尝试库尔急救,你可能会喜欢它。 =)

1

要勇敢,你的游戏不应该是黑客的克隆和斜线废话。 你的演员应该能够切换双方,自己主动 征募其他演员等。否则,什么是重点?

+-----------------------------+ 
    V        | 
[Actor] ------- [Allegiance] ----+ 
- risk comfort - weight 
- temerity   
相关问题