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


Шаг 8. Добавление метода для проверки, выиграл ли игрок

Вы создали интересную игру, но требуется еще один элемент, чтобы завершить ее.Игра должна заканчиваться победой игрока, поэтому необходимо добавить метод CheckForWinner() для проверки, выиграл ли игрок.

Добавление метода для проверки, выиграл ли игрок

  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 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() для завершения игры.

  2. После этого обработчик событий 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;
    }
    
  3. Сохраните и выполните программу.Сыграйте в игру и подберите пару всем значкам.Если вы победили, программа отображает сообщение MessageBox с поздравлением (как показано на следующем рисунке) и закрывает окно.

    Игра "Подбери пару!" с MessageBox

    Игра "Подбери пару!" с MessageBox

Продолжить или повторить пройденный материал