【问题标题】:Data driven design, referencing the data数据驱动设计,参考数据
【发布时间】:2015-07-18 12:36:06
【问题描述】:

我正在尝试为我的游戏提出一个好的设计。我目前正在测试一个数据驱动的项目系统,我希望这个系统非常灵活。

  • 我的武器需要某种类型的弹药。
  • 我有弹药类型的实际弹药。

如果玩家想开火,我需要查看它的库存中是否有正确的弹药类型。对于需要引用弹药类型的实际弹药也是如此。当玩家捡起它已经拥有的弹药时,应该相互添加。

我目前正在考虑的是一个弹药类型的类,它有一个“短”字符串供参考,因为字符串在 Json 文件中更具可读性。此类还包含弹药的信息,例如专有名称和一些额外信息。最后我创建了一个列表来存放不同类型的弹药。

然后,当我创建实际弹药(项目)时,我将从我从文件生成的弹药类型列表中选择一种类型。这个弹药项目包含它的数量。当弹药被射击并被击中时,我可能会在这里使用接口和工厂来处理不同类型的弹药(爆炸、穿刺、轻型弹药的行为都不同)。

然后,当武器要开火时,我会通过查找“短”字符串来检查相应的弹药是否在玩家的库存中。

我想知道我是否在正确的轨道上。我怀疑我的参考系统使用弹药类型的“短”字符串。如果我创建我的弹药类型的工厂,我可以检查我的武器开火方法,如果有该类类型的弹药,我只会使用工厂中的短手字符串来创建各种对象。

如果我想使用工厂并使用 OOP,我需要很多类。

[Ammo]
    [Bullet]
        [762mm] //I know this is not a valid class name, have to come up with something.
        [5.56mm]
        [Etc.] //Plenty more to come thanks to data driven
    [Rocket]
        [Tornado]
        [Etc.] //Plenty more
    [Grenade] //Launcher
        [Etc.]
    [Etc.] //..

但是对于每种类型,我都可以拥有一个界面并创建功能。我可以通过比较类来轻松比较弹药的类型。

如果我使用简写字符串的引用,我不必创建所有类、接口和工厂,但必须在长语句中设置弹药规则。从长远来看,事情可能会变得一团糟。

对此或其他“更好”的方法有什么想法吗?

【问题讨论】:

    标签: java oop


    【解决方案1】:

    我建议不要使用差异化 OOP 方法,原因如下:

    • 数据驱动

    您说弹药和武器将通过数据驱动设计来创建。这很好,但是如果您需要为每种类型的弹药创建一个新的子类,您仍然需要实际实现该新类。这是针对每个弹药的。在游戏中获得新弹药很容易......

    哪个弹药进入哪个枪需要在某个地方的逻辑。您可以在 OOP 中执行此操作,但您也可以将所有相关信息保存在通用数据表中(数据驱动!给你!)。您的代码将仅实现一般规则,而不是子弹类型与枪等的实际关系。我将存储在数据库中。您的代码保持不变,但行为是数据驱动的......缺点当然是您的测试现在需要处理来自数据库的数据。

    • OOP 与对象组合

    如果您的对象真的遵循这种相当严格的模型,那么 OOP 一切都很好。我真的根本不是弹药专家,所以我可能是错的,但难道不能想出具有几种父类型特征的弹药实体吗?这种关系很难在 OOP 中建模。这是 JAVA OOP 的一个缺点,因为你不能从多个父级继承。相反,您应该研究对象组合。

    我认为您对人类可读标识符的短字符串的想法是可以的。这些也应该来自您的数据,并且不应该是硬编码的。

    【讨论】:

    • 谢谢,我想我到了。我是否应该只使用基类BulletRocket 等,以便为它们编写行为。子弹可能会刺穿,但火箭可以被引导和爆炸。尽管所有这些也可以写在一个大通用Ammo 类中。保持数据驱动是绝对正确的。
    • 我将创建公共静态整数来引用弹药。我不会使用数据库,因为我认为我只需要它来存放弹药,如果我真的发疯了,我最终可能会“只”有几百种类型。所以当我创建一个新的弹药类型时,我需要做的就是添加到全局整数的 lst 并添加一个工厂语句。我将受益于数据文件的可读性和更快、更安全的弹药类型查找。
    • 听起来不错。祝你好运。我并不反对 OOP,如果你可以抽象某些超类型,那就去吧。我只是担心深度嵌套和从非父类继承功能的不可避免的需要。我在许多项目中都看到了这一点,所以我现在非常赞成对象组合。见en.wikipedia.org/wiki/Composition_over_inheritance
    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2020-06-28
    • 1970-01-01
    • 2011-11-04
    • 2012-03-04
    相关资源
    最近更新 更多