Na atividade para casa da aula 10, foi pedido que fizéssemos no Processing um jogo parecido com o clássico jogo Pong, o qual foi um dos primeiros a serem desenvolvidos e foi um dos maiores responsáveis tanto da popularização dos arcades e que tornaram possível o nascimento dos videogames.
Segue abaixo o código com comentários explicando cada parte principal dele. Em seguida, um gif demonstrando o jogo funcionando.
Para este jogo, eu reaproveitei o código de uma outra atividade que foi feita anteriormente em sala de aula que consistia em fazer uma bolinha se mover livremente pela tela e quando se chocasse com os limites da janela ela mudaria de direção.
Tive alguns problemas na determinação da colisão com os paddles, mas ainda assim gostei bastante do resultado.
//coordenadas iniciais da bola
int bolaX = 100;
int bolaY = 150;
//modificadores da trajetória da bola
int dX = 5;
int dY = 5;
//coordenadas iniciais do primeiro paddle
int xP1 = 20;
int yP1 = 120;
//coordenadas iniciais do segundo paddle
int xP2 = 280;
int yP2 = 120;
//raio da bolinha
int raio = 20;
void setup(){
size(320, 240);
}
void draw(){
background(0);
mover();
//aqui é feita a bolinha
ellipse(bolaX, bolaY, raio*2, raio*2);
//aqui são feitos os paddles
rect(xP1, yP1, 20, 80);
rect(xP2, yP2, 20, 80);
//nesta parte, temos a determinação do deslocamento da bola de forma costante, sendo um MRU
bolaX = bolaX + dX;
bolaY = bolaY + dY;
//mudança da direção da bola ao tocar nas bordas
if(bolaX>=300){
dX = -dX;
}
else if(bolaX <10){
dX = -dX;
}
else if(bolaY>=220){
dY = -dY;
}
else if(bolaY<10){
dY = -dY;
}
//mudança na direção da bola ao tocar um dos paddles
if(Colisao(xP1, yP2) || Colisao(xP2, yP2)){
dX = -dX;
dY = -dY;
}
//finalização do jogo quando a bola toca uma das bordas da janela do jogo
if(bolaX > (width-raio)){
gameOver(true);
}
else if(bolaX< raio){
gameOver(false);
}
}
/*função que determina o comportamento da bola quando colidir
com um dos paddles*/
boolean Colisao(int xP, int yP){
if(bolaY >= yP - raio && bolaY <= yP+ 80+raio){
if(bolaX >= xP - raio && bolaX <= xP + 20 + raio){
return true;
}
else
return false;
}
else
return false;
}
//função que movimenta os paddles
void mover(){
if(keyPressed){
if (keyCode == DOWN) {
yP1+=5;
}else if(keyCode == UP){
yP1-=5;
}else if(keyCode == LEFT){
yP2+=5;
}else if(keyCode == RIGHT){
yP2-=5;
}
}
}
//função que termina o jogo, posicionando um texto dizendo qual lado venceu
void gameOver(boolean fimdejogo){
if (fimdejogo){
clear();
text("Esquerda ganhou!", 160, 120);
noLoop();
}
if (!fimdejogo){
clear();
text("Direita ganhou",160,120);
noLoop();
}
}
Nenhum comentário:
Postar um comentário