2013-11-11 2 views
0

Мне нужно создать викторину с использованием строкового массива, и будет отображаться бегущая оценка, будет добавлена ​​одна точка для каждого правильного ответа и один раз вычитается для каждого неправильного ответа. У меня есть первый вопрос, который хорошо работает, я просто не знаю, как это сделать для следующих. У меня есть только одна кнопка отправки, поэтому весь код для первого вопроса подключен к этой кнопке. Как мне это сделать, когда вы отправляете свой второй ответ, он говорит вам, что он правильно, а затем движется дальше? Мне сказали, что цикл for будет хорошо работать с этим, но я не знаю, как его реализовать.Создайте тест с несколькими вариантами с массивами в C#

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--; 
     } 
+0

вы хотите счет будет обновляться, когда пользователь вводит ответ? или только когда они нажимают кнопку «Отправить»? – Catalyst

+0

, если пользователь дает один неверный ответ, ему не следует разрешать дальше? –

+0

@Catalyst - это радиокнопки, так что пользователь может ввести ответ, нажав кнопку отправки :) – Roebotek

ответ

2

проблема: здесь вы жестко вписан ответ со значением радиокнопки б, как показано ниже:

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

это будет только проверить ответ с радиокнопкой б и она будет работать только на первый вопрос.

Вы не продолжаете этот процесс для остальной части Вопросов.

Решение: Я добавил один массив strng, содержащий ответы на все вопросы по вашим вопросам. поэтому, когда пользователь нажимает кнопку отправки, он проверяет соответствующий ответ и продолжит тот же процесс до конца.

код, как показано ниже:

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 ""; 
} 
+0

Большое вам спасибо! Очень признателен! – Roebotek

+0

Добро пожаловать :), мое предложение состоит в том, чтобы сделать текстовое поле только для чтения, чтобы пользователь не мог его изменить, и запустите этот цикл до длины вопросов. –

Смежные вопросы