자습서: 매칭 게임 WinForms 앱에 메시지 표시

이 시리즈의 4개 자습서에서는 플레이어가 숨겨진 아이콘의 쌍을 찾는 매칭 게임을 빌드합니다.

이 자습서에서는 일치된 쌍을 계속 표시하고 플레이어가 승리하면 축하 메시지를 표시합니다.

이 자습서에서는 다음과 같은 작업을 수행하는 방법을 살펴봅니다.

  • 쌍을 계속 표시합니다.
  • 플레이어가 이겼는지 확인합니다.
  • 다른 기능을 시도합니다.

필수 조건

이 자습서는 다음 이전 자습서를 기반으로 합니다.

  1. 일치하는 게임 애플리케이션 만들기
  2. 일치하는 게임에 아이콘 추가
  3. 일치하는 게임에서 타이머 추가

쌍 표시

플레이어가 쌍을 찾으면 게임이 firstClickedsecondClicked 참조 변수를 사용하는 레이블을 더 이상 추적하지 않도록 자동으로 다시 설정되어야 합니다. 일치된 두 레이블의 색을 다시 설정하면 안됩니다. 이러한 레이블은 계속 표시됩니다.

  1. label_Click() 이벤트 처리기 메서드에 다음 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;

        // 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 문은 플레이어가 선택하는 첫 번째 레이블의 아이콘이 두 번째 레이블의 아이콘과 같은지 여부를 검사합니다. 아이콘이 같으면 프로그램이 세 개의 문을 실행합니다. 처음 두 문은 firstClickedsecondClicked 참조 변수를 다시 설정합니다. 그러면 더 이상 레이블을 추적하지 않습니다. 세 번째 문은 메서드의 나머지 문을 실행하지 않고 건너뛰는 return 문입니다.

  1. 프로그램을 실행한 다음 폼에서 정사각형을 선택하기 시작합니다.

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

일치하지 않는 쌍을 선택하면 타이머의 틱 이벤트가 트리거됩니다. 두 아이콘이 모두 사라집니다.

일치하는 쌍을 선택하면 새 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.

    확인을 선택하면 매칭 게임이 닫힙니다.

기타 기능 사용

매칭 게임이 완료되었습니다. 더 많은 기능을 추가하여 이 게임을 더 어렵고 흥미롭게 만들 수 있습니다. 다음은 몇 가지 옵션입니다.

  • 다른 옵션을 선택하여 아이콘 및 색을 바꿉니다.

    레이블의 ForeColor 속성을 확인합니다.

  • 플레이어가 승리하는 데 걸리는 시간을 추적하는 게임 타이머를 추가합니다.

    레이블을 추가하여 폼에 경과 시간을 표시할 수 있습니다. 레이블을 TableLayoutPanel 위에 배치합니다. 폼에 다른 타이머를 추가하여 시간을 추적합니다. 코드를 사용하여 플레이어가 게임을 시작할 때 타이머가 시작되고 마지막 두 개의 아이콘을 일치시킨 후 타이머가 중지되도록 합니다.

  • 플레이어가 일치 항목을 찾을 때 재생되는 소리, 일치하지 않는 두 아이콘을 발견할 때 재생되는 소리, 프로그램에서 다시 아이콘을 숨길 때 재생되는 소리를 각각 다르게 추가합니다.

    소리를 재생하려면 System.Media 네임스페이스를 사용할 수 있습니다. 자세한 내용은 Windows Forms 앱에서 소리 재생(C#) 또는 Visual Basic에서 오디오를 재생하는 방법을 참조하세요.

  • 보드 크기를 늘려 게임 수준을 더 어렵게 만듭니다.

    TableLayoutPanel에 행과 열을 추가하는 것 외에 다른 작업이 필요합니다. 또한 만드는 아이콘의 수도 고려해야 합니다.

  • 플레이어가 반응하기에 너무 느린 경우 첫 번째 아이콘을 숨겨 게임 수준을 더 어렵게 만듭니다.

다음 단계

축하합니다! 자습서 시리즈를 완료했습니다. Visual Studio IDE에서 다음과 같은 프로그래밍 및 디자인 작업을 수행했습니다.

  • 목록에 개체(예: 아이콘)를 저장
  • C# 또는 Visual Basic에서 루프를 사용하여 목록을 반복
  • 참조 변수를 사용하여 상태 추적을 유지
  • 여러 개체에 대한 이벤트에 응답하는 이벤트 처리기를 빌드
  • 카운트다운하고 이벤트를 발생시키는 타이머를 추가

Windows Forms 디자이너에 대해 자세히 알아보려면 다음 문서로 진행하세요.