Atividade 11 - Máquinas de estados e função KeyPressed()

A proposta da atividade é reimplementar a aplicação desenvolvida em sala, que utiliza máquina de estados para fazer imagens serem mostradas de acordo com teclas pressionadas.

Nessa aplicação, utilizaremos três bitmaps do Mário:


De início, defini variáveis PImage para guardar as respectivas imagens. Após isso criei três variáveis que representarão os três estados do Mario, sendo 1 para parado, 2 para andando e 3 para martelando. Criei também uma variável para guardar o estado atual do Mário, uma para guardar o tempo e outra para saber quando a tecla está pressionada (que de inicial recebe false).

Chegou a hora de tratarmos os estados, para isso criei uma função para processá-los. Nela verifico se o estado atual é 2 ou 3, caso seja, o tempo aumenta incrementa mais 1. Para voltar ao estado parado após determinado tempo, crio duas condições para checar isso. Na primeira verifico se o tempo é maior que 30 e se o estado é andando. Caso seja, o estado atual volta a ser parado, e o tempo é zerado. Na segunda condição fiz o mesmo, porém com o estado martelando, e o tempo maior que 60.

Crio outra função para mostrar as imagens de cada estado, e ela recebe como parâmetro o estado atual. Nela crio três condições para saber qual estado ela está, e dentro de cada uma mostro a imagem referente ao estado.

Após isso, basta chamar as funções criadas no evento draw().

Por último, para verificar o pressionar dos botões, utilizei a função keyPressed(). Essa função verifica se alguma tecla é pressionada, se assemelhando muito com a variável keyPressed, porém esta é uma variável booleana que retorna verdadeiro ou falso, diferente da função que executa um bloco de códigos caso alguma tecla seja pressionada. Outra diferença é que a função só é chamada uma vez, diferente da variável, que recebe direto verdadeiro caso você segure alguma tecla por exemplo.

Dentro da função, verifico dentro de uma condição se a tecla left foi pressionada, utilizando a variável keyCode, e verifico também se a variável de verificação que criei no início é igual a false. Caso sejam, o estado atual recebe andando e a variável de verificação recebe true.
Faço o mesmo para saber se a tecla espaço foi pressionada, mudando o estado para martelando. Nesse caso utilizo a variável key ao invés da keyCode, por se tratar de um caractere ASCII.

Após isso crio a função keyReleased() para quando uma tecla deixar de ser pressionada, a variável de verificação volte a ser false.

Resultado final


Para baixar o código do projeto clique aqui

Comentários

Postagens mais visitadas deste blog

Atividade 16 - Polígono regular

Atividade 15 - Transição entre Imagens

Atividade 7 - Adaptive Logo