简体   繁体   English

C#表单,尝试使用计时器将随机pictureBox更改为随机图像

[英]C# Form, trying to change random pictureBox to a random image with timer

What I'm trying to do is this: 我想做的是这样的:

I want the 4 pictureBoxes I got in the form to get the faces of card - turn them over I mean. 我想要表格中的4个PictureBox来获得卡片的面孔-我是说将它们翻过来。 a random card from the 4 will be chosen, turned over and show the face of the card being chosen also randomley. 从4张中选择一张随机纸牌,将其翻面并显示被选择的纸牌的表面以及randomley。

Once a card is turned over, it cant be turend over again in the next timer interval, and once all cards had been turned over, a messageBox appears and once the user presses ok, it all restarts. 一旦将卡翻转了,就无法在下一个计时器间隔内再次翻转,并且一旦所有卡都翻转了,就会出现messageBox,并且一旦用户按下ok,它就会重新启动。

Problem is: the messageBox keeps appearing over and over again, because of the flag positive value. 问题是:由于标志为正值,messageBox不断出现。 I don't know which variable should I use to prevent that from happening. 我不知道应该使用哪个变量来防止这种情况的发生。

Relevant code: 相关代码:

//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;
        }
    }

Thanks alot for any help... 非常感谢您的帮助...

The problem you are having is the timer is continuing to run while the dialog box is shown. 您遇到的问题是在显示对话框时计时器正在继续运行。 Simply stop the timer before the MessageBox is shown then restart the timer after the box returns. 只需在显示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();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM