Partilhar via


Tutorial: Exibir uma mensagem no aplicativo WinForms do jogo correspondente

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

Neste tutorial, revês o teu Jogo de Pareamento para manter os pares combinados visíveis e mostrar uma mensagem de felicitações quando um jogador vencer.

Neste tutorial, você aprenderá a:

  • Mantenha os pares visíveis.
  • Verifique se um jogador ganhou.
  • Experimente outras funcionalidades.

Pré-requisitos

Este tutorial baseia-se nestes tutoriais anteriores:

  1. Criar um aplicativo de jogo correspondente
  2. Adicione ícones ao seu jogo de correspondência
  3. Adicione um temporizador no seu jogo correspondente

Manter os pares visíveis

Quando um jogador constitui um par, o jogo deve reiniciar automaticamente para que deixe de registar quaisquer etiquetas que utilizem as variáveis de referência firstClicked e secondClicked. Ele não deve repor as cores para os dois rótulos correspondidos. Esses rótulos continuam a ser exibidos.

  1. Adicione a seguinte instrução if ao método manipulador de eventos label_Click(). Coloque-o perto do final do código logo acima da instrução onde 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 na primeira etiqueta que o leitor escolhe é o mesmo que o ícone na segunda etiqueta. Se os ícones forem os mesmos, o programa executa suas três instruções. As duas primeiras instruções redefinem as variáveis de referência firstClicked e secondClicked. Eles já não mantêm registo de nenhum dos rótulos. A terceira instrução é uma instrução return, que ignora o resto 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 escolheres um par que não corresponda, o evento Tick do temporizador será activado. 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 ganha, o jogo deve terminar. Esta secção adiciona um método para verificar se o jogador ganhou.

  1. Adicione um método CheckForWinner() na 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 ciclo foreach em C# ou ciclo 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 ao plano de fundo. Caso as cores correspondam, 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 resto 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 um MessageBox para parabenizar o jogador pela vitória e, em seguida, chama o método Close() para terminar o jogo.

  1. Faça com que o manipulador de eventos Click do rótulo chame 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;
}

Certifique-se de que o seu programa verifica se há um vencedor imediatamente após mostrar o segundo ícone que o jogador escolher. Procure a linha onde 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 o jogo e combine todos os ícones. Quando você ganha, o programa exibe uma mensagem de parabéns.

    Captura de tela mostra o jogo de correspondência com uma MessageBox.

    Depois de selecionar OK, o Jogo Correspondente é fechado.

Experimente outras funcionalidades

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

  • Substitua os ícones e cores por aqueles que você escolher.

    Tente ver a propriedade ForeColor do rótulo.

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

    Você pode adicionar um rótulo para exibir o tempo decorrido no formulário. Coloque-o acima do TableLayoutPanel. Adicione outro temporizador ao formulário para controlar o tempo. Use código para iniciar o temporizador quando o jogador iniciar o jogo e pare o temporizador depois de fazer corresponder os dois últimos ícones.

  • Adicione um som quando o jogador encontrar um par, outro som quando descobrir dois ícones que não combinam, e um terceiro som quando o programa voltar a esconder os ícones.

    Para reproduzir sons, você pode usar o namespace System.Media. Para obter mais informações, consulte Reproduzir sons no aplicativo 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 escondendo o primeiro ícone se o jogador for muito lento para responder.

Próximos passos

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

  • Objetos armazenados, como ícones, em uma lista
  • Usou um ciclo em C# ou Visual Basic para percorrer uma lista
  • Controle de estado usando variáveis de referência
  • Criado um manipulador de eventos para responder a eventos para vários objetos
  • Adicionado um temporizador que conta para baixo e dispara um evento

Avance para este artigo para um mergulho profundo no Windows Forms Designer.