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


Шаг 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 таймера.) Третий оператор — оператор возврата, который сообщает программе, что требуется пропустить и не выполнять оставшиеся в методе операторы.

    При программировании в 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, а оператор возврата укажет методу пропустить код, запускающий таймер, чтобы значки остались видимыми, как показано на следующем рисунке.

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

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

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