Ios 如何在游戏中建立对话逻辑?

Ios 如何在游戏中建立对话逻辑?,ios,objective-c,algorithm,logic,artificial-intelligence,Ios,Objective C,Algorithm,Logic,Artificial Intelligence,我正在制作一个游戏,其中一部分玩家必须参与对话。游戏向玩家询问一个问题,并提供3个选项来回答。当玩家回答时,根据玩家先前的回答,会弹出一个新问题。这意味着,现在有3个可能的潜在问题。每个问题都会带来3个新答案,因此现在有9个潜在的答案。每个答案又引出一个问题,所以现在有9个问题和27个潜在的答案等等 我不要求提供解决方案,但如果您能提供如何设置该解决方案的想法,我将不胜感激。我只是不知道如何正确地组织它。开发人员通常如何在他们的游戏中这样做 谢谢 编辑: 多亏了邓肯C的创意。我为解决这个问题所做

我正在制作一个游戏,其中一部分玩家必须参与对话。游戏向玩家询问一个
问题
,并提供
3个选项
来回答。当玩家回答时,根据玩家先前的回答,会弹出一个新问题。这意味着,现在有
3个
可能的潜在问题。每个问题都会带来3个新答案,因此现在有9个潜在的
答案。每个答案又引出一个问题,所以现在有9个问题和27个潜在的答案等等

我不要求提供解决方案,但如果您能提供如何设置该解决方案的想法,我将不胜感激。我只是不知道如何正确地组织它。开发人员通常如何在他们的游戏中这样做

谢谢

编辑:

多亏了邓肯C的创意。我为解决这个问题所做的只是一个有字典的plist,里面有很多小字典。每个小词典-一个可能的答案和唯一ID的问题。我举了一个我的模型的例子:

<key>q1</key>
<dict>

<key>question</key>
<string>Do you want to go left, right or straight?</string>

<key>a1</key>
<string>Left.</string>

<key>a2</key>
<string>Right.</string>

<key>a3</key>
<string>Straight.</string>

<key>a1key</key>
<string>q2.0</string>

<key>a2key</key>
<string>q2.1</string>

<key>a3key</key>
<string>q2.2</string>

</dict>


<key>q2.0</key>
<dict>

<key>question</key>
<string>You went left and found the key.</string>

<key>a1</key>
<string>Take the key.</string>

<key>a2</key>
<string>Go forward.</string>

<key>a3</key>
<string>Go back.</string>

<key>a1key</key>
<string>q2.01</string>

<key>a2key</key>
<string>q2.02</string>

<key>a3key</key>
<string>q2.03</string>

</dict>




<key>q2.1</key>
<dict>

<key>question</key>
<string>You went right and met a monster.</string>

<key>a1</key>
<string>Fight it.</string>

<key>a2</key>
<string>Run away.</string>

<key>a3</key>
<string>Hide from it.</string>

<key>a1key</key>
<string>q2.11</string>

<key>a2key</key>
<string>q2.12</string>

<key>a3key</key>
<string>q2.13</string>

</dict>


<key>q2.2</key>
<dict>

<key>question</key>
<string>You went straight and found a castle!</string>

<key>a1</key>
<string>Enter it.</string>

<key>a2</key>
<string>Continue going straight without visiting the castle.</string>

<key>a3</key>
<string>Go back.</string>

<key>a1key</key>
<string>q2.21</string>

<key>a2key</key>
<string>q2.22</string>

<key>a3key</key>
<string>q2.23</string>

</dict>
q1
问题
你想向左走,向右走还是直走?
a1
左边
a2
正确的。
a3
直的
一键
问题2.0
a2key
问题2.1
a3key
问题2.2
问题2.0
问题
你向左走,找到了钥匙。
a1
拿着钥匙。
a2
往前走。
a3
回去
一键
q2.01
a2key
q2.02
a3key
q2.03
问题2.1
问题
你向右走,遇到了一个怪物。
a1
对抗它。
a2
逃跑
a3
躲开它。
一键
问题2.11
a2key
问题2.12
a3key
问题2.13
问题2.2
问题
你径直走,发现了一座城堡!
a1
输入它。
a2
继续直走,不要参观城堡。
a3
回去
一键
问题2.21
a2key
问题2.22
a3key
问题2.23

等等等等。因此,每当玩家选择其中一个选项时,就会出现下一个链接字典。我认为它非常有效,可以使用同一个问题相互链接,因此没有必要重写相同的内容。

我没有尝试过,但我的建议如下:

<qa>
<question_1 question="what is your name ?">
<option value="mikel"  />
<option value="john"  />
<option value="sosan"  />
</question_1>

<mikel value="what is the biggest thing in the word ?">
<option value="thing1" isTrue="false"/>
<option value="thing2" isTrue="false"/>
<option value="thing3" isTrue="true"/>
</mikel >

....
<!--and for other answers -->

<thing1 value="what is the biggest thing in the word ?">
<option value="thing11" isTrue="false"/>
<option value="thing22" isTrue="false"/>
<option value="thing33" isTrue="true"/>
</thing1>
... so on
</qa>

....
... 等等
如果您使用了xml,那么您甚至可以为同一个应用程序使用任何其他文件。其他问题


希望这对你有帮助,祝你好运

我建议使用plist而不是XML。plist更容易创建和阅读

不过,不管是哪种情况,将问题和答案放入外部文件都可以使您的程序更加灵活,无需付出太多努力。然后,如果您以后决定要回答50个问题,只需将记录添加到文件中即可

我想推荐一系列字典。您可以这样创建它:

#define K_QUESTION_KEY @"question"
#define K_ANSWERS_KEY @"answers"
#define K_CORRECT_ANSWER_INDEX @"answerIndex"


NSArray *questions = @[
  @{K_QUESTION_KEY: @"What is your quest",
    K_ANSWERS_KEY: @[@"I seek truth and enlightenment", 
                     @"I seek to escape from reality",
                     @"I seek the Holy Grail"];
   K_CORRECT_ANSWER_INDEX: @(2)
   },
  @{K_QUESTION_KEY: @"What is your favorite color",
    K_ANSWERS_KEY: @[@"Blue", 
                     @"Red",
                     @"Blue - no, green!"];
   K_CORRECT_ANSWER_INDEX: @(1)
   },
  @{K_QUESTION_KEY: @"What is the airspeed velocity of an unladen swallow",
    K_ANSWERS_KEY: @[@"42", 
                     @"I don't know",
                     @"A European or African swallow?"];
   K_CORRECT_ANSWER_INDEX: @(2)
   }

];
然后使用

[questions writeToFile: file_path atomically: YES];

然后使用类似的语法读取文件并遍历它。

有趣的解决方案。我想,我需要学习如何在iOS应用程序中使用XML。谢谢你。谢谢你,@Duncan C,但是如果我在演讲中没有正确的答案,但每个问题只会引出一组新的3个不同的答案,那该怎么办?因此,它看起来像一个“树”模型。那么,不是每个字典都有一个“正确”答案,而是有一个答案数组,第二个数组使用相同的索引,其中包含每个可能答案的另一个问题字典。您可以将这些问题嵌套到您想要的深度。如果您的问题曾经在多个地方使用过,您可能希望转到一个平面结构,其中您只有一个问题数组,但每个问题都有一个唯一的“问题ID”字段。然后,在每个问题的答案数组中,如果用户选择该答案,您可以包含要链接到的问题ID。然后,您可以使用NSArray方法indexOfObjectPassingTest来查找具有该ID的问题。谢谢。我提出了一个几乎相同的解决方案。请检查我的编辑。