quarta-feira, 19 de março de 2014

Pong - Mouse


Dando continuação ao projeto de fazer o pong, segue o código de um jogo de 1 player. Por enquanto mais se assemelha a um squash

// Horizontal
int bolaX = 200; //posição da elipse no eixo X
int dX = 10; // coeficiente de movimentação da elipse no eixo X
int dXoriginal = dX;

//Vertical
int bolaY = 200;
int dY = -10;
int dYoriginal = dY;

//paddle Mouse
int posXPaddle = 5;
int topoYPaddle;
int fundoYPaddle;
int alturaPaddle = 100;
int larguraPaddle = 20;

// Tela
int larguraTela = 800;
int alturaTela = 600;

// Game State
boolean derrota;

void setup()
{
     size(larguraTela,alturaTela);
}

void draw()
{
  topoYPaddle = mouseY;
  fundoYPaddle = mouseY + alturaPaddle;
  background(0);
  rect(posXPaddle, mouseY,larguraPaddle,alturaPaddle);
  ellipse(bolaX,bolaY,20,20);
   
  bolaX += dX;
  bolaY += dY;
 
  detectarColisao();
  detectarCenario();
}

void detectarColisao()
{
 if(bolaX - 20 <= posXPaddle + larguraPaddle/2 && bolaX - 20 >= posXPaddle - larguraPaddle/2)
  {
    //println("Detectou X");
    if(bolaY >= topoYPaddle && bolaY <= fundoYPaddle)
    {
       dX += dX/10;
       dX *= -1;
      calcularAngulo();
    }
  }
}

void detectarCenario()
{
  if(bolaY >= 590 || bolaY <= 10)
  {
   inversoesY++;
   dY *= -1;
  }
}

void calcularAngulo()
{
  float rand = random(3,8);
  if(bolaY >= topoYPaddle && bolaY <= topoYPaddle + alturaPaddle/2)
   {
     dY -= rand;
     //println(rand);
   }
 else
 {
   dY += rand;
   //println("Bateu baixo " + rand);
 }
}
}

Funções:
calcularAngulo: Detecta em qual posição do paddle a bola bateu gerando um efeito diferente de acordo com a posição da colisão.
detectarCenario: Vê se a bolinha rebateu na parede.
detectarColisão: Detecta se a bolinha está colidindo com a raquete

Nenhum comentário:

Postar um comentário