Как сделать так, чтобы сопоставление двух изображений происходило с использованием ifmememts для карточной игры?(C #) - PullRequest
0 голосов
/ 04 декабря 2018

Я занимаюсь игрой на соответствие памяти, это изображения и их тег.

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

У меня есть 2 изображения: первое - 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;
        }

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

В моем ответе предполагается, что вы хотите показать второе изображение в течение определенного периода времени, а также что аналогичные карты используют одно и то же изображение, но вот оно:

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, не уверен, что вы используете.

0 голосов
/ 04 декабря 2018

Я не знаю 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, чтобы удалить этот эффект.

Сначала вы можете попробовать без выбранного эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...