我正在开发一款奇幻转身基础游戏。 我现在必须为我的法术创建数据库结构。问题是我对如何创建它并不是一个好主意。也许这些法术的效果不应存储在数据库中?
例如,效果可能是;增加攻击力,拉动敌人,治疗,传送,隐藏,放置我的等等......效果非常不同,我希望数据库结构是可扩展的。
这是一个回合制游戏,时间与转弯相同,距离代表正方形。 以下是我的意思的一些例子。
假设我们有烧尽:
现在我们可以采取冲击波:
最后一次Rain Call:
你可以看到有很多可能的列:它行进的距离,转弯,施法距离,类型(伤害,治疗,护甲等),值(+2),目标(敌人,盟军,两者) ,大小等。
答案 0 :(得分:1)
我不会使用关系数据库来存储法术。当大多数以下条件适用时,关系数据库很好:
数据库就像卡车。他们很大。它们很难使用。它们是昂贵的。 (就所需的专业知识,维护时间,运行时效率等而言,如果不是金钱方面的话)他们非常擅长于他们擅长的东西,而不是其他任何东西。当自行车足够时,不要使用卡车。
让我们来解决你的问题。法术的不同类型的数量肯定是有限的,并且在编译时是已知的,为什么不定义接口ISpell,让每个法术类型都是实现ISpell的类? (您还可以为公共代码定义一个抽象类)然后,SpellFactory可以在程序启动时构造并提供对所有法术的访问。你真的需要从外面访问法术而不依赖你的代码吗?
如果SpellFactory的硬编码不够灵活,您可以使用xml配置文件。 <spell type="blind" description="bla bla" picture="file.jpg"> <effects> <effect .. /> .. </effects> <range>5</range>
等等。我对计算机游戏知之甚少,但这就是他们在sid meier文明游戏中所做的事情。然后,您可以让它在启动时从配置文件中读取它们,而不是对SpellFactory中的不同法术进行硬编码。
据我所知,使用配置文件而不是数据库具有以下优点:
缺点:
答案 1 :(得分:0)
你的问题很大。这取决于很多事情,你是否会在运行时加载咒语?也许你会在游戏开始时加载它们?您将使用什么数据库?
Amit Bhargava的建议很好,并且具有用户可理解的的优势。但是字符串很慢,所以你可以做的是在你的法术表中使用标志。然后,根据旗帜你知道它是什么类型的咒语。