C # Форма, пытаясь изменить случайный pictureBox на случайное изображение с таймером - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь сделать следующее:

Я хочу, чтобы 4 изображения-ящика, которые я получил в форме, получили лицевые стороны карты - я имею в виду, переверните их.случайная карта из 4 будет выбрана, перевернута и покажет лицо выбранной карты, а также randomley.

После того, как карта перевернута, ее нельзя снова переключить в следующий интервал таймера, икак только все карточки были перевернуты, появляется окно сообщения, и когда пользователь нажимает «ОК», все перезапускается.

Проблема в том, что messageBox продолжает появляться снова и снова из-за положительного значения флага.Я не знаю, какую переменную мне следует использовать, чтобы этого не произошло.

Соответствующий код:

//This function is the timer's function, it starts every time interval:
    private void cardsChangingTimer_Tick(object sender, EventArgs e)
    {
        int chosenImage = rnd.Next(1, 17);
        int chosenCard = rnd.Next(0, 4);
        if (bucketArr[chosenCard] == 0)
        {
            bucketArr[chosenCard]++;
            switch (chosenCard)
            {
                case 0:
                    card1Pic.Image = Image.FromFile("cards\\" + chosenImage + ".png");
                    break;
                case 1:
                    card2Pic.Image = Image.FromFile("cards\\" + chosenImage + ".png");
                    break;
                case 2:
                    card3Pic.Image = Image.FromFile("cards\\" + chosenImage + ".png");
                    break;
                case 3:
                    card4Pic.Image = Image.FromFile("cards\\" + chosenImage + ".png");
                    break;

            }
        }
        gameEnded = true;
        for (int i = 0; i < bucketArr.Length; i++) 
        {
            if (bucketArr[i] == 0)
            {
                gameEnded = false;
                break;
            }
        }
        if (gameEnded)
        {
            DialogResult dialog = MessageBox.Show("All 4 cards were turned over...");
            if (dialog == DialogResult.OK)
            {
                card1Pic.Image = Image.FromFile("..\\..\\17.png");
                card2Pic.Image = Image.FromFile("..\\..\\17.png");
                card3Pic.Image = Image.FromFile("..\\..\\17.png");
                card4Pic.Image = Image.FromFile("..\\..\\17.png");
            }
            gameEnded = false;
            for(int i = 0; i < bucketArr.Length; i++)
                bucketArr[i] = 0;
        }
    }

Большое спасибо за любую помощь ...

1 Ответ

0 голосов
/ 18 мая 2018

Проблема в том, что таймер продолжает работать, пока отображается диалоговое окно.Просто остановите таймер до того, как отобразится MessageBox, затем перезапустите таймер после возврата окна.

private void cardsChangingTimer_Tick(object sender, EventArgs e)
{
    int chosenImage = rnd.Next(1, 17);
    int chosenCard = rnd.Next(0, 4);

    /// ... Rest of the code goes here

            break;
        }
    }
    if (gameEnded)
    {
        //Get a reference to the timer and stop it.
        var timer = (Timer)sender;
        timer.Stop();

        DialogResult dialog = MessageBox.Show("All 4 cards were turned over...");
        if (dialog == DialogResult.OK)
        {
            card1Pic.Image = Image.FromFile("..\\..\\17.png");
            card2Pic.Image = Image.FromFile("..\\..\\17.png");
            card3Pic.Image = Image.FromFile("..\\..\\17.png");
            card4Pic.Image = Image.FromFile("..\\..\\17.png");
        }
        gameEnded = false;
        for(int i = 0; i < bucketArr.Length; i++)
            bucketArr[i] = 0;

        //start the timer here after everything has been re-initialized.
        timer.Start();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...