0

我正在制作一个基本的多项选择游戏。我有一个给定字段的现有数据库:Qno、Question、Correct、Wrong1、Wrong2 和 Wrong3。当表单加载时,此代码会从我的数据库中生成随机顺序的问题,将问题放置在标签上,并将选项放在相应的按钮上。

 private void Form1_Load(object sender, EventArgs e)
        {
            NewQuestion();

  public void NewQuestion()
        {
            Stack numberCheck = new Stack();
            int y = 0;
            Random x = new Random();
            bool exists = false;

            y = x.Next(1, 50);
            exists = numberCheck.Contains(y);
            while (exists == true)
            {
                y = x.Next(1, 50);
                exists = numberCheck.Contains(y);
            }
            label2.Text = Convert.ToString(y);


            da.SelectCommand = new SqlCommand("SELECT Question from MC WHERE QNo=@id", cs);
            da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = label2.Text;
            cs.Open();
            label1.Text = Convert.ToString(da.SelectCommand.ExecuteScalar());
            cs.Close();


            da.SelectCommand = new SqlCommand("SELECT Correct from MC WHERE QNo=@id", cs);
            da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = label2.Text;
            cs.Open();
            button2.Text = Convert.ToString(da.SelectCommand.ExecuteScalar());
            cs.Close();

            da.SelectCommand = new SqlCommand("SELECT Wrong1 from MC WHERE QNo=@id", cs);
            da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = label2.Text;
            cs.Open();
            button3.Text = Convert.ToString(da.SelectCommand.ExecuteScalar());
            cs.Close();


            da.SelectCommand = new SqlCommand("SELECT Wrong2 from MC WHERE QNo=@id", cs);
            da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = label2.Text;
            cs.Open();
            button4.Text = Convert.ToString(da.SelectCommand.ExecuteScalar());
            cs.Close();

            da.SelectCommand = new SqlCommand("SELECT Wrong3 from MC WHERE QNo=@id", cs);
            da.SelectCommand.Parameters.Add("@id", SqlDbType.Int).Value = label2.Text;
            cs.Open();
            button5.Text = Convert.ToString(da.SelectCommand.ExecuteScalar());
            cs.Close();

        }

    }
}

问题清单:

  1. 问题可以重复
  2. 答案列表与它们在数据库中声明的顺序相同,其中按钮 1 始终正确,其余按钮错误
4

1 回答 1

0
  1. numberCheck每次调用时都会重新创建NewQuestion。要使其正常工作,您必须将其移出方法并使其成为类成员。

  2. 查看Randomize a List<T>,它包含一个很好的 shuffle 方法来随机化答案列表的顺序。

尽管将numberCheck变量提升为成员会起作用,但这实际上是一个糟糕的解决方案。对于前几个项目,它会起作用,但是当您完成 49 个问题时,它将继续循环,直到它随机碰巧选择了剩下的唯一问题。一个更好的选择是创建一个数字 1-50 的初始列表,然后使用 2) 中链接的帖子中的 Shuffle 方法来选择订单。然后在获取新问题时只需获取该列表中的下一项即可。

于 2012-07-14T11:29:47.890 回答