ios - 如何在游戏中设置对话逻辑?

标签 ios objective-c algorithm logic artificial-intelligence

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

我不要求解决方案,但非常感谢有关如何设置它的想法。我只是不知道如何正确组织它。开发者通常如何在他们的游戏中这样做?

谢谢!

编辑:

感谢 Duncan 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>

等等等等。因此,每次玩家选择其中一个选项时,都会出现下一个链接字典。我认为它工作得非常好,并且可以使用相同的问题来相互链接,因此没有必要重写相同的东西。

最佳答案

我建议使用 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 - 如何在游戏中设置对话逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21662214/

相关文章:

objective-c - 在 Objective-C 中是否可以获取字符串中正则表达式匹配的位置

iphone - 如何测试 iOS 推送通知?

algorithm - 整数时间复杂度的位计数算法 (Brian Kernighan)

java - 这是什么算法?

ios - 如何在其他开发人员设备上安装我的 xcode 项目进行测试

iphone - ivars 的另一个内存管理查询

iOS:向 BLE 特性添加数据会抛出错误,要求只读特性

algorithm - 如何检测照片的对比度?

ios - 当我使用圆角时,UIImageView 图像被拉伸(stretch)。

IOS:从 uitableviewcell 验证用户发送重定向到相应的 Controller ?