我正在制作一个游戏,其中有一部分需要玩家参与对话。游戏会向玩家提出一个问题
,并提供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];
然后你可以使用类似的语法读取文件并遍历它。