Pular para o conteúdo principal

Tarefa 9 - Pong

9. Reimplementar o jogo Pong para um jogador empregando a função keyPressed() e comparar o uso da mesma em relação ao emprego original da variável de sistema keyPressed.

int bastaoYD = 0;
int bolaX = 40;
int bolaY = 300;
int dX = 3;
int dY = 3;

void setup() {
  size(600, 600);
}

void draw() {
  background(0);

  rect(570, bastaoYD, 20, 100);
  ellipse(bolaX, bolaY, 20, 20);

  bolaX += dX;
  bolaY += dY;

  if ( bastaoYD >= 500) {
    bastaoYD = 500;
  } else if ( bastaoYD <= 0) {
    bastaoYD = 0;
  }

  if (bolaY <= 10 || bolaY >= 590) {
    dY = -dY;
  } else if (bolaX <= 10 || bolaX >= 590) {
    dX = -dX;
  }
  
  if ((bolaX >= 560) && (bolaY >= bastaoYD) && (bolaY <= bastaoYD +100)) {
    dX = -dX;
  }
}

void keyPressed() {
  if (keyCode == DOWN) {
    bastaoYD += 9;
  } else if (keyCode == UP) {
    bastaoYD -= 9;
  }

}


A função keyPressed() é ativada toda vez que uma tecla é pressionada, ela funciona com checagens dentro da função para definir comandos e para estas checagens, o Processing dispõe de variáveis reservadas para cada situação. Duas delas são a key e a keyCode, que funcionam para caracteres comuns e caracteres especiais, como as setas do teclado, respectivamente.

Quando utilizamos essa função no jogo Pong, ocorre um atraso quando o usuário busca por muitas ações ao mesmo tempo. Isso acontece porque a função é ativada fora do draw, então não acompanha sua velocidade de execução ou seu frameRate, assim, a bolinha é atualizada muito mais rápido do que o movimento do bastão pelas teclas escolhidas no teclado.

Observado isso, podemos concluir, que a função keyPressed() funciona bem para poucas ativações seguidas de teclas, mas não para um jogo que exige uma movimentação mais elaborada.


Já a variável keyPressed serve para guardar apenas um valor booleano, true ou false, sendo assim ela precisa ser usada dentro da função de loop draw e dentro de uma estrutura de checagem como o if-else. O restante funciona exatamente igual a função keyPressed(), usando as variáveis reservadas do Processing para descobrir qual tecla foi pressionada. Assim, a variável keyPressed quando colocada dentro do draw tem uma taxa de atualização mais realista em relação ao restante da aplicação, pegando mais movimentos do personagem no caso de um jogo como este. 


Comentários

Postagens mais visitadas deste blog

Tarefa 7 - Proporção áurea e Fibonacci

7. Apresentar e discutir a relação estabelecida entre a sequência de Fibonacci e a noção de proporção áurea. A proporção áurea ou número de ouro, é uma constante real algébrica irracional em formato de dizima, ou apenas, um número que simplesmente é encontrado na forma de diferentes coisas no nosso mundo, como os filamentos de folha, girassóis, conchas de caracóis, furacões, ondas no mar e até nas proporções do corpo humano. Uma forma gráfica de obter a proporção é partir de um quadrado, dividindo-o em duas partes, dessa vez iguais, usando uma reta vertical central e usar a parte direita para conseguir uma diagonal que começa no canto inferior esquerdo e termina no superior direito dessa mesma parte, gira-se esta diagonal até a base da figura e constrói-se um retângulo áureo a partir dessa nova largura. Leonardo de Pisa ou Fibonacci foi o primeiro grande matemático europeu da Idade Média e durante seus estudos, descobriu propriedades únicas de uma sequência específica de ...