继承是这个“基于故事和选项”的冒险应用程序的正确选择吗?

时间:2012-07-12 22:20:57

标签: class inheritance game-engine

朋友和我自己正在制作一款鸡皮疙瘩式的冒险游戏,在每个阶段,用户都会看到一组潜在的4种选择,而用户的选择会影响故事的结果。

我应该使用哪种数据结构?

这是我的主要想法 - 对象

尽量让游戏尽可能贴近这些卡片的真实生活理念,制作一张卡片。基类,还有很多其他卡继承自 - 超类将包含Stringx5(x1story x4choiceStories)intx5(x1CardIDNumber x4CardIDChoices)。

这将允许我使用我们已有的材料轻松地抽出对象,并且具有控制用户选择的所有处理并在屏幕上显示信息的系统类。再次使用系统和基础卡类,它将允许未来的不同故事和诸如此类的东西。尽量使其尽可能重复使用并尽可能少写代码(我不会写出超过一千if个语句。)

有一点我不清楚(以及我在无法找到答案的情况下发布此问题的实际原因):不是为了其他类而继承相似但有细微差别,例如经理和员工,让我的想法完全错误,浪费大量内存?

我已经研究过以下内容:

  • 哈希表:示例似乎更多以电话簿为导向,我认为它不符合我的需求
  • 定义故事类型的抽象:似乎并不适合我的需求

2 个答案:

答案 0 :(得分:2)

不需要继承,因为卡完全相同,只是它们上的数据发生了变化。如果有特殊卡片需要与其他卡片表现不同,我会使用继承。

您可以使用此伪代码执行您想要的操作:

class Card {
    Card getChoice(int i); // returns choices[i]
    string storyText;
    Card[] choices; // Use an stl collection rather than an array for ease of addition.
}

基本上你创建每张卡片,所以它链接到所有其他卡片(这里的技巧是确保你以正确的顺序创建卡片 - 简单的解决方案:创建它们没有选择,并通过{{1}添加不同的选择方法稍后。

你的addChoice(Card)课程从第一张卡开始(基本上是所有卡片的树头),并执行以下操作:

Game

答案 1 :(得分:0)

这不应该太糟糕。基本上你需要一个树形结构。

你的主要课程看起来像(原谅我对c ++缺乏了解)

class Node {

   Node option1;
   Node option2;
   Node option3;
   Node option4;   
}

因此,您的Node个实例可以指向Node的其他实例。

拥有某种Node实例可能会更好,这样你就可以拥有任意数量的节点实例。您可以向Node添加一个字段,指示它是哪个选项(1,2等)。

您唯一需要的是引用初始节点。