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

我正在制作一个游戏,其中有一部分需要玩家参与对话。游戏会向玩家提出一个问题,并提供3个选项供玩家回答。当玩家回答后,会根据玩家的前一个回答弹出一个新问题。这意味着现在有3个可能的问题。每个问题又会带来3个新的答案,所以现在有9个可能的答案。每个答案又会引出一个问题,所以现在有9个问题27个可能的答案,以此类推…

我不是在寻求解决方案,但如果能提供一些如何设置的思路,我会非常感激。我只是不知道如何正确地组织这些内容。开发者通常在他们的游戏中是如何做的?

谢谢!

编辑:

感谢某某的建议。我解决这个问题的方法是使用一个包含许多小字典的plist文件。每个小字典代表一个问题及其可能的答案,并有一个唯一的ID。我制作了一个模型示例:

<key>q1</key><dict><key>question</key><string>你想向左走,向右走,还是直走?</string><key>a1</key><string>向左走。</string><key>a2</key><string>向右走。</string><key>a3</key><string>直走。</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>你向左走并找到了钥匙。</string><key>a1</key><string>拿起钥匙。</string><key>a2</key><string>继续前进。</string><key>a3</key><string>返回。</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>你向右走并遇到了一个怪物。</string><key>a1</key><string>与它战斗。</string><key>a2</key><string>逃跑。</string><key>a3</key><string>躲避它。</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>你直走并发现了一座城堡!</string><key>a1</key><string>进入城堡。</string><key>a2</key><string>继续直走而不进入城堡。</string><key>a3</key><string>返回。</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: @"你的任务是什么",    K_ANSWERS_KEY: @[@"我寻求真理和启蒙",                      @"我寻求逃离现实",                     @"我寻求圣杯"];   K_CORRECT_ANSWER_INDEX: @(2)   },  @{K_QUESTION_KEY: @"你最喜欢的颜色是什么",    K_ANSWERS_KEY: @[@"蓝色",                      @"红色",                     @"蓝色 - 不,绿色!"];   K_CORRECT_ANSWER_INDEX: @(1)   },  @{K_QUESTION_KEY: @"一只没有负重的燕子的飞行速度是多少",    K_ANSWERS_KEY: @[@"42",                      @"我不知道",                     @"是欧洲燕子还是非洲燕子?"];   K_CORRECT_ANSWER_INDEX: @(2)   }];

然后使用以下代码将其写入磁盘:

[questions writeToFile: file_path atomically: YES];

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注