2015-11-11 116 views
0

所以,我目前正在開發一個SDL2中的簡單項目,並且我正在艱難地探索一個對話樹的代碼。除此之外,我幾乎完成了一切。因此,讓我們從對話樹開始: An example dialogue tree I got off google創建一個對話樹

因此,對話樹基本上是一個分支故事,用戶可以響應並影響要求得到不同結果的問題。這在遊戲中越來越受歡迎。

接下來我會解釋我所做的。我會通過向你展示我的代碼摘錄來做到這一點:

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個可能的答案可以給。正如你所看到的,它只響應按鈕按下,用戶所說的不重要,響應完全基於哪個按鈕。這導致對話樹看起來更像這樣: My diagram

正如你所看到的,它忽略了問題,甚至是答案。我的引擎唯一要做的是按下哪個按鈕。

回答

1

我實際上將它組織得更「複雜」。

對話框中的每一步都應該有一個指向下一個的指針,所以可以選擇 ,這個對話框的一部分就是下一個。 這使得一切都變得簡單,甚至可以回到樹上。

所以Dialogpart類包含:
*指針指向下一個部分
* aviable選擇
* FUNC選擇
* FUNC繪製按鈕選擇

實現像你這樣都還好了小應用程序,但可怕的 更大的遊戲或實際上更長的dialoges。

+0

因爲我發佈了這個問題,我實際上意識到了解決方案,但我想知道是否有人會有更好的解決方案。 – genfy