Шаг 8. Добавление метода для проверки, выиграл ли игрок
Вы создали интересную игру, но требуется еще один элемент, чтобы завершить ее.Игра должна заканчиваться победой игрока, поэтому необходимо добавить метод CheckForWinner() для проверки, выиграл ли игрок.
Добавление метода для проверки, выиграл ли игрок
Добавьте метод 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 Sub CheckForWinner() ' Go through all of the labels in the TableLayoutPanel, ' checking each one to see if its icon is matched For Each control In TableLayoutPanel1.Controls Dim iconLabel = TryCast(control, Label) If iconLabel IsNot Nothing AndAlso iconLabel.ForeColor = iconLabel.BackColor Then Exit Sub Next ' 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() End Sub
/// <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.Он использует оператор равенства (== в Visual C# и = в Visual Basic) для проверки цвета значка каждой метки на соответствие цвету фона.Если цвета совпадают, значок остается невидимым, а значит игрок не подобрал пару оставшимся значкам.В этом случае программа использует оператор return, чтобы пропустить оставшуюся часть метода.Если цикл прошел через все метки без выполнения оператора return, значит, всем значкам в форме была подобрана пара.Программа отображает окно MessageBox с поздравлением победителя, а затем вызывает метод формы Close() для завершения игры.
После этого обработчик событий Click метки вызывает новый метод CheckForWinner().Убедитесь, что программа проверяет наличие победителя сразу после отображения второго значка, который выбирает игрок.Найдите строку, где задается цвет второму значку, который вы выбрали, и после этой операции вызовите метод CheckForWinner(), как показано в следующем коде.
' If the player gets this far, the timer isn't ' running and firstClicked isn't Nothing, ' 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 Then firstClicked = Nothing secondClicked = Nothing Exit Sub End If
// 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; }
Сохраните и выполните программу.Сыграйте в игру и подберите пару всем значкам.Если вы победили, программа отображает сообщение MessageBox с поздравлением (как показано на следующем рисунке) и закрывает окно.
Игра "Подбери пару!" с MessageBox
Продолжить или повторить пройденный материал
Следующий шаг руководства см. в разделе Шаг 9. Изучение других функций.
Предыдущий шаг руководства см. в разделе Шаг 7. Отмена исчезновения пар значков.