6단계: 타이머 추가
다음에는 일치 게임에 타이머를 추가합니다.
타이머를 추가하려면
Windows Forms 디자이너의 도구 상자로 이동합니다.구성 요소 범주에서 타이머를 두 번 클릭하여 폼에 타이머를 추가합니다. 이때 다음 그림과 같이 폼 아래에 있는 회색 상자에 타이머 아이콘이 나타납니다.
Timer
timer1 아이콘을 클릭하여 타이머를 선택합니다.Interval 속성은 750으로 설정하고 Enabled 속성은 False로 설정합니다.Interval 속성은 틱 사이의 대기 시간을 타이머에 알려 주므로 타이머가 첫 번째 Tick 이벤트를 발생시키기 전에 3/4초, 즉 750밀리초를 대기하도록 지시합니다.프로그램이 시작할 때 타이머가 시작되는 것을 원하지 않습니다.대신 Start() 메서드를 사용하여 플레이어가 두 번째 레이블을 클릭하면 타이머가 시작되게 할 수 있습니다.
Windows Forms 디자이너에서 Timer 컨트롤 아이콘을 두 번 클릭하여 다음 코드와 같이 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> ''' <remarks></remarks> Private Sub Timer1_Tick() Handles Timer1.Tick ' 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 = Nothing secondClicked = Nothing End Sub
/// <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 참조 변수를 null(Visual C#의 경우)과 Nothing(Visual Basic의 경우)으로 다시 설정합니다.이것은 프로그램 자체를 다시 설정하는 방식이기 때문에 중요합니다.이제는 Label 컨트롤을 추적하고 있지 않으며 플레이어는 다시 첫 번째 클릭을 할 수 있습니다.
[!참고]
Timer 개체에는 타이머를 시작하는 Start() 메서드와 타이머를 중지하는 Stop() 메서드가 있습니다.속성 창에서 타이머의 Enabled 속성을 True로 설정하면 프로그램이 시작되는 즉시 타이머에서 틱이 시작됩니다.그러나 이 속성을 False로 설정하면 Start() 메서드가 호출될 때까지 틱을 시작하지 않습니다.
[!참고]
일반적으로 타이머는 틱 사이의 밀리초를 결정하는 Interval 속성을 사용하여 Tick 이벤트를 반복적으로 발생시킵니다.이 경우에 Tick 이벤트 내에서 타이머의 Stop() 메서드가 호출되는 방식을 살펴보면타이머가 일회 모드로 설정되고, 따라서 Start() 메서드는 호출되면 지정된 간격만큼 기다렸다가 단일 Tick 이벤트를 발생시킵니다.
새 타이머의 동작을 보려면 코드 편집기로 이동하여 다음 코드를 label_Click() 이벤트 처리기 메서드의 위쪽과 아래쪽에 추가합니다.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> ''' <remarks></remarks> Private Sub label_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click, Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click, Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click ' 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 Then Exit Sub Dim clickedLabel = TryCast(sender, Label) If clickedLabel IsNot Nothing Then ' If the clicked label is black, the player clicked ' an icon that's already been revealed -- ' ignore the click If clickedLabel.ForeColor = Color.Black Then Exit Sub ' If firstClicked is Nothing, 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 Is Nothing Then firstClicked = clickedLabel firstClicked.ForeColor = Color.Black Exit Sub End If ' 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 ' 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() End If End Sub
/// <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 label_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 속성을 검사하여 타이머가 시작되었는지 여부를 확인합니다.그러면 플레이어가 첫 번째 및 두 번째 Label 컨트롤을 클릭하고 타이머가 시작되는 경우 세 번째 컨트롤을 클릭해도 아무 것도 수행되지 않습니다.
메서드 아래쪽의 코드는 플레이어가 클릭한 두 번째 Label 컨트롤을 추적하도록 secondClicked 참조 변수를 설정하고 레이블의 아이콘 색을 검정으로 설정하여 표시합니다.그런 다음 750밀리초 동안 기다린 후 Tick 이벤트를 발생시키도록 일회 모드에서 타이머를 시작합니다.그러면 타이머의 Tick 이벤트 처리기는 두 아이콘을 숨기고 firstClicked 및 secondClicked 참조 변수를 다시 설정하므로 폼에서 플레이어가 다른 아이콘을 클릭할 수 있습니다.
프로그램을 저장하고 실행합니다.아이콘을 클릭하면 표시됩니다.
다른 아이콘을 클릭합니다.그러면 해당 아이콘이 잠깐 나타났다가 두 아이콘이 모두 사라집니다.이 작업을 여러 번 반복하십시오.이제 폼에서 사용자가 클릭하는 첫 번째 아이콘과 두 번째 아이콘을 추적하고, 아이콘이 사라지기 전에 타이머를 사용하여 일시 중지시킵니다.
계속하거나 검토하려면
다음 자습서 단계로 이동하려면 7단계: 쌍 표시를 참조하십시오.
이전 자습서 단계로 돌아가려면 5단계: 레이블 참조 추가를 참조하십시오.