Tutorial: Exibir uma mensagem no aplicativo WinForms do jogo de correspondência

Nesta série de quatro tutoriais, você cria um jogo da memória em que o jogador encontra pares de ícones ocultos.

Neste tutorial, você revisará seu Jogo de Correspondência para manter os pares correspondentes visíveis e exibir uma mensagem de parabéns quando um jogador ganhar.

Neste tutorial, você aprenderá como:

  • Manter os pares visíveis.
  • Verificar se um jogador ganhou.
  • Experimentar outros recursos.

Pré-requisitos

Este tutorial se baseia nestes tutoriais anteriores:

  1. Criar um aplicativo de jogo da memória
  2. Adicionar ícones ao seu jogo da memória
  3. Adicionar um temporizador no seu jogo da memória

Manter os pares visíveis

Quando um jogador corresponde um par, o jogo deve ser redefinido para que ele não acompanhe mais os rótulos que usam as variáveis de referência firstClicked e secondClicked. Ele não deve redefinir as cores para os dois rótulos que foram correspondidos. Esses rótulos continuam a ser exibidos.

  1. Adicione a instrução if a seguir ao método do manipulador de eventos label_Click(). Coloque-o perto do final do código logo acima da instrução em que você inicia o temporizador.
        // 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();
    }
}

Importante

Use o controle da linguagem de programação no canto superior direito desta página para exibir os snippets de código C# ou do Visual Basic.

Programming language control for Microsoft Learn

A instrução if verifica se o ícone no primeiro rótulo que o jogador escolhe é igual ao ícone no segundo rótulo. Se os ícones forem iguais, o programa executará suas três instruções. As duas primeiras instruções redefinem as variáveis de referência firstClicked e secondClicked. Eles não acompanham mais nenhum dos rótulos. A terceira instrução é uma instrução return, que ignora o restante das instruções no método sem executá-las.

  1. Execute o programa e, em seguida, comece a escolher os quadrados no formulário.

Screenshot of the Matching Game that you create in this tutorial.

Se você escolher um par que não corresponda, o evento Tick do temporizador será disparado. Ambos os ícones desaparecem.

Se você escolher um par correspondente, a nova instrução if será executada. A instrução return faz com que o método ignore o código que inicia o temporizador. Os ícones permanecem visíveis.

Verificar se um jogador ganhou

Você criou um jogo divertido. Depois que um jogador ganhar, o jogo deverá terminar. Esta seção adiciona um método para verificar se o jogador ganhou.

  1. Adicione um método CheckForWinner() à parte inferior do código, abaixo do manipulador de eventos timer1_Tick().
/// <summary>
/// Check every icon to see if it is matched, by 
/// comparing its foreground color to its background color. 
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
    // Go through all of the labels in the TableLayoutPanel, 
    // checking each one to see if its icon is matched
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        Label iconLabel = control as Label;

        if (iconLabel != null) 
        {
            if (iconLabel.ForeColor == iconLabel.BackColor)
                return;
        }
    }

    // If the loop didn’t return, it didn't find
    // any unmatched icons
    // That means the user won. Show a message and close the form
    MessageBox.Show("You matched all the icons!", "Congratulations");
    Close();
}

O método usa outro loop foreach no C# ou o loop For Each no Visual Basic para percorrer cada rótulo no TableLayoutPanel. Ele verifica a cor do ícone de cada rótulo para verificar se ele corresponde à tela de fundo. Se as cores forem iguais, o ícone permanecerá invisível e o jogador não combinou todos os ícones restantes.

Nesse caso, o programa usa uma instrução return para ignorar o restante do método. Se o loop passar por todos os rótulos sem executar a instrução return, isso significa que todos os ícones no formulário foram combinados. O programa mostra uma MessageBox para parabenizar o jogador ganhador e, em seguida, chama o método Close() para encerrar o jogo.

  1. Em seguida, o manipulador de eventos Click do rótulo chama o novo método CheckForWinner().
// 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;

// Check to see if the player won
CheckForWinner();

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

Verifique se seu programa busca um ganhador imediatamente depois que ele mostra o segundo ícone que o jogador escolhe. Procure a linha onde você define a cor do segundo ícone escolhido e chame o método CheckForWinner() logo depois dessa linha.

  1. Salve e execute o programa. Jogue o jogo e combine todos os ícones. Quando você ganha, o programa exibe uma mensagem de parabéns.

    Screenshot shows the Matching game with a MessageBox.

    Depois de selecionar OK, o Jogo de Correspondência é fechado.

Experimentar outros recursos

Seu Jogo de Correspondência está completo. Você pode adicionar mais recursos para tornar este jogo mais desafiador e interessante. Aqui estão algumas opções.

  • Substitua os ícones e as cores pelos de sua preferência.

    Tente observar a propriedade ForeColor do rótulo.

  • Adicione um temporizador de jogo que controla em quanto tempo o jogador ganha uma partida.

    Você pode adicionar um rótulo para exibir o tempo decorrido no formulário. Coloque-o acima de TableLayoutPanel. Adicione outro temporizador ao formulário para acompanhar a hora. Use código para iniciar o temporizador quando o jogador começar o jogo e para interromper o temporizador depois que os dois últimos ícones forem encontrados.

  • Adicione um som para quando o jogador encontrar um par, outro som para quando o jogador selecionar dois ícones que são diferentes e um terceiro som para quando o programa ocultar os ícones novamente.

    Para reproduzir sons, você pode usar o namespace System.Media. Para obter mais informações, confira Reproduzir sons no aplicativo Windows Forms (C#) ou Como reproduzir áudio no Visual Basic.

  • Torne o jogo mais difícil aumentando o tamanho do tabuleiro.

    Você precisará fazer mais do que apenas adicionar linhas e colunas ao TableLayoutPanel. Você também precisa considerar o número de ícones criados.

  • Torne o jogo mais desafiador ocultando o primeiro ícone se o jogador demorar muito para responder.

Próximas etapas

Parabéns! Você concluiu esta série de tutoriais. Você concluiu estas tarefas de programação e design no IDE do Visual Studio:

  • Armazenou objetos, como ícones, em uma lista
  • Usou um loop no C# ou no Visual Basic para iterar por meio de uma lista
  • Manteve controle de estado usando variáveis de referência
  • Criou um manipulador de eventos para responder a eventos para vários objetos
  • Adicionou um temporizador que realiza uma contagem regressiva e dispara um evento

Avance para este artigo para um aprofundamento no Designer de Formulários do Windows.