Unity QuizGame如何从500道题库中每轮随机抽取50道题进行游戏
Unity QuizGame 每轮随机抽取指定题目修改方案
首先在你项目的Quiz管理脚本中新增每轮题目数配置,后续可以按需调整数值:
// 配置每轮游戏出题量,当前设置为每轮50道 private const int *QUESTIONS_PER_ROUND* = 50;
接下来修改你提供的GetRandomQuestionIndex方法,同时修复原有代码的逻辑错误:
int GetRandomQuestionIndex() { var random = 0; // 原有逻辑为判断是否做完所有题库,现在改为判断是否做完本轮指定题量 if (FinishedQuestions.Count < QUESTIONS_PER_ROUND) { do { random = UnityEngine.Random.Range(0, Questions.Length); // 修复原代码硬编码错误:原逻辑误写为判断是否包含索引10,改为判断当前随机到的题目是否已作答过 } while (FinishedQuestions.Contains(random) || random == currentQuestion); } else { // 返回-1作为本轮题目已做完的标识 return -1; } return random; }
然后调整题目获取逻辑,新增本轮结束的处理逻辑:
Question GetRandomQuestion() { var randomIndex = GetRandomQuestionIndex(); // 收到-1标识代表本轮所有题目已作答完成 if(randomIndex == -1) { HandleRoundEnd(); return null; } currentQuestion = randomIndex; // 注意如果原有逻辑已经在其他位置添加已做题目记录,这里可以删掉下一行避免重复添加 FinishedQuestions.Add(randomIndex); return Questions[currentQuestion]; } // 本轮结束处理方法 private void HandleRoundEnd() { // 此处可以添加你原有的结算、得分展示等业务逻辑 // 清空本轮已作答记录,下次开新轮就会重新从全量题库随机抽题 FinishedQuestions.Clear(); currentQuestion = -1; }
注意事项
- 如果你的项目已经存在现成的游戏结束触发逻辑,只需要把原有判断条件
FinishedQuestions.Count == Questions.Length改为FinishedQuestions.Count == QUESTIONS_PER_ROUND即可 - 每次启动新一轮游戏前,确保已经清空
FinishedQuestions集合,避免用上一轮的已做记录过滤题目
内容的提问来源于stack exchange,提问作者KIERO_
相关产品推荐
相关产品推荐

