Играю в викторину, но не могу дождаться события нажатия кнопки во время цикла - PullRequest
0 голосов
/ 02 мая 2019

У меня есть домашнее задание. У меня уже есть метод, который генерирует 20 случайных идентификаторов вопросов, которые затем отправляются на сервер sql, где с помощью запросов я могу получить вопросы и возможные ответы в массивах. Но я бы сделал игру похожей на игру, чтобы одна кнопка запускалась и пошагово задавала вопрос, сохраняла выбранный ответ и проверяла, правильный ли он. В настоящее время я думал об использовании цикла for с предварительно сгенерированными идентификаторами вопросов для получения и отображения вопроса / ответов, а затем после того, как пользователь щелкнет по другому ubtton, он автоматически перейдет к следующему. Таким образом, потребуется способ подождать, пока кнопка не нажмет, или лучше использовать решение вместо цикла foreach. Я бы просто использовал метод get question один за другим, поэтому один метод get, одна проверка на правильность, затем следующий.

Попытка играть асинхронными методами безуспешно.

private void button1_Click(object sender, EventArgs e)
{
    //foreach (var item in Random())
    //{ 
          DisplayAnswers(1);
          _wait.WaitOne();
          DisplayAnswers(2);
          _wait2.Set();
    // }
}

private async void button2_Click(object sender, EventArgs e)
{
    CheckAnswer(1);
    _wait.Set();
    _wait2.WaitOne();
    CheckAnswer(1);
}

public void DisplayAnswers(int questionid)
{
    label1.Text = data.GetAnswers(questionid)[0];
    label2.Text = data.GetAnswers(questionid)[1];
    label3.Text = data.GetAnswers(questionid)[2];
    label4.Text = data.GetAnswers(questionid)[3];
    mentettvalasz = false;
}

public void CheckAnswer(int questionid)
{
    if (valasz1.Checked == true)
    {
        answernumber = 1;
    }
    if (valasz2.Checked == true)
    {
        answernumber = 2;
    }
    if (valasz3.Checked == true)
    {
        answernumber = 3;
    }
    if (valasz4.Checked == true)
    {
        answernumber = 4;
    }
    if (answernumber == data.GetCorrectAnswerID(questionid))
    {
        MessageBox.Show("jo valasz!");
    }
    else if (answernumber != data.GetCorrectAnswerID(questionid))
    {
        MessageBox.Show("Nem jo valasz!");
    }

    mentettvalasz = true;
 }

public int[] Random()
{
    int x = 0;
    x =+ data.GetQuestionAmount(1);
    x =+ +data.GetQuestionAmount(2);
    x =+ +data.GetQuestionAmount(3);
    x =+ +data.GetQuestionAmount(4);
    x =+ +data.GetQuestionAmount(5);
    x =+ +data.GetQuestionAmount(6);
    Random rnd = new Random();
    int[] questionarray = new int[20];

    for (int i=0; i<20;i++)
    {
        questionarray[i]=rnd.Next(1, x);
    }

    return questionarray;
}

1 Ответ

0 голосов
/ 02 мая 2019

Я думаю, что вы можете вызывать вопрос индивидуально по нажатию кнопки вместо цикла foreach, а затем вы можете обрабатывать их, используя прослушиватель событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...