Поделиться через


Шаг 7. Отмена исчезновения пар значков

Игра работает правильно, пока игрок выбирает только пары значков, которые не совпадают.Но давайте посмотрим, что произойдет, когда игрок выберет совпадающую пару.Вместо того чтобы значки исчезали благодаря включению таймера (с помощью метода Start()), игра должна сбрасываться и больше не отслеживать метки с помощью ссылочных переменных firstClicked и secondClicked. Но цвета двух меток, которые были выбраны, не должны сбрасываться.

Отмена исчезновения пар значков

  1. Добавьте следующий оператор if в конец кода метода обработчика событий label_Click() перед оператором, который запускает таймер.Внимательно просмотрите код при добавлении его в программу.Рассмотрим, как работает код.

            ' 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 clicked two matching icons, keep them  
            ' black and reset firstClicked and secondClicked  
            ' so the player can click another icon 
            If firstClicked.Text = secondClicked.Text Then
                firstClicked = Nothing
                secondClicked = Nothing 
                Exit Sub 
            End If 
    
            ' 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
    
    // 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 проверяет, совпадает ли значок в первой метке, которую выбрал игрок, со значком во второй метке.Если значки совпадают, программа выполняет три оператора, которые расположены между фигурными скобками в C# или внутри оператора if в Visual Basic.Первые два оператора сбрасывают ссылочные переменные firstClicked и secondClicked, чтобы они больше не отслеживали какие-либо метки. (Возможно, вы узнали эти два оператора из обработчика событий Tick таймера.) Третий оператор — оператор return, который сообщает программе, что требуется пропустить оставшиеся в методе операторы и не выполнять их.

    При программировании в Visual C# вы могли обратить внимание, что в некоторых местах кода используется одиночный знак равенства (=), а в других — двойной знак равенства (==).Рассмотрим, почему в одних местах используется =, а в других — ==.

    Вот хороший пример, показывающий разницу.Внимательно посмотрите на код между скобками в операторе if.

    firstClicked.Text = secondClicked.Text
    
    firstClicked.Text == secondClicked.Text
    

    Затем внимательно посмотрите на первый оператор в блоке кода после оператора if.

    firstClicked = Nothing
    
    firstClicked = null;
    

    Первый из этих двух операторов проверяет, являются ли два значка одинаковыми.Поскольку два значения сравниваются, программа Visual C# использует оператор равенства ==.Второй оператор, на самом деле, изменяет значение (это называется присваивание), задавая ссылочной переменной firstClicked значение null, чтобы ее сбросить.Вот почему здесь используется оператор присваивания =.В Visual C# для задания значений используется оператор =, а оператор == используется для их сравнения.В Visual Basic оператор = используется для присваивания значений переменным и для сравнения.

  2. Сохраните и запустите программу, а затем начните выбирать значки в форме.Если вы выбрали пару, которая не совпадает, произойдет событие таймера Tick и оба значка исчезнут.Если вы выбрали пару, которая совпадает, выполнится новый оператор if, а оператор return укажет методу пропустить код, запускающий таймер, чтобы значки остались видимыми, как показано на следующем рисунке.

    Игра "Подбери пару!" с видимыми парами значков

    Игра, которую вы создадите в этом учебном руководстве

Продолжить или повторить пройденный материал