【问题标题】:Random XML Questions Using Fisher-Yates Shuffle使用 Fisher-Yates Shuffle 的随机 XML 问题
【发布时间】:2016-01-20 01:05:29
【问题描述】:

我正在制作一个测验/琐事游戏,并将问题存储在 XML 文件中,它得到一个随机问题。一切正常,但我想保持随机,但在显示每个问题之前不显示相同的问题。

 public struct Question {
 public string questionText;
 public string answerA;
 public string answerB;
 public string answerC;
 public string answerD;
 public int correctAnswerID;
 }

[XmlRoot("QuestionsRoot")]
public class QuestionData {
[XmlArray("Questions")]
[XmlArrayItem("Question")]
public List<Question>questions = new List<Question>();

 public static QuestionData LoadFromText(string text) {
 try {
     XmlSerializer serializer = new XmlSerializer(typeof(QuestionData));            
     return serializer.Deserialize(new StringReader(text)) as QuestionData;
 } catch (Exception e) {
     UnityEngine.Debug.LogError("Exception loading question data: " + e);
     return null;
 }
}

我在我的其他脚本中使用它来获得一个随机问题:

 questionData = QuestionData.LoadFromText(questionDataXMLFile.text)
 q = Random.Range(0, questionData.questions.Count);
 currentQuestion = questionData.questions[q];

【问题讨论】:

  • 如果你问如何实现fisher-yates,这个网站和维基百科上有很多例子。如果您真的尝试过实现它,我们需要查看该代码,并且您需要解释它有什么问题。
  • @Blorgbeard 我试过 for (int i = 1; i
  • 所以使用Question x 而不是string x
  • 另外,为什么不在原始帖子中发布该代码和错误?您需要解释您的实际问题以获得帮助。请注意,您可以edit您的帖子!
  • 好的,我会的。谢谢

标签: c# shuffle


【解决方案1】:

按照以下思路做一些事情:

创建另一个包含可用问题的列表 - 将其初始化为所有问题的列表:

 questionData = QuestionData.LoadFromText(questionDataXMLFile.text)

 var available = new List<Question>(questionData.question);
 ...
 }

 public Question GetNextQuestion()
 {
     if (available.Count == 0)
        available.AddRange(questionData.question);

    q = Random.Range(0, available.Count);
    currentQuestion = available[q];
    available.RemoveAt(q);

    return currentQuestion;
 }

【讨论】:

  • Op 提到了随机播放,但事实并非如此。不过还是可以的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2011-03-21
相关资源
最近更新 更多