如何使基于回合的游戏的数据库结构可扩展?

时间:2012-04-29 05:04:48

标签: database structure effects

我正在开发一款奇幻转身基础游戏。 我现在必须为我的法术创建数据库结构。问题是我对如何创建它并不是一个好主意。也许这些法术的效果不应存储在数据库中?

例如,效果可能是;增加攻击力,拉动敌人,治疗,传送,隐藏,放置我的等等......效果非常不同,我希望数据库结构是可扩展的。

编辑:

这是一个回合制游戏,时间与转弯相同,距离代表正方形。 以下是我的意思的一些例子。

假设我们有烧尽:

  • 它只能攻击一个敌人(不是盟友)
  • 它可以在3平方
  • 的距离上浇铸
  • 每回合造成5点伤害
  • 它持续3回合

现在我们可以采取冲击波:

  • 它以4行方式行进
  • 从施法者附近的广场开始
  • 它会击中它击中的第一个目标(盟友或敌人)
  • 对目标造成5点伤害并将其击退回1平方

最后一次Rain Call:

  • 它可以在任何距离投放
  • 这是一个5x5平方的云。
  • 它可以瞄准盟友和敌人
  • 只有火生物受到伤害
  • 施放后,施法者固定不动,失去5点法力/转

你可以看到有很多可能的列:它行进的距离,转弯,施法距离,类型(伤害,治疗,护甲等),值(+2),目标(敌人,盟军,两者) ,大小等。

2 个答案:

答案 0 :(得分:1)

我不会使用关系数据库来存储法术。当大多数以下条件适用时,关系数据库很好:

  • 你有非常多的数据,
  • 数据可以在逻辑上组织为n元关系(表,行,列),
  • 您有许多用户可以同时访问数据,
  • 您需要ACID properties
  • 等等

数据库就像卡车。他们很大。它们很难使用。它们是昂贵的。 (就所需的专业知识,维护时间,运行时效率等而言,如果不是金钱方面的话)他们非常擅长于他们擅长的东西,而不是其他任何东西。当自行车足够时,不要使用卡车。

让我们来解决你的问题。法术的不同类型的数量肯定是有限的,并且在编译时是已知的,为什么不定义接口ISpell,让每个法术类型都是实现ISpell的类? (您还可以为公共代码定义一个抽象类)然后,SpellFactory可以在程序启动时构造并提供对所有法术的访问。你真的需要从外面访问法术而不依赖你的代码吗?

如果SpellFactory的硬编码不够灵活,您可以使用xml配置文件。 <spell type="blind" description="bla bla" picture="file.jpg"> <effects> <effect .. /> .. </effects> <range>5</range>等等。我对计算机游戏知之甚少,但这就是他们在sid meier文明游戏中所做的事情。然后,您可以让它在启动时从配置文件中读取它们,而不是对SpellFactory中的不同法术进行硬编码。

据我所知,使用配置文件而不是数据库具有以下优点:

  • 这是一种快速,简单,轻量级的解决方案,
  • 比让所有法术具有相同的列数(其中大部分对特定法术没有意义)更灵活。
  • 对于实验,变体等,同时拥有多个版本的法术套装要容易得多,
  • 您可以让最终用户访问和操作xml文件以自定义游戏,而无需让他们访问也包含敏感数据的数据库,
  • 等等。

缺点:

  • 更多人了解关系数据库而不是xml格式,因此您可能需要花费几个小时来学习如何阅读和操作xml“元素”。

答案 1 :(得分:0)

你的问题很大。这取决于很多事情,你是否会在运行时加载咒语?也许你会在游戏开始时加载它们?您将使用什么数据库?

Amit Bhargava的建议很好,并且具有用户可理解的的优势。但是字符串很慢,所以你可以做的是在你的法术表中使用标志。然后,根据旗帜你知道它是什么类型的咒语。