簡體   English   中英

C#表單,嘗試使用計時器將隨機pictureBox更改為隨機圖像

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

我想做的是這樣的:

我想要表格中的4個PictureBox來獲得卡片的面孔-我是說將它們翻過來。 從4張中選擇一張隨機紙牌,將其翻面並顯示被選擇的紙牌的表面以及randomley。

一旦將卡翻轉了,就無法在下一個計時器間隔內再次翻轉,並且一旦所有卡都翻轉了,就會出現messageBox,並且一旦用戶按下ok,它就會重新啟動。

問題是:由於標志為正值,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;
        }
    }

非常感謝您的幫助...

您遇到的問題是在顯示對話框時計時器正在繼續運行。 只需在顯示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