8단계: 게임 플레이어가 이겼는지 여부를 확인하는 메서드 추가Step 8: Add a Method to Verify Whether the Player Won

재미있는 게임을 만들었지만 이를 마무리하려면 추가 항목이 필요합니다.You've created a fun game, but it needs an additional item to finish it. 플레이어가 이기면 게임이 끝나야 하므로 CheckForWinner() 메서드를 추가하여 플레이어가 이겼는지 여부를 확인해야 합니다.The game should end when the player wins, so you need to add a CheckForWinner() method to verify whether the player won.

플레이어가 게임에 이겼는지 여부를 확인하기 위해 메서드를 추가하려면To add a method to verify whether the player won

  1. 다음 코드와 같이 코드 아래쪽 CheckForWinner() 이벤트 처리기 아래에 timer1_Tick() 메서드를 추가합니다.Add a CheckForWinner() method to the bottom of your code, below the timer1_Tick() event handler, as shown in the following code.

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

    이 메서드는 다른 foreach 루프(Visual C#의 경우) 또는 For Each 루프(Visual Basic의 경우)를 사용하여 TableLayoutPanel의 각 레이블을 하나씩 처리합니다.The method uses another foreach loop in Visual C# or For Each loop in Visual Basic to go through each label in the TableLayoutPanel. 이 루프에서는 같음 연산자(Visual C#의 == 및 Visual Basic의 경우 =)를 사용하여 각 레이블의 아이콘 색을 검사한 후 배경과 일치하는지 여부를 확인합니다.It uses the equality operator (== in Visual C# and = in Visual Basic) to check each label's icon color to verify whether it matches the background. 색이 일치하면 아이콘이 표시되지 않은 상대로 유지되고 플레이어가 남아 있는 아이콘 중 일부를 찾지 않았습니다.If the colors match, the icon remains invisible, and the player hasn't matched all of the icons remaining. 이 경우 프로그램에서는 return 문을 사용하여 메서드의 나머지 부분을 건너뜁니다.In that case, the program uses a return statement to skip the rest of the method. 루프에서 return 문을 실행하지 않고 모든 레이블을 차례로 처리하면 폼의 모든 아이콘이 일치되었음을 의미합니다.If the loop gets through all of the labels without executing the return statement, that means that all of the icons on the form were matched. 그러면 프로그램에서 플레이어에게 게임에 이긴 것을 축하하는 내용의 MessageBox를 표시한 다음, 폼의 Close() 메서드를 호출하여 게임을 끝냅니다.The program shows a MessageBox to congratulate the player on winning, and then calls the form's Close() method to end the game.

  2. 다음에는 레이블의 Click 이벤트 처리기에서 새 CheckForWinner() 메서드를 호출하도록 합니다.Next, have the label's Click event handler call the new CheckForWinner() method. 프로그램에서는 플레이어가 선택하는 두 번째 아이콘을 표시한 후 바로 승자 여부를 검사해야 합니다.Be sure that your program checks for a winner immediately after it shows the second icon that the player chooses. 두 번째 선택한 아이콘의 색을 설정하는 줄을 찾은 후, 다음 코드와 같이 바로 그 뒤에서 CheckForWinner() 메서드를 호출합니다.Look for the line where you set the second chosen icon's color, and then call the CheckForWinner() method right after that, as shown in the following code.

    // 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;
    }
    
    ' 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
    
  3. 프로그램을 저장하고 실행합니다.Save and run the program. 게임을 진행하고 일치하는 아이콘을 모두 찾습니다.Play the game and match all of the icons. 게임에 이기면 프로그램에서 다음 그림과 같은 축하 MessageBox를 표시한 후 상자를 닫습니다.When you win, the program displays a congratulatory MessageBox (as shown in the following picture), and then closes the box.

    MessageBox가 표시된 일치 게임Matching game with MessageBox
    MessageBox가 표시된 일치 게임Matching game with MessageBox

계속하거나 검토하려면To continue or review