1

我目前正在开发一款游戏。目前,我有一个类(游戏环境)负责保存游戏对象(敌人、武器等)的集合并进行碰撞检查、调用对象的创建例程等。随着我的进展项目,我开始怀疑我是否应该有一个更分层的方法 - 是拥有一个武器管理器、一个 EnemiesManager 和一个将所有东西放在一起的环境,还是让我的环境类像我一样操纵每个对象?我现在在做什么?

值得一提的是,游戏对象已经非常分层:

BaseClass
-----EnemyClass
----------Enemy1Subclass
----------Enemy2Subclass
-----WeaponClass
----------Weapon1Subclass
----------Weapon2Subclass

BaseClass 定义了基本的对象属性,例如位置。EnemyClass 和 WeaponClass 是相当通用的类,它们定义了更多特定于类的方法和属性,例如 EnemyClass 的速度或 WeaponClass 的伤害。它们大多存在,所以我可以拥有相当通用的集合,而不是为每个单独的敌人/武器类型单独集合。Enemy1Subclass/Enemy2Subclass 和 Weapon1Subclass/Weapon2Subclass 是实际创建和使用的敌人/武器类。

我的 Environment 类存储 EnemyClass/WeaponClass 的集合,并通过调用游戏对象的方法进行必要的操作。

Environment (manipulates EnemyClass and WeaponClass objects by iterating over their respective arrays and calling their respective methods; doesn't do any subclass-specific stuff)
-----EnemyClass array
----------Enemy1Subclass entry
----------Enemy2Subclass entry
----------Enemy1Subclass entry
-----WeaponClass array
----------Weapon1Subclass entry
----------Weapon2Subclass entry
----------Weapon2Subclass entry

但现在我想知道再分离一层是否是个好主意,Environment 持有 EnemyManager/WeaponManager 类,而各自的经理持有和操作他们的集合:

Environment (calls generic instantiation, destruction, moving, etc. methods in EnemyManager and WeaponManager; doesn't ever directly interact with an EnemyClass or WeaponClass object)
-----EnemyManager (gets instructions from Environment and manipulates EnemyClass objects to carry out those instructions)
----------EnemyClass array
---------------Enemy1Subclass entry
---------------Enemy2Subclass entry
---------------Enemy1Subclass entry
-----WeaponManager (gets instructions from Environment and manipulates WeaponClass objects to carry out those instructions)
----------WeaponClass array
---------------Weapon1Subclass entry
---------------Weapon2Subclass entry
---------------Weapon2Subclass entry

想法?建议?我找不到任何关于这种“更多课程或更努力的课程”的约定,所以任何答案都是公平的游戏,直到并包括“你的模型是垃圾,重新开始”。虽然希望不会到那个地步。;)

4

3 回答 3

3

一般来说(非常普遍地),面向对象语言的一个主要优点是封装 - 将相关功能/方法和数据组合在一起(具有适当权限)更好的想法。应用在这里,这意味着就“有意义”而言,将代码分开会更好。在您的示例中,“更努力的工作类”意味着更大、整体更难理解以及处理大量数据的类。涵盖连续体任一侧的两个很好的指导方针:

  • 如果您需要一个流程图来跟踪一个类中发生的所有事情,您可能应该创建另一个类
  • 如果你注意到 A 类只包含 B 类,而 B 类只包含方法 C,也许这都可以在一个函数中

    总之,尽你最大的努力确保你的代码被划分为合理的,而不是多余的部分。

于 2013-04-10T05:45:04.890 回答
0

请记住,在(几乎)所有编程中,清晰是关键。

在这种情况下,做最直观的事情。我发现将程序和函数拆分为多个类通常是值得的,因为它提高了可维护性,并使代码通常更明确。

然而,句法糖句法糖精之间有一条细线。换句话说,让你的组织尽可能整洁,但不要过度。做让你的代码最清晰的事情。

在这种情况下,这似乎是interfaces 的一个很好的用途。尽量避免instanceof创建接口或抽象类的新实例。

于 2013-04-10T05:35:33.407 回答
0

虽然在开始 hack 之前考虑一下架构是件好事 - 将编程视为一个迭代过程。所以从最简单的事情开始,然后不断地重构。这样你就不会过度设计并保持你的代码可维护。所以关于你的文章标题,从一个班级开始做这项工作,如果你发现提取某些东西是有意义的,那就去做吧——今天的 IDE 会让你很容易。

于 2013-04-10T05:42:43.683 回答