2010-01-23 95 views
1

我试图设计一个简单的角色扮演游戏,其中包括战士,巫师,牧师,小偷等典型角色类型。我需要建议一个好方法来设置类层次结构。设计角色扮演游戏中的典型角色的阶级层次

我最初的尝试是创建一个类型为“角色”的类,并从“角色”制作战士,巫师,牧师,派生类型。

但后来我认为创建一个“Character”类然后使用装饰器模式可能会更好。所以说一个战士装饰者,向导装饰者等。

或者有没有不同的方式,会更好?

回答

1

我会使用策略和装饰模式的组合。你最初的建议就像是一种战略模式方法。

尝试区分字符类型和字符特征。角色类型可以是战士,巫师,牧师等......并将其设计为一种战略模式,从而形成一些层级树。

性格特点会是这样的火元素,水元素,黑色的力量,要素...

例如一个战士角色可能会选择火与水之间的元素作为他的本土起源,就像海盗(aarrrr!)或铁匠一样。如果您按层次设计,则注定会失败,因为这会让您的层次树大小爆炸。

这样的角色特征应该用装饰模式来实现,因为它是与角色概念正交的概念。所以你基本上会创建一个战斗机角色并包装一个水元素装饰者来获得一个海盗(aarrrr!)。或者创建一个向导角色并在他周围包裹一个黑暗的魔法装饰者以获得一个黑暗法师。或者:制作一个向导角色,并在他周围包裹一个水元素和一个黑魔法装饰师,以获得沼泽地精灵。

一些食品的想法:

  • 如果你决定将所有字符 有点石成金的能力,然后再设计 魔法般的性格特征。

  • 如有必要:组织 装饰者在某种 层次结构。你可能会有一个“元素”(水,火, 地球,风)装饰器层次结构和 “魔法类型”(黑色,白色)装饰器 层次结构。

玩得开心!

+0

这个评论最好的回答我的实际问题。但感谢@Jason D的伟大建议 – mikedev 2010-01-31 09:24:39

0

我会随着你的初始尝试,创建一个Character类,然后通过继承扩展功能。尽管所有角色都会执行相同的操作(使用物品,攻击和使用技能),但结果会有所不同(方法重载,即)。我认为使用这个模型会更清晰,我不确定装饰器。

0

这是一个可以在理论和实践层面上回答的问题。理论见http://en.wikipedia.org/wiki/Liskov_substitution_principle

但我认为你有兴趣练习。在这种情况下,问问自己:“巫师是一个角色”,即你可以用一个具有通用角色的巫师来做所有事情吗?如果是这样,那么继续并继承。这将使您可以使用更多抽象的代码与字符类型,而不是特定的实例。当你想以各种方式组成一个可能的扩展子集时,例如,如果你的角色可以同时是牧师,巫师,牧师和其他人,那么装饰器就更有用了。

7

我认为你可能会在这匹马前面放马。

您的第一个业务订单不应该确定“我如何表示角色?”它应该确定“我想代表什么?”这就是说:一个工具来帮助创建d20角色,Shadowrun,Mongoose Traveler,GURPS角色创作,WH:黑暗邪术角色创作; “我自己酷酷的基于d20的RPG视频游戏”,一款角色和冒险/聚会管理套件软件供您出售,等等。 以实现中性术语定义这一点。

在您成功确定要制作的内容后,请创建您要制作的详细定义。这样做的一种方式是列出所有主要名词和动词(人物,向导,战士,创建,保存,删除,复制等),并开始理解您需要表达的各种概念之间的关系。然后把每个主要名词分解成它的组成部分。 (字符:可以是一个类可以是一个或多个类,有一些设备,有一个实力有生命点,有魔法点,有一些主要和次要属性。)继续这个分解,不能使用实现中立术语(如整数等)。

然后回头看看你的定义和分解,并确定是否有任何明显的矛盾陈述,如果是的话,摆脱矛盾。如果不是,则按照所描述的层次结构来组织数据。在我的例子中,将Character,Class,Equipment和Primary Attribute作为类是合适的。

一定要保持所有这些“事实”的组织和使他们的关系清晰,无论是在书面和图表。从那里你应该能够开始考虑实现细节,比如向导从角色派生出来的类层次结构等等。

你可能还想看看其他人如何实现东西看this other SO question链接到实现d20的视频游戏引擎。 (即Baldurs Gate)

+0

+2如果我可以:) – Diadistis 2010-01-23 13:44:00

+0

感谢Diadistis。我现在正在制作我自己的纸笔RPG,所以我不得不考虑OP的问题等等。为了解决这个问题,我也在编写软件。:-)我发现这个特定概念变得复杂的速度令人惊讶。保持简单对我来说是一个持续的挑战。 – 2010-01-23 14:06:16

0

这取决于你想要RPG角色引擎的灵活性。如果你继承你的角色类,那么你将角色多样化限制在编译时。如果您使用设计模式(如装饰器或行为模式),则还可以通过组合装饰器或行为对象在运行时创建字符类。 (虽然你不会使用“向导”装饰器,而是使用“魔法”装饰器来创建向导,精灵等装饰器被重复使用,这是他们的力量。)

这真的取决于什么你想学习,基础类设计(字符按子类)或现代面向对象设计(字符按构图)。如果你是一个绝对的初学者,可以用第一种方法去了解原理。如果你已经知道这些原则,你应该自己写一本关于design patterns的好书,并将它们应用到你的游戏中。

相关问题