我正在尝试为我的游戏设计一个好的设计。我目前正在测试数据驱动的项目系统,我希望这个系统非常灵活。
如果玩家想要发射武器,我需要查询它是否具有正确的弹药类型。对于需要保持对弹药类型的引用的实际弹药也是如此。当玩家拿起弹药时它已经存在,它应该互相添加。
我目前正在考虑的是一种具有"短"的弹药类型。字符串供参考,因为字符串在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.] //..
但是对于每种类型,我都可以拥有一个界面并创建功能。我可以通过比较课程来轻松比较弹药的类型。
如果我使用简写字符串的引用,我不必创建所有类,接口和工厂,但必须在长语句中设置弹药规则。从长远来看,事情可能会变得混乱。
关于这个或那个的任何想法"更好"接近这个?
答案 0 :(得分:1)
由于以下原因,我建议不要采用差异化的OOP方法:
你说弹药和武器将通过数据驱动设计创造出来。这一切都很好,但是如果你需要为每种类型的弹药都有一个新的子类,你仍然需要实际实现那个新类。这是每个弹药。可以轻松获得新的弹药......
弹药进入什么枪需要在哪里的逻辑。您可以在OOP中执行此操作,但您也可以在通用数据表中保存所有相关信息(数据驱动!在这里!)。你的代码只会实现一般规则,但不会实现子弹类型与枪支等的实际关系。这将存储在数据库中。您的代码保持不变,但行为是数据驱动的......退回当然是您的测试现在需要处理来自数据库的数据。
我认为您对人类可读标识符的短字符串的想法是可以的。这些也应该来自您的数据,不应该硬编码。