Skip to content

Instantly share code, notes, and snippets.

@edmorais
Last active May 25, 2016 15:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edmorais/b22d7a07a6bfa922e3ebcd0436344b2f to your computer and use it in GitHub Desktop.
Save edmorais/b22d7a07a6bfa922e3ebcd0436344b2f to your computer and use it in GitHub Desktop.
Pequeno jogo de superação de obstáculos. A tecla de espaço faz saltar.
/*_ ___ ___ ___ __ _ __
| | / __|_ _|_ ) \/ |/ /
| |__\__ \| | / / () | / _ \
|____|___/___/___\__/|_\___/
Aula de 23/05/2016:
Pequeno jogo de superação de obstáculos.
Por Eduardo Morais / FBAUP - www.eduardomorais.pt/fbaup/
*/
int base = 500; // coordenadas da linha de base
float y = 500; // coordenada y do jogador
float vel = 0; // velocidade y do jogador
float velObstaculos = 2; // velocidade x dos obstaculos (pixels/frame)
int acel = 20; // aceleração inicial do salto
int[] obstaculos; // array de posições x dos obstáculos
/*
Função setup():
Executada automaticamente no início do programa:
*/
void setup() {
size(600,600);
background(0);
noStroke();
fill(255);
ellipseMode(CENTER);
obstaculos = new int[2]; // temos dois obstáculos
for (int i = 0; i < obstaculos.length; i++) {
// percorremos o array dos obstáculos e atribuimos as posições iniciais
// fora do ecrã (daí entre 1*width e 2* width)
obstaculos[i] = round(random(width, width*2));
}
}
/*
Função draw():
Executada repetidamente a cada 'frame'/fotograma de animação.
*/
void draw() {
// desenhamos o jogador
background(0);
fill(255);
ellipse(width/2, y, 30, 30);
// subtraimos a velocidade à coordenada y do jogador (assim ele sobe)
y = y - vel;
if (y < base) {
// se o valor de y estiver acima da base (em salto)
// reduzimos a velocidade gradualmente
vel -= 0.5;
} else {
// senão mantemos o jogador na base
y = base;
vel = 0;
}
// desenhamos os obstaculos
fill(#FF0000);
for (int i = 0; i < obstaculos.length; i++) {
// percorremos o array dos obstáculos e desenhamos cada um...
rect(obstaculos[i], 400, 30, 100);
// ... e actualizamos a posição, subtraindo o valor da velocidade dos obstaculos
obstaculos[i] -= velObstaculos;
// se os obstaculos tiverem ambos saído pela esquerda do ecrã,
// voltamos a sortear a sua posição:
if (obstaculos[i] < 0) {
obstaculos[i] = round(random(width, width*2));
}
}
}
/*
Função keyPressed():
Executada automaticamente quando largamos numa tecla!
Dá-nos a variável key com a tecla que carregámos.
*/
void keyPressed() {
// se a tecla for espaço e o jogador estiver na posição base
// (isto é, não estiver a meio de um salto)
if (key == ' ' && y == base) {
// atribui à velocidade o valor da aceleração inicial
vel = acel;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment