0

一个朋友和我正在创建一个 Goosebumps 风格的冒险游戏,在每个阶段,用户都会看到一组潜在的 4 个选项,用户的选择会影响故事的结果。

我应该为此使用什么数据结构?

这是我的主要思想——对象

为了使游戏尽可能接近这些卡片的真实想法,创建一个“卡片”基类,并让许多其他卡片继承自此 - 超类将包含 Stringx5(x1story x4choiceStories) intx5 (x1CardIDNumber x4CardIDChoices) .

然后,这将允许我使用我们已有的材料轻松抽出对象,并有一个系统类控制用户选择的所有处理并在屏幕上显示信息。再一次有了系统和基础卡类,它将允许将来有不同的故事等等。尝试使其尽可能可重用并编写尽可能少的代码(我不会编写超过一千条if语句。)

我不清楚的一件事(以及我在无法找到答案时发布此问题的实际原因):继承是否意味着其他类似但略有不同的类,例如经理和员工,让我的想法完全错误并大量浪费内存?

我研究了以下内容:

  • 哈希表:这些示例似乎更面向电话簿,我认为它不适合我的需要
  • 定义故事类型的抽象:似乎也不适合我的需要
4

2 回答 2

1

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

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

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.
}

基本上,您创建每张卡,以便它链接到所有其他卡(这里的技巧是确保您以正确的顺序创建卡 - 简单的解决方案:没有选择地创建它们,然后通过一种addChoice(Card)方法添加不同的选择。

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

Card runCard(Card card)
{
    Card nextCard = null;
    showStoryText(card);
    // Display a line for each choice in the card and get the user's response.
    // Convert the response to the correct index.
    int selection = promptForAction(card);
    if (selection >= 0 && selection < card.numChoices()) {
        nextCard = card.getChoice(selection);
    }
    return nextCard;
}

void run()
{
    Card card = firstCard;
    while(card != null) {
        card = runCard(card);
    }
}
于 2012-07-12T22:29:41.980 回答
-1

这应该不会太糟糕。本质上,您需要一个树结构。

您的主要课程可能看起来像(请原谅我缺乏 C++ 知识)

class Node {

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

因此,您的Node实例可以指向Node.

拥有某种类型的 Node 实例集合可能会更好,这样您就可以拥有任意多或尽可能少的节点。您可以向节点添加一个字段,指示它是哪个选项(1、2 等)。

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

于 2012-07-12T22:29:11.377 回答