Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
Adicione referências de rótulo ao seu formulário usando o código a seguir em
Form1.csouForm1.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.
Modifique seu manipulador de eventos Click em
Form1.csouForm1.vbpara usar a nova variável de referênciafirstClicked. Remova a última instrução no método manipulador de eventoslabel1_Click()(clickedLabel.ForeColor = Color.Black;) e substitua-a pela instruçãoifda 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; } } }
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.
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.
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.
Selecione o ícone Timer1 para selecionar o temporizador. Na janela Propriedades, selecione o botão Propriedades para exibir as propriedades.
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.
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.csouForm1.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,
firstClickedesecondClicked, para tornar os ícones dos dois rótulos que o jogador escolheu invisíveis novamente. - Ele redefine as variáveis de referência
firstClickedesecondClickedparanullem C# eNothingno Visual Basic.
Vá para o editor de código e adicione código à parte superior e inferior do método manipulador de eventos
label1_Click()emForm1.csouForm1.vb. Este código verificará se o temporizador está ativado, definirá a variável de referênciasecondClickede iniciará o temporizador. O método manipulador de eventoslabel1_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
secondClickedpara 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ênciafirstClickedesecondClicked. 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.
- 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.