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. 回答リストの順序をランダム化するための優れたシャッフルメソッドを含むRandomizeaList<T>を見てください。

変数をメンバーに昇格numberCheckさせることは機能しますが、実際には悪い解決策です。最初のいくつかの項目では機能しますが、49の質問を実行すると、残っている唯一の質問がランダムに選択されるまでループし続けます。より良い代替策は、番号1-50の初期リストを作成し、2)でリンクされた投稿からシャッフルメソッドを使用して順序を選択することです。次に、新しい質問を取得するときに、そのリストの次の項目を取得します。

于 2012-07-14T11:29:47.890 に答える