이 4개의 자습서 시리즈에서는 플레이어가 숨겨진 아이콘 쌍을 맞추는 짝 맞추기 게임을 제작합니다.
귀하의 매칭 게임 프로그램은 플레이어가 선택하는 그 레이블 컨트롤을 추적해야 합니다. 플레이어가 첫 번째 레이블을 선택하면 프로그램에 아이콘이 표시됩니다. 두 번째 레이블을 선택한 후에는 프로그램에서 잠시 동안 두 아이콘을 모두 표시해야 합니다. 그런 다음 두 아이콘을 모두 숨깁니다.
프로그램은 참조 변수와을 사용하여 첫 번째와 두 번째로 선택한 레이블을 추적합니다. 타이머는 아이콘을 숨기고 아이콘을 표시하는 기간을 제어합니다.
- 레이블 참조를 추가합니다.
- 타이머를 추가합니다.
필수 구성 요소
이 자습서는 이전 자습서인 일치하는 게임 애플리케이션 만들고 일치하는 게임 아이콘을추가합니다. 먼저 해당 자습서를 완료합니다.
레이블 참조 추가
이 섹션에서는 코드에 두 개의 참조 변수를 추가합니다. 그들은 레이블 객체를 추적하거나 참조합니다.
Form1.cs
또는Form1.vb
다음 코드를 사용하여 양식에 레이블 참조를 추가합니다.public partial class Form1 : Form { // firstClicked points to the first Label control // that the player clicks, but it will be null // if the player hasn't clicked a label yet Label firstClicked = null; // secondClicked points to the second Label control // that the player clicks Label secondClicked = null;
C#을 사용하는 경우 여는 중괄호 뒤와 클래스 선언(public partial class Form1 : Form
) 바로 뒤에 코드를 넣습니다. Visual Basic을 사용하는 경우 클래스 선언(Public Class Form1
) 바로 다음에 코드를 배치합니다.
이러한 문장은 new
키워드가 없기 때문에 레이블 컨트롤이 양식에 나타나지 않습니다.
프로그램이 시작되면 firstClicked
및 secondClicked
모두 C#에서는 null
로, Visual Basic에서는 Nothing
로 설정됩니다.
새 Click 참조 변수를 사용하도록
Form1.cs
또는Form1.vb
firstClicked
이벤트 처리기를 수정합니다.label1_Click()
이벤트 처리기 메서드(clickedLabel.ForeColor = Color.Black;
)에서 마지막 문을 제거하고 다음과 같이if
문으로 바꿉니다./// <summary> /// Every label's Click event is handled by this event handler /// </summary> /// <param name="sender">The label that was clicked</param> /// <param name="e"></param> private void label1_Click(object sender, EventArgs e) { Label clickedLabel = sender as Label; if (clickedLabel != null) { // If the clicked label is black, the player clicked // an icon that's already been revealed -- // ignore the click if (clickedLabel.ForeColor == Color.Black) return; // If firstClicked is null, this is the first icon // in the pair that the player clicked, // so set firstClicked to the label that the player // clicked, change its color to black, and return if (firstClicked == null) { firstClicked = clickedLabel; firstClicked.ForeColor = Color.Black; return; } } }
프로그램을 저장하고 실행합니다. 레이블 컨트롤 중 하나를 선택하면 해당 아이콘이 나타납니다. 다음 레이블 컨트롤을 선택하면 아무 일도 발생하지 않습니다.
선택한 첫 번째 아이콘만 나타납니다. 다른 아이콘은 보이지 않습니다.
프로그램은 이미 플레이어가 선택한 첫 번째 레이블을 추적하고 있습니다.
참조 firstClicked
은 C#의 null
또는 Visual Basic의 Nothing
가 아닙니다.
if
문에서 firstClicked
이 null
또는 Nothing
과 같지 않다면, 문을 실행합니다.
타이머 추가
일치 게임 앱은 Timer 컨트롤을 사용합니다. 타이머가 대기 후 틱이벤트를 발생시킵니다. 타이머는 작업을 시작하거나 정기적으로 작업을 반복할 수 있습니다.
프로그램에서 타이머를 사용하면 플레이어가 두 개의 아이콘을 선택할 수 있습니다. 아이콘이 일치하지 않으면 짧은 시간 후에 두 아이콘을 다시 숨깁니다.
도구 상자 탭을 선택하고 구성 요소 범주에서 타이머 구성 요소를 폼으로 두 번 클릭하거나 끕니다. 타이머1라고 불리는 타이머 아이콘이 양식 아래의 공간에 나타납니다.
타이머1 아이콘을 선택하여 타이머를 선택합니다. 속성 창에서 속성 단추를 선택하여 속성을 봅니다.
Interval 속성을 750 밀리초인 750로 설정합니다.
Interval 속성은 이벤트를 트리거할 때 Tick사이의 대기 시간을 타이머에 알려줍니다. 프로그램에서 Start() 메서드를 호출하여 플레이어가 두 번째 레이블을 선택한 후 타이머를 시작합니다.
타이머 컨트롤 아이콘을 선택한 다음 Enter 키를 누르거나 타이머를 두 번 클릭합니다. IDE는
Form1.cs
또는Form1.vb
에 빈 Tick 이벤트 처리기를 추가합니다. 코드를 다음 코드로 바꿉다./// <summary> /// This timer is started when the player clicks /// two icons that don't match, /// so it counts three quarters of a second /// and then turns itself off and hides both icons /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { // Stop the timer timer1.Stop(); // Hide both icons firstClicked.ForeColor = firstClicked.BackColor; secondClicked.ForeColor = secondClicked.BackColor; // Reset firstClicked and secondClicked // so the next time a label is // clicked, the program knows it's the first click firstClicked = null; secondClicked = null; }
Tick 이벤트 처리기는 다음 세 가지 작업을 수행합니다.
- Stop() 메서드를 호출하여 타이머가 실행되고 있지 않은지 확인합니다.
-
firstClicked
및secondClicked
두 개의 참조 변수를 사용하여 플레이어가 선택한 두 레이블의 아이콘을 다시 보이지 않게 만듭니다. -
firstClicked
및secondClicked
참조 변수를 각각 C#에서null
로, Visual Basic에서Nothing
으로 재설정합니다.
코드 편집기로 이동하여
label1_Click()
또는Form1.cs
Form1.vb
이벤트 처리기 메서드의 위쪽과 아래쪽에 코드를 추가합니다. 이 코드는 타이머가 사용하도록 설정되어 있는지 확인하고,secondClicked
참조 변수를 설정하고, 타이머를 시작합니다. 이제label1_Click()
이벤트 처리기 메서드는 다음과 같이 표시됩니다./// <summary> /// Every label's Click event is handled by this event handler /// </summary> /// <param name="sender">The label that was clicked</param> /// <param name="e"></param> private void label1_Click(object sender, EventArgs e) { // The timer is only on after two non-matching // icons have been shown to the player, // so ignore any clicks if the timer is running if (timer1.Enabled == true) return; Label clickedLabel = sender as Label; if (clickedLabel != null) { // If the clicked label is black, the player clicked // an icon that's already been revealed -- // ignore the click if (clickedLabel.ForeColor == Color.Black) return; // If firstClicked is null, this is the first icon // in the pair that the player clicked, // so set firstClicked to the label that the player // clicked, change its color to black, and return if (firstClicked == null) { firstClicked = clickedLabel; firstClicked.ForeColor = Color.Black; return; } // 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 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(); } }
- 메서드 맨 위에 있는 코드는 Enabled 속성의 값을 확인하여 타이머가 시작되었는지 여부를 확인합니다. 플레이어가 첫 번째 및 두 번째 레이블 컨트롤을 선택하고 타이머가 시작되면 세 번째 레이블을 선택하면 아무 작업도 수행되지 않습니다.
- 메서드의 맨 아래에 있는 코드는
secondClicked
참조 변수를 설정하여 두 번째 Label 컨트롤을 추적합니다. 그런 다음 레이블 아이콘 색을 검은색으로 설정하여 표시합니다. 그런 다음, 750밀리초를 기다린 다음 단일 틱을 실행하기 위해 타이머를 원샷 모드로 시작합니다. 타이머의 Tick 이벤트 처리기는 두 아이콘을 숨기고firstClicked
및secondClicked
참조 변수를 재설정합니다. 플레이어가 다른 아이콘 쌍을 선택할 수 있도록 양식이 준비되었습니다.
메모
코드를 수동으로 입력하지 않고 label1_Click()
코드 블록을 복사하여 붙여넣는 경우 기존 label1_Click()
코드를 바꿔야 합니다.
그렇지 않으면 중복된 코드 블록으로 끝납니다.
- 프로그램을 저장하고 실행합니다. 사각형을 선택하면 아이콘이 표시됩니다. 다른 사각형을 선택합니다. 아이콘이 잠시 나타나고 두 아이콘이 모두 사라집니다.
이제 프로그램에서 선택한 첫 번째 및 두 번째 아이콘을 추적합니다. 아이콘이 사라지기 전에 타이머를 사용하여 일시 중지합니다.
다음 단계
다음 자습서로 이동하여 일치 게임을 완료하는 방법을 알아봅니다.