RPG(角色扮演游戏)的类图示例

时间:2009-07-31 11:58:37

标签: class project-planning class-diagram

有谁知道我在哪里可以找到RP游戏开发的类图示例?与here类似的东西会非常有用。我不是在寻找我可以盲目复制的东西,而只是针对不同的例子,这些例子可以解决我在尝试自己的课程时发现的问题的各种解决方案。

7 个答案:

答案 0 :(得分:49)

我知道来自GameDev.net的Emmanuel Deloget,但我不确定我会选择使用他所拥有的等级!遗产太多,灵活性不够。

如果我正在编写一个基于文本的RPG(就像我过去所做的那样),它看起来有点像这样(虽然我没时间为它绘制图表,遗憾的是):

  • 派生的生物,房间和物品 来自WorldEntity,WorldEntity 以复合材料排列的对象 结构,所以物品可以存在 其他物品,由生物携带, 谁存在于房间内。实施 WorldEntities的访客模式 可能会运作良好。
  • CreatureType和ItemType类 其中包含“类”数据 个人生物和物品 实例,它们可以引用它们 相应的'类型'对象。 (例如,基地 前者的生命值和统计数据, 当前的生命点和瞬态效应 在后者)。我可以实现这些 得到的属性的原型列表 复制到Creature或Item实例时 他们被创造了。你可以实现财产 通过'父'属性继承,以便 一个特定的妖精Creature实例可能与 'warrior goblin'CreatureType,包含一个 对'generic goblin'CreatureType的父引用。等等。
  • 退出由他们的房间拥有,并且是 一种方式,其中详细说明了方向 旅行,各种通行条件等。
  • 区域,包含连接的房间组 一些合乎逻辑的组织。
  • 一个Spawn类来决定生物的位置 和项目实例被创建(例如,哪个房间, 或者在什么坐标处),当它们被创建时 以什么频率,来自 哪个CreatureTypes和ItemTypes。你可能有 这里有一些逻辑可以随意化一些东西。
  • 法术,技能,能力等 所有派生自基础Action类 或指定先决条件的接口 (例如,当前位置,法术力点数,某些 学习技能的程度等)。正常 命令和行动也可以从这里开始 通常也有一些要求 (例如,'睡眠'命令要求你不是 已经睡了。)
  • 一个FutureEvent类,本质上是一个 您推送到优先级队列的回调 在将来执行。你可以使用这些 计划战斗轮次,拼写冷静时间, 无论你喜欢什么,都可以进行夜/日循环。
  • 名称 - >值对的散列/地图/字典 球员和项目统计。不是类型安全的 你以后会欣赏它的灵活性。在我的 制作统计成员变量的经验是 可行但不灵活,并有专业 '属性'类变得复杂 调试时的噩梦。
  • 包含统计名称的修饰符类型 和修饰值(例如+10,+ 15%)。这些 在使用它们时添加到你的生物中 (例如,通过法术效果,或通过挥舞 一个魔法武器)并在以后被剥夺 由一个定时的FutureEvent或其他一些事件 作为正在执行的命令。
  • 游戏特定的类,如PlayerClass或 PlayerRace,每个都描述一个玩家的类 (例如,战士,巫师,小偷)或种族(人类,精灵, 矮人)并设置起始值和限制, 技能可用性列表,特殊权力等。
  • 基本的播放器界面类,会有所不同 取决于您的实际游戏类型。你可能会 有一个图形游戏的渲染类,或 在MUD中你可能有一个Connection类 反映与玩家客户端的TCP连接。 尝试将所有游戏逻辑排除在外。
  • 脚本界面。大多数命令,法术, 和生物AI可以更快地实现 一个体面的脚本界面,它保持编译时间 也是。它还允许一些伟大的游戏内调试 和诊断能力。

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

答案 1 :(得分:11)

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

许多现代游戏引擎正在逐渐远离“单片类对象”(或类实体,无论如何),转向“组件包”方法。

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

具体来说(一些值得注意的,谷歌“组件”和“实体”的各种组合更多):

这些文章中的每一篇都与其他文章相关联。

尝试kool-aid,你可能会喜欢它。 =)

答案 2 :(得分: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>

答案 3 :(得分:4)

答案 4 :(得分:4)

Steve Yegge的very different approach

答案 5 :(得分:3)

查看JADE's Javadoc,了解复杂游戏的概况:)

答案 6 :(得分:1)

大胆,你的游戏不应该是黑客的克隆和削减废话。 你的演员应该能够切换双方,主动出击 招募其他演员等。否则,重点是什么?

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