0

我正在开发一个幻想回合基础游戏。我现在必须为我的法术创建数据库结构。问题是我真的不知道如何创建它。也许那些咒语的效果不应该存储在数据库中?

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

编辑:

这是一款回合制游戏,时间与回合相同,距离代表方块。我在下面的意思的一些例子。

假设我们有焚化:

  • 它只能瞄准 1 个敌人(不是盟友)
  • 它可以在 3 个方格的距离处施放
  • 每回合造成5点伤害
  • 它持续3圈

现在我们可以使用冲击波:

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

最后一个 Rain Call:

  • 它可以在任何距离投射
  • 它是一个 5x5 正方形大小的云
  • 它可以瞄准盟友和敌人
  • 只有火生物受到伤害
  • 施法时施法者无法移动,每回合损失 5 点法力

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

4

2 回答 2

1

我不会使用关系数据库来存储咒语。关系数据库适用于以下大多数情况:

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

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

让我们来解决你的问题。不同类型的法术的数量肯定是有界的,在编译时就知道了,为什么不定义一个接口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“元素”。
于 2012-05-01T10:44:07.253 回答
0

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

Amit Bhargava的建议很好,并且具有用户可以理解的优点。但是字符串非常慢,所以你可以做的是在你的拼写表中使用标志。然后,根据标志,您知道它是哪种类型的咒语。

于 2012-04-29T19:42:35.260 回答