创建对话树

Creating a Dialogue tree

所以,我目前正在使用 SDL2 进行一个简单的项目,我很难理解对话树的代码。除了这个,我几乎已经完成了所有事情。那么让我们从什么是对话树开始:

因此,对话树基本上是一个分支故事,用户能够响应并影响所问的问题以获得不同的结果。这在游戏中越来越流行。

接下来我将解释我所做的事情。我将通过向您展示我的代码摘录来做到这一点:

switch(faze){
case 1:
    if(button1Press){
        button1Press = false;
        textToAdd += "That's nice, I'm glad to hear it.\n";
        answer1TextToAdd = "As am I";
        answer2TextToAdd = "How are you holding up?";
        answer3TextToAdd = "Wassup with you?";
    }else if(button2Press){
        button2Press = false;
        textToAdd += "What do you mean Meh?\n";
        answer1TextToAdd = "Meh";
        answer2TextToAdd = "Just; Meh...";
        answer3TextToAdd = "I've been up and down recently.";
    }else if(button3Press){
        button3Press = false;
        textToAdd += "I'm sorry, you wanna talk about it?.\n";
        answer1TextToAdd = "No, I'm fine.";
        answer2TextToAdd = "I'll live";
        answer3TextToAdd = "Yeah...";
    }
break;
case 2:
    if(button1Press){
        button1Press = false;
        textToAdd += "Cool.\n";
        answer1TextToAdd = "I am.";
        answer2TextToAdd = "Totally.";
        answer3TextToAdd = "Yup.";
    }else if(button2Press){
        button2Press = false;
        textToAdd += "Wow.\n";
        answer1TextToAdd = ":S";
        answer2TextToAdd = "Yup.";
        answer3TextToAdd = "I know.";
    }else if(button3Press){
        button3Press = false;
        textToAdd += "Go on...\n";
        answer1TextToAdd = "It doesn't matter.";
        answer2TextToAdd = "I'm fine";
        answer3TextToAdd = "Yeah...";
    }
break;

所以,让我解释一下; faze 是定义我们在游戏中的哪个点的变量,当按下其中一个按钮时它会增加,"TextToAdd" 不重要,但答案 1、答案 2 和答案 3 是 3 个可能的答案用户可以给予。

如你所见,它只响应按钮按下,用户说什么并不重要,响应纯粹基于哪个按钮。这导致对话树看起来更像这样:

如您所见,它忽略了提出的问题,甚至忽略了答案。我的引擎唯一需要继续的就是按下哪个按钮。

我实际上会组织得更多 "complex"。

对话框中的每一步都应该有一个指向下一步的指针,这样您就可以 选择,接下来是对话框的一部分。 这让一切变得更简单,你甚至可以回到你的树中。

因此对话部分 class 成立:
*指向下一部分的指针
*可行的选择
*选择功能
*为选项绘制按钮的功能

像你这样的实现对于小型应用程序来说还可以,但对于 更大的游戏或更长的对话。