Compartilhar via


Tutorial: Exibir uma mensagem no aplicativo WinForms do jogo correspondente

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á a:

  • Manter os pares visíveis.
  • Verifique se um jogador ganhou.
  • Experimente outros recursos.

Pré-requisitos

Este tutorial baseia-se nestes tutoriais anteriores:

  1. Criar um aplicativo de jogo correspondente
  2. Adicionar ícones ao seu jogo correspondente
  3. Adicionar um temporizador em seu jogo correspondente

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

A instrução if verifica se o ícone no primeiro rótulo escolhido pelo player é o mesmo que o ícone no segundo rótulo. Se os ícones forem os mesmos, 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 controlam mais nenhuma das etiquetas. 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 quadrados no formulário.

Captura de tela do Jogo de Correspondência que você cria neste 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 deve 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 em C# ou 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 corresponderem, o ícone permanecerá invisível, e o jogador ainda não terá correspondido a 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 correspondidos. 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 o programa verifica se há um vencedor imediatamente após ele mostrar o segundo ícone escolhido pelo jogador. Procure a linha em que você define a cor do segundo ícone escolhido e, em seguida, chame o método CheckForWinner() logo após essa linha.

  1. Salve e execute o programa. Jogue e combine todos os ícones. Quando você ganha, o programa exibe uma mensagem de parabenização.

    Captura de tela que mostra o Jogo de Correspondência com uma 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 escolhidos.

    Tente observar a propriedade ForeColor do rótulo.

  • Adicione um temporizador de jogo que acompanha quanto tempo leva para o jogador ganhar.

    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, consulte Reproduzir sons no aplicativo do Windows Forms (C#) ou Como reproduzir áudio no Visual Basic.

  • Torne o jogo mais difícil, tornando o tabuleiro maior.

    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 estiver muito lento para responder.

Próximas etapas

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

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

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