3단계: 카운트다운 타이머 추가
시간이 지정된 퀴즈이므로 카운트다운 타이머를 추가합니다.프로그램은 게임이 진행되는 동안 남은 시간(초)을 추적해야 합니다.
카운트다운 타이머를 추가하려면
이전과 마찬가지로 timeLeft라는 int(Integer)를 추가합니다.이 코드는 다음과 같습니다.
Public Class Form1 ' Create a Random object to generate random numbers. Private randomizer As New Random ' These Integers will store the numbers ' for the addition problem. Private addend1 As Integer Private addend2 As Integer ' This Integer will keep track of the time left. Private timeLeft As Integer
public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2; // This int will keep track of the time left. int timeLeft;
이제 타이머와 같이 실제로 카운트를 수행하는 기능이 필요합니다.Windows Forms 디자이너로 이동한 후 구성 요소 범주의 도구 상자에서 Timer 컨트롤을 폼으로 끌어서 놓습니다.그러면 Windows Forms 디자이너의 맨 아래에 있는 회색 영역에 이 컨트롤이 표시됩니다.
방금 추가한 timer1 아이콘을 클릭하고 Interval 속성을 1000으로 설정합니다.이렇게 하면 Tick 이벤트가 1초 간격으로 발생합니다.그런 다음 이 아이콘을 두 번 클릭하여 Tick 이벤트 처리기를 추가합니다.IDE가 코드 편집기로 전환되고 새 이벤트 처리기 메서드가 표시됩니다.다음 문을 추가합니다.
Private Sub Timer1_Tick() Handles Timer1.Tick If timeLeft > 0 Then ' Display the new time left ' by updating the Time Left label. timeLeft -= 1 timeLabel.Text = timeLeft & " seconds" Else ' If the user ran out of time, stop the timer, show ' a MessageBox, and fill in the answers. Timer1.Stop() timeLabel.Text = "Time's up!" MessageBox.Show("You didn't finish in time.", "Sorry") sum.Value = addend1 + addend2 startButton.Enabled = True End If End Sub
private void timer1_Tick(object sender, EventArgs e) { if (timeLeft > 0) { // Display the new time left // by updating the Time Left label. timeLeft = timeLeft - 1; timeLabel.Text = timeLeft + " seconds"; } else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; startButton.Enabled = true; } }
추가한 문을 기반으로 타이머는 1분 간격으로 timeLeft int(Integer)가 0보다 큰지 여부를 확인하여 시간이 다 되었는지 여부를 확인합니다.timeLeft가 0보다 크면 시간이 남은 것입니다.먼저 타이머는 timeLeft에서 1을 뺀 다음 남은 시간(초)을 표시하도록 timeLabel 컨트롤 Text 속성을 업데이트합니다.
남은 시간이 없으면 타이머가 중지되고 timeLabel 컨트롤 텍스트가 **Time's up!**으로 변경됩니다. 퀴즈가 끝났다는 메시지 상자가 나타납니다.이 경우 addend1과 addend2를 더하면 답이 노출됩니다.단추를 다시 사용할 수 있도록 하려면 startButton 컨트롤의 Enabled 속성을 true로 설정합니다.이렇게 하면 퀴즈를 다시 시작할 수 있습니다.
이제 프로그램에서 결정을 내리도록 지시하는 방법인 if else 문을 추가했습니다.if else 문은 다음과 같습니다.
If (something your program will check) Then ' statements that will get executed ' if the thing that the program checked is true Else ' statements that will get executed ' if the thing that the program checked is NOT true End If
if (something your program will check) { // statements that will get executed // if the thing that the program checked is true } else { // statements that will get executed // if the thing that the program checked is NOT true }
추가 문제의 답을 표시하기 위해 else 블록에 추가한 문을 자세히 살펴봅니다.
sum.Value = addend1 + addend2
sum.Value = addend1 + addend2;
코드를 보면 알 수 있듯이 addend1 + addend2는 두 개의 값을 더합니다.첫 번째 부분(sum.Value)은 NumericUpDown 컨트롤의 Value 속성을 사용하여 올바른 답을 표시합니다.Value 속성은 나중에 퀴즈의 답을 확인할 때도 사용됩니다.
NumericUpDown 컨트롤을 사용하면 숫자를 손쉽게 입력할 수 있습니다. 따라서 이 컨트롤은 수학 문제의 답을 입력하는 데 사용됩니다.모든 답이 0에서 100 사이의 숫자이므로 기본 Minimum과 Maximum 속성을 각각 0과 100으로 설정된 상태로 둡니다.그러면 사용자가 0에서 100 사이의 숫자만 입력할 수 있습니다.답은 정수일 수만 있기 때문에 DecimalPlaces 속성은 0으로 설정된 상태로 둡니다. 그러면 사용자가 소수를 입력할 수 없습니다.3.141과 같이 소수 세 자리까지 입력할 수 있도록 하려면 DecimalPlaces 속성을 3으로 설정하면 됩니다.
다음과 같이 StartTheQuiz() 메서드에 세 개의 줄을 추가합니다.
''' <summary> ''' Start the quiz by filling in all of the problems ''' and starting the timer. ''' </summary> ''' <remarks></remarks> Public Sub StartTheQuiz() ' Fill in the addition problem. addend1 = randomizer.Next(51) addend2 = randomizer.Next(51) plusLeftLabel.Text = addend1.ToString() plusRightLabel.Text = addend2.ToString() sum.Value = 0 ' Start the timer. timeLeft = 30 timeLabel.Text = "30 seconds" Timer1.Start() End Sub
/// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); sum.Value = 0; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start(); }
이제 퀴즈를 시작하면 timeLeft int(Integer)가 30으로 설정되고 timeLabel 컨트롤의 Text 속성이 30초로 변경됩니다.그런 다음 Timer 컨트롤의 Start() 메서드가 호출되어 카운트다운을 시작합니다.이때 답을 확인하지는 않습니다. 답 확인은 나중에 수행됩니다.
프로그램을 저장하고 실행합니다.시작 단추를 클릭하면 타이머가 카운트다운을 시작해야 합니다.시간이 다 되면 퀴즈가 종료되고 답이 표시됩니다.다음 그림에서는 진행 중인 퀴즈를 보여 줍니다.
진행 중인 수학 퀴즈
계속하거나 검토하려면
다음 자습서 단계로 이동하려면 4단계: CheckTheAnswer() 메서드 추가를 참조하십시오.
이전 자습서 단계로 돌아가려면 2단계: 난수 더하기 문제 만들기를 참조하십시오.