top of page

12° Atividade - Aula 13: Revisitando Provas Anteriores

  • Foto do escritor: Antonio Lucas
    Antonio Lucas
  • 23 de abr. de 2019
  • 2 min de leitura

Essa é uma atividade extra. Durante a aula de revisão, nos foi mostrada a resolução passo a passo de uma prova de semestres anteriores. Ao final, nos foi dada outra prova para ser feita como atividade e o enunciado dela é o seguinte.

O primeiro passo é dividir o enunciado em partes.

  • Temos um personagem com sprites parado, para esquerda e para a direita.

  • Um inimigo formado por formas geométricas que deve ter a mesma altura do personagem.

  • Ambos tem a mesma posição no eixo X, mas iniciam em posições opostas no eixo Y.

  • Sempre que o personagem andar, ele tem o deslocamento na posição desejada e um pequeno deslocamento para baixo, além de não poder dar dois passos na mesma direção.

  • O inimigo se desloca com velocidade constante para cima.

  • O jogo acaba quando os dois colidirem e ganha quem percorreu a maior distância vertical.


Com essas informações vamos começar com o personagem. Utilizei o sprite ao lado para lhe representar. Criei duas variáveis booleanas para guardar se a posição do personagem, uma para a esquerda, uma para a direita. No início do código ele está na posição parado, significando que ambas as vaiáveis são falsas. Com isso, já temos também o modo de alterar o sprite atual de acordo com as variáveis booleanas.

Para a movimentação, utilizei a variável keyPressed para verificar se uma tecla tinha sido pressionada e a variável keyCode para saber se a tecla pressionada era a seta para a esquerda ou direita. Para impedir o personagem de dar dois passos seguidos na mesma direção, novamente utilizei as booleanas de direção. Caso a seta pressionada fosse esquerda e a variável esquerda fosse verdadeira, o personagem não andaria novamente, andaria apenas se a tecla direita fosse pressionada.


Para o Robô, precisamos usar uma série de formas 2D. Para cumprir os pré-requisitos da questão, começamos com os círculos, já que o triângulo tem que ficar levemente por cima deles, logo em seguida, fazemos o triângulo e o retângulo. Levando em conta que nosso personagem tem 44x57, precisamos fazer com que essas formas tenham o mesmo tamanho. Para isso, os círculos tem 22 pixels de diâmetro e começão a 11 pixels da base, já o retângulo, tem 44x20 e sua origem em Y(canto superior esquerdo) é 46 pixels acima do centro do círculo. Por fim, passamos os parâmetros para o triângulo para que ele encoste no retângulo e sobreponha um pouco do círculo.

Para seu movimento, a cada ciclo do draw(), sua posição sobe um pouco.


Por fim, temos o código deus(). Para guardar as distâncias percorridas por cada um dos objetos, criei duas variáveis (disR e disP), elas são atualizadas a cada ciclo do draw() de acordo com o movimento dos objetos. No deus(), uso os dois valores para verificar o momento que ocorre a colisão entre os objetos e poder determinar o vencedor, tudo isso atrás de um if() contendo disR+disP+114)>=height, onde a soma representa a distância percorrida pelos dois objetos mais suas alturas e verifica se o seu resultado é maior que a altura da tela. Se essa equação for verdadeira, significa que houve a colisão, então o jogo pode parar e definir o ganhador de acordo com as distâncias.

O resultado final é o gif acima.

 
 
 

Comments


© 2019 Mami

Faça parte da nossa lista de emails

bottom of page