大家好我正在创建一个名为Quiz游戏的程序。现在我的问题是如何生成不重复的问题?我的所有问题都存储在switch语句中。我已经尝试并搜索了所有可能的解决方案,但仍然得到相同的输出。我的下面的代码只是一个例子我没有粘贴它所有bcoz太长时间。每当我调用方法Question()时,它都是随机的,但有时问题已经被问到了。
public void Question()
{
var random = new Random((int)DateTime.Now.Ticks);
var randomValue = random.Next(1, 8);
switch (randomValue)
{
case 1:
ans = 1;
btnA.Visible = true;
btnB.Visible = true;
btnC.Visible = true;
btnD.Visible = true;
btn50.Enabled = true;
btndoubledip.Enabled = true;
lblQuestion.Text = "1+1=?";
voice = new SpeechSynthesizer();
voice.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Child);
voice.SpeakAsync(lblQuestion.Text.ToString());
btnA.Text = "2";
btnB.Text = "1";
btnC.Text = "4";
btnD.Text = "5";
}
break;
答案 0 :(得分:1)
使用Randomize a List<T>随机播放列表。所以:
private static Random rng = new Random();
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
然后只需将问题列表随机播放并从头到尾显示它们。
List<Question> questions = new List<Question>()
{
question1,
question2,
question3
//...
}
questions.Shuffle();
foreach (Question question in questions) question.Ask();