다음을 통해 공유


3단계: 카운트다운 타이머 추가

시간이 지정된 퀴즈이므로 카운트다운 타이머를 추가합니다.프로그램은 게임이 진행되는 동안 남은 시간(초)을 추적해야 합니다.

카운트다운 타이머를 추가하려면

  1. 이전과 마찬가지로 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;
    
  2. 이제 타이머와 같이 실제로 카운트를 수행하는 기능이 필요합니다.Windows Forms 디자이너로 이동한 후 구성 요소 범주의 도구 상자에서 Timer 컨트롤을 폼으로 끌어서 놓습니다.그러면 Windows Forms 디자이너의 맨 아래에 있는 회색 영역에 이 컨트롤이 표시됩니다.

  3. 방금 추가한 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 사이의 숫자이므로 기본 MinimumMaximum 속성을 각각 0과 100으로 설정된 상태로 둡니다.그러면 사용자가 0에서 100 사이의 숫자만 입력할 수 있습니다.답은 정수일 수만 있기 때문에 DecimalPlaces 속성은 0으로 설정된 상태로 둡니다. 그러면 사용자가 소수를 입력할 수 없습니다.3.141과 같이 소수 세 자리까지 입력할 수 있도록 하려면 DecimalPlaces 속성을 3으로 설정하면 됩니다.

  4. 다음과 같이 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() 메서드가 호출되어 카운트다운을 시작합니다.이때 답을 확인하지는 않습니다. 답 확인은 나중에 수행됩니다.

  5. 프로그램을 저장하고 실행합니다.시작 단추를 클릭하면 타이머가 카운트다운을 시작해야 합니다.시간이 다 되면 퀴즈가 종료되고 답이 표시됩니다.다음 그림에서는 진행 중인 퀴즈를 보여 줍니다.

    진행 중인 수학 퀴즈

    진행 중인 수학 퀴즈

계속하거나 검토하려면