C# 随机排列问题/按钮上的答案
我创建了一个问答游戏,并将我的问题存储在XML文件中(一个XML文件用于简单、中等和困难问题),并创建了一个数组:C# 随机排列问题/按钮上的答案,c#,winforms,linq-to-xml,C#,Winforms,Linq To Xml,我创建了一个问答游戏,并将我的问题存储在XML文件中(一个XML文件用于简单、中等和困难问题),并创建了一个数组: var quiz = XDocument.Load(path); _questions = quiz.Descendants("question") .Select(q => new Question() { ID = int.Parse(q.Attribute("
var quiz = XDocument.Load(path);
_questions = quiz.Descendants("question")
.Select(q => new Question()
{
ID = int.Parse(q.Attribute("id").Value),
Difficulty = int.Parse(q.Attribute("difficulty").Value),
QuestionText = q.Element("text").Value,
Answers = q.Element("answers")
.Descendants()
.Select(a => a.Value)
.ToArray(),
CorrectAnswer = q.Element("answers")
.Descendants()
.Select((a, i) => new { node = a.Name, index = i })
.First(a => a.node == "correctAnswer").index
});
}
我想知道是否有随机化的方法
<question id="2" difficulty="1">
<text></text>
<answers>
</answers>
感谢您的帮助和/或回复。从xml读取数据时使用随机数排序:
var rand = new Random();
var quiz = XDocument.Load(path);
_questions = quiz.Descendants("question")
.Select(q => new Question()
{
ID = (int)q.Attribute("id"),
Difficulty = (int)q.Attribute("difficulty"),
QuestionText = (string)q.Element("text"),
Answers = q.Element("answers")
.Descendants()
.Select(a => (string)a)
.OrderBy(a => rand.Next()) // randomizing answers
.ToArray(),
CorrectAnswer = (string)q.Element("answers")
.Descendants("correctAnswer")
.First() // use value instead of index
})
.OrderBy(q => rand.Next()); // randomizing questions
程序的其余部分将保持原样
我对你的项目进行了重构。结果你可以在这里得到。你有很多重复的代码。尝试在应用程序中对任何信息进行单一表示。这将使您的项目易于维护 关于重构的要点:
- 使用用户控件将相关控件分组在一起。我将与难度选择相关的控件提取到
中,并将与显示问题和选择答案相关的控件提取到难度选择控件
问题控件
- 使用
和BringToFront
方法更改控件的Z顺序SendToBack
- 使用事件将用户控件中发生的事件通知用户控件的客户端。我创建了
事件,用于通知使用所选难度。和DifficultySelected
事件,用于通知当前问题的回答是否正确QuestionResponsed
- 使用自定义事件参数将附加数据传递给事件处理程序
- 使用枚举<代码>难度。中等比
可读性强得多2
- 如果您的代码中有类似的方法,那么尝试将公共逻辑提取到一个方法中。看看问题按钮点击的处理程序,我在代码中使用了四个不同的处理程序
- 使用控件的描述性名称,而不是
或标签1
按钮4
还有改进的地方。例如,我在
困难选择控制中看到重复-所有处理程序看起来都相似。还有按钮背景色的复制。您应该有一个为按钮的不同状态定义颜色的地方。此外,还有一种难看的过滤方法(我将enum转换为int)。我已经将答案随机移动到问题控制中
非常感谢!有没有办法用按钮上的答案来做这件事?在XML文件中,正确的答案围绕着它们,错误的答案围绕着它们them@user2141272您唯一应该更改的是正确答案验证。通过值而不是索引来实现这一点我该怎么做?换零件?很抱歉提出这些问题,但我想最好让askI看看你的编辑。如果我键入.First(a=>a.Name==“correctAnswer”).Value,它所说的值不能隐式地将类型“string”转换为“int”。噢,我的天哪,非常感谢!你不明白我有多感激你!不过有一个小问题;它说简单部分有20个问题,中等部分有18个,硬部分有19个,而每个部分有20个问题?