Utilizando o teclado

Nesta lição veremos como utilizar a entrada do teclado nos programas. Para isso, usaremos os eventos do allegro. Como já de costume das lições anteriores, o código é mostrado e entrão explicado por partes. Caso alguma parte não tenha sida explicada, provavelmente é porque ela já tenha sido explicada antes, então recomendo voltar algumas lições para aprender bem as partes anteriores.

Este programa abre uma janela, e fica esperando o usuário digitar uma tecla. Caso ele digite as teclas relativas às setas para cima, baixo, esquerda ou direita, um texto colorido aparece na tela enquanto a tecla está sendo pressionada. Caso a tecla ESC for pressionada, ou o usuário clicar para fechar a janela, o programa é encerrado.


					
			

Na linha 19 declaramos a função inicializar(). Esta função será utilizada lá dentro do main(), e ela retorna 0 caso alguma das diversas funções de inicialização do programa falhar, ou 1 caso chegue ao fim com sucesso. Na linha 77 o main verifica as inicializações através desta função. Este processo foi feito por questões de organização de código.

al_install_keyboard()

Na linha 38 chamamos a função al_install_keyboard(), que permite a captura das teclas digitadas no teclado através de eventos.

al_get_keyboard_event_source()

Na linha 66 chamamos a função al_get_keyboard_event_source() receber os eventos do teclado, e usamos o mesmo na função al_register_event_source() para registrar os eventos vindos do teclado na fila de eventos.

ALLEGRO_EVENT_KEY_DOWN

Na linha 90 testamos se o tipo de evento capturado é o ALLEGRO_EVENT_KEY_DOWN, que é o tipo de evento disparado quando é detectado o ato pressionar de uma tecla.

.keyboard.keycode

Na linha 92 fazemos um switch para verificar o valor do campo .keyboard.keycode. Como já foi dito anteriormente, a variável ALLEGRO_EVENT é uma struct com diversos campos. E o campo .keyboard.keycode, em caso de disparo de um evento relativo a uma tecla, possuirá um código referente a qual tecla foi pressionada. Consulte a referência para saber sobre os possíveis keycodes.

Nas linhas 94, 98, 102 e 106 verificamos se as teclas pressionadas são as setas para cima, baixo, esquerda e direita, respectivamente. Em cada caso colocamos um valor arbitrário na variável tecla, que será verificado mais adiante.

ALLEGRO_EVENT_KEY_UP

Na linha 116 verificamos se o evento disparado foi ALLEGRO_EVENT_KEY_UP, que é o evento relacionado ao soltar uma tecla. Em caso verdadeiro, colocamos o valor tecla=5. Este valor vai servir para na parte do código que mostra o texto, o programa saber que é para limpar o conteúdo da tela.

Na linha 120 testamos se o usuário clico no botão de fechar a janela, se sim, colocamos a flag sair=1. Isto fará com que o programa feche na próxima iteração do loop principal (linha 83).

Na linha 126 testamos se tecla!=0. Caso seja, significa que desde a última iteração do loop principal, alguma tecla foi pressionada ou solta. Isto significa que temos que atualizar a tela.

Começamos limpando a tela na linha 127, para então verificar com o switch da linha 130 o valor da tecla. Caso os valores sejam de 1 a 4 significa que o usuário pressionou alguma seta, conforme visto acima. Neste caso, usamos a função al_draw_text para escrever a mensagem na tela. Cada mensagem será de uma cor diferente, todas no centro da tela, com a fonte definida na linha 51.

Como no switch não temos nenhum caso para tecla==5 significa que o progrma apenas limpará a tela (linha 127) sem mostrar nenhum texto.

Ao após escrever o texto, atribuímos tecla=0 para dizer ao programa que não há mais o que atualizar, logo, na próxima vez que o programa chegar na linha 126, se nenhum evento de captura de tecla tiver sido disparado antes, nada mais será escrito.

Download dos arquivos

Outros links