问题描述
我正在尝试为我的游戏设计一个好的设计。 我目前正在测试一个数据驱动项目系统,我希望该系统非常灵活。
- 我的武器需要某种类型的弹药。
- 我有一种弹药的实际弹药。
如果玩家想发射武器,我需要查找库存中是否有正确的弹药类型。 实际的弹药也需要保持对弹药类型的引用。 当玩家拿起弹药时,??应该已经将其相互添加。
我目前正在考虑的是弹药类型的类,该类具有“短”字符串供参考,因为在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.] //..
但是对于每种类型,我都可以有一个界面并创建功能。 通过比较班级,我可以轻松比较弹药的类型。
如果我通过短字符串使用引用,则不必创建所有类,接口和工厂,而必须在较长的语句中设置弹药规则。 从长远来看,事情可能会变得混乱。
您对此有何想法或其他“更好”的方法?
1楼
由于以下原因,我建议不要采用差异化的OOP方法:
- 数据驱动
您说弹药和武器将通过数据驱动的设计来创建。 很好,但是如果每种弹药都需要一个新的子类,则仍然需要实际实现该新类。 那是每个弹药。 轻松将新弹药加入游戏...
哪种弹药的逻辑在于什么枪需要放在某处。 您可以在OOP中完成此操作,但也可以将所有相关信息保存在通用数据表中(数据驱动! 您的代码将仅实现一般规则,而不会实现子弹类型与枪支等的实际关系。这将存储在数据库中。 您的代码保持不变,但是行为是由数据驱动的。缺点当然是您的测试现在需要处理数据库中的数据。
- OOP与对象组成
如果您的对象确实遵循这个相当严格的模型,那么OOP很好,也很好。 我真的不是弹药专家,所以我可能是错的,但是否有可能想到具有几种父类型特征的弹药实体呢? 这种关系在OOP中很难建模。 这在JAVA OOP中是一个缺点,因为您不能从多个父母那里继承。 相反,您应该研究对象组成。
我认为您想从人类可读的标识符中提取一个短字符串是可以的。 这些也应该来自您的数据,并且不应进行硬编码。