Partilhar via


Tutorial: Adicionar variáveis de referência e um controle de temporizador ao seu aplicativo WinForms de jogo correspondente

Nesta série de quatro tutoriais, você constrói um jogo de correspondência, onde o jogador combina pares de ícones ocultos.

Seu programa de Jogo de Correspondência precisa rastrear quais controles de Etiqueta o jogador escolhe. Depois que um jogador escolhe o primeiro rótulo, o programa deve mostrar o ícone. Depois que o segundo rótulo é escolhido, o programa deve exibir ambos os ícones por um breve período. Em seguida, oculta os dois ícones.

O seu programa controla qual Rótulo você escolhe primeiro e segundo, utilizando as variáveis de referência e. Um temporizador oculta os ícones e controla por quanto tempo mostrar os ícones

  • Adicione referências de rótulo.
  • Adicione um temporizador.

Pré-requisitos

Este tutorial baseia-se em tutoriais anteriores, Criar um aplicativo de jogo correspondente e Adicionar ícones ao seu jogo correspondente. Conclua esses tutoriais primeiro.

Adicionar referências de rótulo

Nesta seção, você adicionará duas variáveis de referência ao seu código. Eles controlam ou fazem referência a objetos Label.

  1. Adicione referências de rótulo ao seu formulário usando o código a seguir em Form1.cs ou Form1.vb.

    public partial class Form1 : Form
    {
        // firstClicked points to the first Label control 
        // that the player clicks, but it will be null 
        // if the player hasn't clicked a label yet
        Label firstClicked = null;
    
        // secondClicked points to the second Label control 
        // that the player clicks
        Label secondClicked = null;
    

Se estiveres a usar C#, coloca o código após a chaveta de abertura e logo após a declaração da classe (public partial class Form1 : Form). Se você estiver usando o Visual Basic, coloque o código logo após a declaração de classe (Public Class Form1).

Essas instruções não fazem os controles Label aparecerem no formulário porque não há a palavra-chave new. Quando o programa é iniciado, firstClicked e secondClicked são definidos como null para C# ou Nothing para Visual Basic.

  1. Modifique seu manipulador de eventos Click em Form1.cs ou Form1.vb para usar a nova variável de referência firstClicked. Remova a última instrução no método manipulador de eventos label1_Click() (clickedLabel.ForeColor = Color.Black;) e substitua-a pela instrução if da seguinte maneira.

    /// <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 label1_Click(object sender, EventArgs e)
    {
        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;
            }
        }
    }
    

  1. Salve e execute seu programa. Escolha um dos controles de rótulo e seu ícone será exibido. Escolha o próximo controle de rótulo e observe que nada acontece.

    Captura de tela mostra o Jogo de Correspondência mostrando um ícone.

    Apenas o primeiro ícone escolhido é exibido. Os outros ícones são invisíveis.

O programa já está acompanhando o primeiro rótulo que o jogador escolheu. O firstClicked de referência não é null em C# ou Nothing no Visual Basic. Quando a instrução if verifica que firstClicked não é igual a (null ou Nothing), executa as instruções.

Adicionar um temporizador

O aplicativo Jogo de Correspondência usa um controle de Timer. Um temporizador espera e, em seguida, dispara um evento, conhecido como tick. Um temporizador pode iniciar uma ação ou repeti-la regularmente.

No seu programa, o temporizador permite que um jogador escolha dois ícones. Se os ícones não corresponderem, ele ocultará os dois ícones novamente após um curto período de tempo.

  1. Selecione a guia Caixa de Ferramentas, na categoria Componentes, faça duplo clique ou arraste o componente Timer para o formulário. O ícone do temporizador, chamado timer1, aparece em um espaço abaixo do formulário.

    Captura de tela mostra o ícone do temporizador abaixo do formulário.

  2. Selecione o ícone Timer1 para selecionar o temporizador. Na janela Propriedades, selecione o botão Propriedades para exibir as propriedades.

  3. Defina a propriedade Interval como 750, que é 750 milissegundos.

    A propriedade Intervalo informa ao temporizador quanto tempo esperar entre os ticks , quando dispara o seu evento Tick. Seu programa chama o método Start() para iniciar o temporizador depois que o player escolhe o segundo rótulo.

  4. Escolha o ícone de controlo do temporizador e, em seguida, prima Enterou faça duplo clique no temporizador. A IDE adiciona um manipulador de eventos Tick vazio ao Form1.cs ou Form1.vb. Substitua o código pelo código a seguir.

    /// <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;
    }
    

O manipulador de eventos Tick faz três coisas:

  • Ele garante que o temporizador não esteja em execução chamando o método Stop().
  • Ele usa duas variáveis de referência, firstClicked e secondClicked, para tornar os ícones dos dois rótulos que o jogador escolheu invisíveis novamente.
  • Ele redefine as variáveis de referência firstClicked e secondClicked para null em C# e Nothing no Visual Basic.
  1. Vá para o editor de código e adicione código à parte superior e inferior do método manipulador de eventos label1_Click() em Form1.cs ou Form1.vb. Este código verificará se o temporizador está ativado, definirá a variável de referência secondClicked e iniciará o temporizador. O método manipulador de eventos label1_Click() agora tem a seguinte aparência:

    /// <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 label1_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();
        }
    }
    

  • O código na parte superior do método verifica se o temporizador foi iniciado verificando o valor da propriedade Enabled. Se o jogador escolher o primeiro e o segundo controles de rótulo e o temporizador for iniciado, escolher um terceiro rótulo não fará nada.
  • O código na parte inferior do método define a variável de referência secondClicked para controlar o segundo controle Label. Em seguida, ele define a cor do ícone do rótulo como preto para torná-lo visível. Em seguida, inicia o temporizador em modo de única execução, de modo que espera 750 milissegundos e, depois, dispara um único tick. O manipulador de eventos Tick do temporizador oculta os dois ícones e redefine as variáveis de referência firstClicked e secondClicked. O formulário está pronto para o jogador escolher outro par de ícones.

Observação

Se você copiar e colar o bloco de código label1_Click() em vez de inserir o código manualmente, certifique-se de substituir o código label1_Click() existente. Caso contrário, você acabará com um bloco de código duplicado.

  1. Salve e execute seu programa. Selecione um quadrado e o ícone fica visível. Escolha outro quadrado. O ícone aparece brevemente e, em seguida, ambos os ícones desaparecem.

Seu programa agora mantém o controle do primeiro e segundo ícones que você escolher. Ele usa o temporizador para pausar antes de fazer os ícones desaparecerem.

Próximos passos

Avance para o próximo tutorial para saber como terminar o seu Jogo de Correspondência.