Я пытаюсь сделать следующее:
Мне нужны 4 бокса с картинками, которые я получил в форме, чтобы получить лицевые стороны карты - я имею в виду, переверните их. случайная карта из 4 будет выбрана, перевернута и покажет лицевую сторону карты, выбранной также случайным образом.
После того, как карта перевернута, она не может быть повернута снова в следующем интервале таймера, и после того, как все карты были перевернуты, появляется messageBox, и как только пользователь нажимает ОК, все перезапускается.
Проблема в том, что 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;
}
}
Большое спасибо за любую помощь ...
Нет, это не так ... Я знаю, что из-за этого он снова и снова открывает диалоговое окно. Просто я безуспешно пытаюсь найти переменное решение для этого ...
Я думаю, мне просто нужно изменить способ определения, есть ли в массиве ноль или больше нет в середине цикла for ... Я просто не знаю, как





Проблема в том, что таймер продолжает работать, пока отображается диалоговое окно. Просто остановите таймер до того, как отобразится 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();
}
}
Спасибо, Скотт! Работает!! Не знал, что ты сможешь это сделать. Большое спасибо.
Используйте отладчик! Вы ведь установили значение true, верно? Имеет ли для вас смысл логика после?