2015-03-31 5 views
0

Я разрабатываю приложение для викторины, которое держит бегущий счет. Например: неправильный ответ дает -1, а правильный ответ дает +1. Это нормально работает, но У меня возникли проблемы с окончательным вопросом. Я хочу, чтобы моя «следующая» кнопка изменилась на кнопку «Результаты» в форме, а затем на клик, отобразите окно сообщения, отображающее сообщение, содержащее оценку и сообщение.C# quiz application running score

Как я могу реализовать эту кнопку, только когда ответ был отправлен по последнему вопросу (поскольку я нахожусь за исключением в минуту)?

Вот мой код:

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

    string[] questions = new string[] 
    { 
     "Question 1?", 
     "Question 2", 
     "Question 3", 
     "Question 4", 
    }; 

    string[] answers = new string[] 
    { 
     "incorrect","correct","incorrect","incorrect", 
     "correct","incorrect","incorrect","incorrect", 
     "incorrect","incorrect","incorrect","correct", 
     "incorrect","incorrect","correct","incorrect" 
    }; 

    string[] quizAnswers = new string[] { "correct", "correct", "correct", "correct" }; 

    public FrmQuestion2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
     Tutorial3 t3 = new Tutorial3(); 
     t3.Show(); 
    } 

    private void FrmQuestion2_Load(object sender, EventArgs e) 
    { 
    } 

    private void Sbutton_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (i < questions.Length) 
       i++; 
      txtQuestion.Text = questions[i]; 

      RadA.Text = answers[a]; 
      a++; 
      RadB.Text = answers[a]; 
      a++; 
      RadC.Text = answers[a]; 
      a++; 
      RadD.Text = answers[a]; 
      a++; 
      Sbutton.Visible = true; 
      Sbutton.Enabled = true; 
      Sbutton.Text = "Submit"; 
      // Subutton.Visible = true; 
      // Subutton.Enabled = true; 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Only 4 questions available: Your Score is: " + score + " You need at least a score of 3 to progress"); 
     } 
     if (score >= 3) 
     { 
      nxtbutton.Visible = true; 
      nxtbutton.Enabled = true; 
     } 
     else if (score < 3) 
     { 
      nxtbutton.Visible = false; 
      nxtbutton.Enabled = false; 
      RetryButton.Visible = true; 
      RetryButton.Enabled = true; 
     } 
    } 

    private void Subutton_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (getSelected().Equals(quizAnswers[i])) 
      { 
       MessageBox.Show("Correct"); 
       score++; 

       txtScore.Text = Convert.ToString("Score:" + score); 
       Subutton.Enabled = false; 
       Subutton.Visible = false; 
       Sbutton.Visible = true; 
       Sbutton.Enabled = true; 
       Sbutton.Text = "Next"; 
      } 
      else 
      { 
       MessageBox.Show("Incorrect"); 
       score--; 

       txtScore.Text = Convert.ToString("Score:" + score); 
       Subutton.Enabled = false; 
       Subutton.Visible = false; 
       Sbutton.Visible = true; 
       Sbutton.Enabled = true; 
       Sbutton.Text = "Next"; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Please start the quiz"); 

     } 
    } 

    string getSelected() 
    { 
     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 ""; 
    } 

    private void RetryButton_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
     FrmQuestion2 q2 = new FrmQuestion2(); 
     q2.Show(); 
    } 
+2

Во-первых: вы не бросайте каких-либо исключений, что вы можете справиться. Второе: не используйте исключения для управления потоком вашей программы. – HimBromBeere

+0

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

+0

Я предполагаю, что это происходит, потому что вы увеличиваете «i» на один, а затем получаете доступ к i-му элементу, который теперь может отсутствовать границ вашего 'questions'-массива. Просто переместите эти первые две строки в конец вашего блока try. – HimBromBeere

ответ

0

Несколько предположений с этим ответом ...

Я предполагаю, что ваше событие щелчка nextButton является Sbutton_Click() и есть submitButton которого нажмите событие Subutton_Click().

Я не думаю, что ваше событие Sbutton_Click() не должно проверять счет, оно должно просто отображать следующий вопрос, если есть один для отображения. Ваш Subutton_Click() может проверить выбранный ответ, а затем решить отобразить nextButton или resultButton, потому что ваша программа должна знать, был ли ответ на последний вопрос.

Затем, когда кнопка нажата результаты, вы можете проверить свой счет и отобразить его, и решить, если отображается кнопка повтора/включена