Поделиться через


Учебник. Вывод сообщения в приложении WinForms для игры "Подбери пару"

В этой серии из четырех учебников вы создадите игру "Подбери пару", в которой игрок должен подобрать пару скрытым значкам.

В этом уроке вы доработаете свою игру "Подбери пару" так, чтобы совпадающие пары были видны, а при победе игрока выводилось сообщение с поздравлением.

В этом руководстве описано следующее:

  • Отмена исчезновения пар значков.
  • Проверка того, выиграл ли игрок.
  • Изучение других возможностей.

Необходимые компоненты

В этом руководстве описаны следующие предыдущие учебники:

  1. Создание соответствующего игрового приложения
  2. Добавление значков в соответствующую игру
  3. Добавление таймера в игру сопоставления

Отмена исчезновения пар значков

Если игрок подобрал пару, игра должна перезагрузиться, чтобы больше не отслеживать метки, использующие ссылочные переменные firstClicked и secondClicked. Однако она не должна сбрасывать цвета для двух совпадающих меток. Эти метки должны и дальше отображаться.

  1. Добавьте следующий оператор if в метод обработчика событий label_Click(). Разместите его ближе к концу кода непосредственно над оператором, запускающим таймер.
        // If the player gets this far, the timer isn't
        // running and firstClicked isn't null,
        // so this must be the second icon the player clicked
        // Set its color to black
        secondClicked = clickedLabel;
        secondClicked.ForeColor = Color.Black;

        // If the player clicked two matching icons, keep them 
        // black and reset firstClicked and secondClicked 
        // so the player can click another icon
        if (firstClicked.Text == secondClicked.Text)
        {
            firstClicked = null;
            secondClicked = null;
            return;
        }

        // If the player gets this far, the player 
        // clicked two different icons, so start the 
        // timer (which will wait three quarters of 
        // a second, and then hide the icons)
        timer1.Start();
    }
}

Важно!

Используйте элемент управления языка программирования в правом верхнем углу этой страницы, чтобы просмотреть фрагмент кода на C# или Visual Basic.

Programming language control for Microsoft Learn

Первый оператор if проверяет, совпадает ли значок в первой метке, которую выбрал игрок, со значком во второй метке. Если значки одинаковы, программа выполняет три оператора. Первые два оператора сбрасывают ссылочные переменные firstClicked и secondClicked. После этого они перестают отслеживать метки. Третий оператор — оператор return, который пропускает оставшиеся в методе операторы, позволяя не выполнять их.

  1. Запустите программу, а затем начните выбирать квадраты в форме.

Screenshot of the Matching Game that you create in this tutorial.

Если вы выбрали пару, которая не совпадает, произойдет событие таймера Tick и оба значка исчезнут.

Если выбрать совпадающую пару, будет выполнен оператор if. Оператор return заставляет метод пропустить код, который запускает таймер. При этом значки остаются видимыми.

Проверка того, выиграл ли игрок

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

  1. Добавьте метод CheckForWinner() в конец кода, под обработчиком событий timer1_Tick().
/// <summary>
/// Check every icon to see if it is matched, by 
/// comparing its foreground color to its background color. 
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
    // Go through all of the labels in the TableLayoutPanel, 
    // checking each one to see if its icon is matched
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        Label iconLabel = control as Label;

        if (iconLabel != null) 
        {
            if (iconLabel.ForeColor == iconLabel.BackColor)
                return;
        }
    }

    // If the loop didn’t return, it didn't find
    // any unmatched icons
    // That means the user won. Show a message and close the form
    MessageBox.Show("You matched all the icons!", "Congratulations");
    Close();
}

В этом методе используется еще один цикл foreach для C# или цикл For Each для Visual Basic, чтобы пройти по каждой метке в TableLayoutPanel. Он проверяет цвет значка каждой метки, чтобы убедиться, что он совпадает с фоном. Если цвета совпадают, значок остается невидимым, и проигрыватель не соответствовал всем оставшимся значкам.

В этом случае программа использует оператор return, чтобы пропустить оставшуюся часть метода. Если цикл прошел через все метки без выполнения оператора return, значит, всем значкам в форме была подобрана пара. Программа показывает MessageBox , чтобы поздравить игрока с победой, а затем вызывает Close() метод для завершения игры.

  1. После этого обработчик событий Click метки вызывает новый метод CheckForWinner().
// If the player gets this far, the timer isn't
// running and firstClicked isn't null, 
// so this must be the second icon the player clicked
// Set its color to black
secondClicked = clickedLabel;
secondClicked.ForeColor = Color.Black;

// Check to see if the player won
CheckForWinner();

// If the player clicked two matching icons, keep them 
// black and reset firstClicked and secondClicked 
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
    firstClicked = null;
    secondClicked = null;
    return;
}

Убедитесь, что программа проверяет наличие победителя сразу после отображения второго значка, который выбирает игрок. Найдите строку, где задается цвет второму значку, который вы выбрали, и вызовите метод CheckForWinner() сразу после этой строки.

  1. Сохраните и выполните программу. Сыграйте в игру и подберите пару всем значкам. В случае победы программа выводит сообщение с поздравлением.

    Screenshot shows the Matching game with a MessageBox.

    Если выбрать OK, игра "Подбери пару" закроется.

Изучение других возможностей

Теперь ваша игра "Подбери пару" завершена. Вы можете добавить дополнительные возможности, чтобы сделать эту игру более сложной и интересной. Ниже приведены некоторые варианты.

  • Замените значки и цвета на другие.

    Попробуйте проверить свойство ForeColor метки.

  • Добавьте таймер игры, который отслеживает время, необходимое игроку для победы.

    Вы можете добавить метку, чтобы отобразить время, затраченное на форму. Разместите ее над TableLayoutPanel. Добавьте в форму еще один таймер, чтобы иметь возможность отслеживать время. Следующий код служит для запуска таймера, когда игрок начинает игру, и остановки таймера после сопоставления последних двух значков.

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

    Для воспроизведения звуков можно использовать пространство имен System.Media. Дополнительные сведения см. в руководстве по воспроизведению звуков в приложении Windows Forms (C#) и Visual Basic.

  • Сделайте игру труднее, увеличив игровое поле.

    Необходимо сделать больше, чем просто добавить строки и столбцы в TableLayoutPanel. Вы должны также учитывать количество создаваемых значков.

  • Сделайте игру интереснее, скрывая первый значок, если игрок медлителен.

Следующие шаги

Поздравляем! Вы завершили изучение серии учебников. Вы выполнили следующие задачи по программированию и проектированию в Visual Studio IDE:

  • сохранили объекты, например значки, в списке;
  • использовали цикл на C# или Visual Basic для прохода по списку;
  • отслеживали состояния с помощью ссылочных переменных;
  • создали обработчик событий для реагирования на события для нескольких объектов;
  • добавили таймер, который отсчитывает время и запускает событие.

Перейдите к этой статье, чтобы более подробно изучить конструктор Windows Forms.