朋友和我自己正在制作一款鸡皮疙瘩式的冒险游戏,在每个阶段,用户都会看到一组潜在的4种选择,而用户的选择会影响故事的结果。
我应该使用哪种数据结构?
这是我的主要想法 - 对象
尽量让游戏尽可能贴近这些卡片的真实生活理念,制作一张卡片。基类,还有很多其他卡继承自 - 超类将包含Stringx5(x1story x4choiceStories)intx5(x1CardIDNumber x4CardIDChoices)。
这将允许我使用我们已有的材料轻松地抽出对象,并且具有控制用户选择的所有处理并在屏幕上显示信息的系统类。再次使用系统和基础卡类,它将允许未来的不同故事和诸如此类的东西。尽量使其尽可能重复使用并尽可能少写代码(我不会写出超过一千if
个语句。)
有一点我不清楚(以及我在无法找到答案的情况下发布此问题的实际原因):不是为了其他类而继承相似但有细微差别,例如经理和员工,让我的想法完全错误,浪费大量内存?
我已经研究过以下内容:
答案 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等)。
您唯一需要的是引用初始节点。