quarta-feira, 19 de março de 2014

Pong com 2 players

Para finalizar eu fiz algumas mudanças para poder acrescentar um segundo player jogo.

// 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;
int inversoes = 0;

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

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

//paddle Teclado
int larguraPaddleT = 20;
int alturaPaddleT = 100;
int fundoYPaddleT;
int topoYPaddleT;
int posXPaddleT = 800 - 25;
int posYPaddleT = 300;
int velY = 5;

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

// Game State
boolean derrota;

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

void draw()
{
  posYPaddleT = velY;
  keyPressed();
  topoYPaddleT = posYPaddleT;
  fundoYPaddleT = posYPaddleT + alturaPaddleT;
  topoYPaddle = mouseY;
  fundoYPaddle = mouseY + alturaPaddle;
  background(0);
  rect(posXPaddle, mouseY,larguraPaddle,alturaPaddle);
  rect(posXPaddleT, posYPaddleT, larguraPaddleT, alturaPaddleT);
  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();
    }
  }

 if(bolaX - 20 >= posXPaddleT)
  {
    //println("Detectou X");
    if(bolaY >= topoYPaddleT && bolaY <= fundoYPaddleT)
    {
       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);
 }
}

void keyPressed() {
  if (key == CODED) {
    if (keyCode == UP) {
      velY += -5;
    } else if (keyCode == DOWN) {
      velY += 5;
    }
    else
    {
      velY = velY;
    }
  }
}

Funções:
keyPressed: Detecta se as setas para cima ou para baixo estão apertadas
detectarColisao: Acrescentei o condicional para detectar o paddle do teclado.

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

Criando um Padle

O projeto da disciplina é desenvolver um Pong utilizando o processing. Neste código explico como fiz o Paddle.

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

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

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

void draw()
{
background(0);  //redesenha o fundo, eliminando assim a posição anterior do paddle da tela
rect(posXPaddle, mouseY,larguraPaddle,alturaPaddle); // Desenha o paddle que recebe como parametro para a posição Y um input da posição Y do mouse.
}