Sdílet prostřednictvím


Krok 8: Přidáte metodu ověření, zda přehrávač vyhraných

Vytvořili jste zábavnou hru, ale ta potřebuje další položku.Hra by měla skončit při vítězství hráče, takže je třeba přidat metodu CheckForWinner() k ověření, zda hráč zvítězil.

Přidat metodu k ověření, zda hráč zvítězil

  1. Přidejte metodu CheckForWinner() do formuláře, jak ukazuje následující kód.

    ''' <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();
    }
    

    Metoda používá další smyčku foreach v jazyce Visual C# nebo smyčku For Each v jazyce Visual Basic k projití každé jmenovky v kontejneru TableLayoutPanel.Používá operátor rovnosti (== v jazyce Visual C# a = v jazyce Visual Basic) ke kontrole každé barvy ikony k ověření, zda odpovídá pozadí.Pokud barvy shodují, zůstane ikona skrytý a přehrávač nebyl porovnány všechny zbývající ikony.V takovém případě program použije příkaz return k vynechání zbývající části metody.Pokud smyčka projde přes všechny jmenovky bez spuštění příkazu return, znamená to, že všechny ikony byly porovnány.Program zobrazí MessageBox a pak zavolá formulářovou metodu Close() k ukončení hry.

  2. Dále nechejme obslužnou rutinu události kliknutí jmenovky zavolat novou metodu CheckForWinner().Ujistěte se, že váš program kontroluje vítěze až po tom, co zobrazuje druhou ikonu, na kterou hráč klikne.Vyhledejte řádek, kde jste nastavili druhou kliknutelnou barvu ikony a zavolejte metodu CheckForWinner() hned po tomto, jak ukazuje následující kód.

    ' 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. Program uložte a spusťte ho.Hrajte hru a porovnejte všechny ikony.Pokud vyhrajete, program zobrazí MessageBox (jak je ukázáno na následujícím obrázku) a potom jej zavře.

    Skládačka s ovládacím prvkem MessageBox

    Skládačka s MessageBox

Chcete-li pokračovat nebo znovu projít