quinta-feira, 19 de novembro de 2015

Pong!

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