如何使用存储卡游戏的if语句使2个picturebox匹配?(c#)



我正在做一个内存匹配游戏,这些是图像和它们的标签。

private void Fruits_Load(object sender, EventArgs e)
{
countDown1.Start();
countDown5.Start();
picApple.Image = Properties.Resources.apple;
wrdApple.Image = Properties.Resources.wrdApple;
picBanana.Image = Properties.Resources.banana;
wrdbanana.Image = Properties.Resources.wrdBanana;
picKiwi.Image = Properties.Resources.kiwi;
wrdKiwi.Image = Properties.Resources.wrdKiwi;
picOrange.Image = Properties.Resources.orange;
wrdOrange.Image = Properties.Resources.wrdOrange;
picPineapple.Image = Properties.Resources.pineapple;
wrdPineapple.Image = Properties.Resources.wrdPineapple;
picStrawberry.Image = Properties.Resources.strawberry;
wrdStrawberry.Image = Properties.Resources.wrdStrawberry;
picBlackberry.Image = Properties.Resources.blackberry;
wrdblackberry.Image = Properties.Resources.wrdBlackberry;
picMango.Image = Properties.Resources.mango;
wrdMango.Image = Properties.Resources.wrdMango;
picApple.Tag = "apple";
wrdApple.Tag = "apple";
picBanana.Tag = "banana";
wrdbanana.Tag = "banana";
picKiwi.Tag = "kiwi";
wrdKiwi.Tag = "kiwi";
picOrange.Tag = "orange";
wrdOrange.Tag = "orange";
picPineapple.Tag = "pineapple";
wrdPineapple.Tag = "pineapple";
picStrawberry.Tag = "strawberry";
wrdStrawberry.Tag = "strawberry";
picBlackberry.Tag = "blackberry";
wrdblackberry.Tag = "blackberry";
picMango.Tag = "mango";
wrdMango.Tag = "mango";
}

我有两个图像,第一个是picApple,另一个是wrdApple,正如你在下面的代码中看到的那样,我使用了if语句,但当我运行应用程序时,当我点击picApple时,它会立即与wrdApple一起变得不可见。我想要的是让用户先看到第一个图像,然后再看到另一个图像,如果它们匹配,如果不匹配,它们将变得不可见,然后应该再次覆盖它们。你知道怎么做吗?这是图片盒的代码

private void picApple_Click(object sender, EventArgs e)
{
picApple.Image = Properties.Resources.apple;
if ((string)picApple.Tag == (string)wrdApple.Tag)
{
picApple.Visible = false;
wrdApple.Visible = false;
}
else if ((string)picApple.Tag != (string)wrdApple.Tag)
{
picApple.Image = Properties.Resources.apple;
wrdApple.Image = Properties.Resources.wrdApple;
}

}
private void wrdApple_Click(object sender, EventArgs e)
{
wrdApple.Image = Properties.Resources.wrdApple;
if ((string)wrdApple.Tag == (string)picApple.Tag)
{
picApple.Visible = false;
wrdApple.Visible = false;
}

我的答案假设你想在一段时间内显示第二个图像,并且类似的卡使用相同的图像,但这里是:

public partial class Form1 : Form
{
private readonly Timer _imageTimer;
private bool _firstClick;
private PictureBox _firstPictureBoxClicked;
private PictureBox _secondPictureBoxClicked;
public Form1()
{
InitializeComponent();
_firstClick = true;
_imageTimer = new Timer(5000);
_imageTimer.Elapsed += ImageTimerOnElapsed;
}
private void ImageTimerOnElapsed(object sender, ElapsedEventArgs e)
{
_imageTimer.Stop();
_firstPictureBoxClicked.Invoke((MethodInvoker)delegate { _firstPictureBoxClicked.Visible = false; });
_secondPictureBoxClicked.Invoke((MethodInvoker)delegate { _secondPictureBoxClicked.Visible = false; });
}
private void Picture_Click(object sender, EventArgs e)
{
if (_firstClick)
{
_firstPictureBoxClicked = (PictureBox) sender;
ShowImage(_firstPictureBoxClicked);
}
else
{
if (((PictureBox) sender).Tag == _firstPictureBoxClicked.Tag)
{
_secondPictureBoxClicked = (PictureBox)sender;
ShowImage(_secondPictureBoxClicked);
_imageTimer.Start();
}
else
{
RemoveImage(_firstPictureBoxClicked);
}
}
_firstClick = !_firstClick;
}
private void ShowImage(PictureBox pictureBox)
{
switch (pictureBox.Tag)
{
case "apple":
pictureBox.Image = Properties.Resources.apple;
break;
case "banana":
pictureBox.Image = Properties.Resources.banana;
break;
}
}
private void RemoveImage(PictureBox pictureBox)
{
pictureBox.Image = null;
}
}

这一切都是在主窗体内完成的,但如果需要,您可以拆分逻辑。我还为此使用了PictureBox控件,不确定您使用的是什么。

我不知道Winform,但逻辑是:

public class GameWindows
{
private Image _firstSelected = null;
private void Image_Click(object sender, EventArgs e)
{
var selectedImage = (Image)sender;
if(_firstSelected == null)
{
//First selection
_firstSelected = selectedImage;
ApplySeletedEffect(selectedImage);
}
else
{
//Second selection
if ((string)selectedImage.Tag == (string)_firstSelected.Tag)
{
selectedImage.Visible = false;
_firstSelected.Visible = false;
}
RemoveSeletedEffect(_firstSelected);
_firstSelected = null;
}
}
}

当玩家点击图像时,调用Image_Click方法。ApplySeletedEffect将是Winform效果以显示图像被选中,RemoveSeletedEffect将删除此效果。

首先,您可以尝试不使用选定的效果。

最新更新