다음을 통해 공유


자습서: 일치하는 게임 WinForms 앱에 메시지 표시

플레이어가 숨겨진 아이콘 쌍을 맞추는 매칭 게임을 만드는 4개의 튜토리얼 시리즈입니다.

이 자습서에서는 일치하는 쌍을 계속 표시하고 플레이어가 승리할 때 축하 메시지를 표시하도록 일치 게임을 수정합니다.

이 자습서에서는 다음 방법을 알아봅니다.

  • 쌍이 보이게 유지하세요.
  • 플레이어가 이겼는지 확인합니다.
  • 다른 기능을 사용해 보세요.

필수 구성 요소

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

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

쌍 표시 유지

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

  1. if 이벤트 처리기 메서드에 다음 label_Click() 문을 추가합니다. 타이머를 시작하는 문 바로 위에 코드의 끝 부분에 배치합니다.
        // 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();
    }
}

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

  1. 프로그램을 실행한 다음 양식에서 사각형 선택을 시작합니다.

이 자습서에서 만든 일치 게임의 스크린샷

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

일치하는 쌍을 선택하면 새 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();
}

이 메서드는 C#의 다른 foreach 루프 또는 Visual Basic의 For Each 루프를 사용하여 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. 프로그램을 저장하고 실행합니다. 게임을 플레이하고 모든 아이콘을 일치합니다. 승리하면 프로그램에 축하 메시지가 표시됩니다.

    스크린샷은 MessageBox와 일치하는 게임을 보여줍니다.

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

다른 기능 사용해 보기

매칭 게임이 완성되었습니다. 더 많은 기능을 추가하여 이 게임을 더 도전적이고 재미있게 만들 수 있습니다. 다음은 몇 가지 옵션입니다.

  • 아이콘과 색상을 사용자가 선택한 것으로 바꾸세요.

    레이블의 ForeColor 속성을 확인해 보세요.

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

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

  • 플레이어가 일치를 발견하면 소리를 추가하고, 플레이어가 일치하지 않는 두 개의 아이콘을 발견할 때 또 다른 소리를, 프로그램이 아이콘을 다시 숨길 때 세 번째 소리를 추가합니다.

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

  • 보드를 더 크게 만들어 게임을 더 어렵게 만듭니다.

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

  • 플레이어가 응답하기에 너무 느린 경우 첫 번째 아이콘을 숨김으로써 게임을 더 어렵게 만듭니다.

다음 단계

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

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

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