0

文字列配列を使用してクイズを作成する必要があり、実行中のスコアが表示されます。正解ごとに 1 ポイントが追加され、不正解ごとに 1 ポイントが差し引かれます。最初の質問はうまくいきましたが、次の質問のやり方がわかりません。送信ボタンは 1 つしかないため、最初の質問のコードはすべてそのボタンに接続されています。2 番目の回答を提出したときに、それが正しいことを示して次に進むようにするにはどうすればよいですか? forループはこれでうまくいくと言われましたが、それを実装する方法がわかりません。

int score = 0;
int i = -1;
int a = 0;

string[] questions = new string[] { 
    "What is 9 cubed?", 
    "What is 6+3?", 
    "What type of animal is tuna sandwiches made from?", 
    "What is 18 backwards?" };

string[] answers = new string[] { 
"9", "81", "729", "2", "4", "2", 
"9", "1", "zebra", "aardvark", 
"fish", "gnu", "31", 
"81", "91", "88" };

private void btnStart_Click(object sender, EventArgs e)
{
    if (i < questions.Length)
    i++;
    //txtScore.Text = score;

    lblQuestion.Text = questions[i];

    radA.Text = answers[a];
    a++;
    radB.Text = answers[a];
    a++;
    radC.Text = answers[a];
    a++;
    radD.Text = answers[a];
    a++;

    btnStart.Visible = false;
    btnStart.Enabled = false;
    btnSubmit.Visible = true;
    btnSubmit.Enabled = true;

}

private void btnSubmit_Click(object sender, EventArgs e)
{
    {
        if (i == 0 && radB.Checked)
        {
            MessageBox.Show("Correct");
            score++;
            txtScore.Text = Convert.ToString(score);
            btnSubmit.Enabled = false;
            btnSubmit.Visible = false;
            btnStart.Visible = true;
            btnStart.Enabled = true;
            btnStart.Text = "Next";
        }

        else
        {
            MessageBox.Show("Incorrect");
            score--;
        }
4

1 に答える 1

2

問題: ここでは、以下のようにラジオボタンの b 値でハードコードされた回答があります:

if (i == 0 && radB.Checked)

ラジオボタン b でのみ回答をチェックし、最初の質問でのみ機能します。

残りの質問については、このプロセスを続行しません。

解決策: 質問に対するすべてのクイズの回答を含む文字列配列を 1 つ追加しました。そのため、ユーザーが送信ボタンを押すと、それぞれの回答で検証され、最後まで同じプロセスが続行されます。

以下のようなコード:

int score = 0;
int i = -1;
int a = 0;

string[] questions = new string[]
{
    "What is 9 cubed?", "What is 6+3?", 
    "What type of animal is tuna sandwiches made from?",
    "What is 18 backwards?"
};

string[] answers = new string[] {
   "9", "81", "729", "2", 
   "4", "2", "9", "1", 
   "zebra", "aardvark", "fish", "gnu", 
   "31", "81", "91", "88"
};

string [] quizAnswers=new string[]{"729","9","aardvark","81"};
private     void btnStart_Click(object sender, EventArgs e)
{
    if (i < questions.Length)
    i++;
    //txtScore.Text = score;

    lblQuestion.Text = questions[i];

    radA.Text = answers[a];
    a++;
    radB.Text = answers[a];
    a++;
    radC.Text = answers[a];
    a++;
    radD.Text = answers[a];
    a++;

    btnStart.Visible = false;
    btnStart.Enabled = false;
    btnSubmit.Visible = true;
    btnSubmit.Enabled = true;

}

private void btnSubmit_Click(object sender, EventArgs e){


    if(getSelectedAnswer().Equals(quizAnswers[i]))
    {
        MessageBox.Show("Correct");
        score++;
        txtScore.Text = Convert.ToString(score);
        btnSubmit.Enabled = false;
        btnSubmit.Visible = false;
        btnStart.Visible = true;
        btnStart.Enabled = true;
        btnStart.Text = "Next";
    }

    else
    {
        MessageBox.Show("Incorrect");
        score--;
        txtScore.Text = Convert.ToString(score);
        btnSubmit.Enabled = false;
        btnSubmit.Visible = false;
        btnStart.Visible = true;
        btnStart.Enabled = true;
        btnStart.Text = "Next";
    }
}
string getSelectedAnswer()
{
    if (radA.Checked)
    return radA.Text.ToString();
    if (radB.Checked)
    return radB.Text.ToString();
    if (radC.Checked)
    return radC.Text.ToString();
    if (radD.Checked)
    return radD.Text.ToString();
    return "";
}
于 2013-11-11T04:07:19.833 に答える