4
respostas

Não contabiliza os pontos + Oponente nunca erra

Pessoal, meu código está assim, porém, não contabiliza os pontos de nenhum dos dois lados, e a raquete do oponente nunca erra. Alguém poderia me ajudar?

// Variáveis da Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 23;
let raio = diametro / 2;

// Variáveis Velocidade Bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let wRaquete = 10;
let hRaquete = 90;

// Variáveis da Raquete
let xRaquete = 5;
let yRaquete = 150;

let colidiu = false;

// Variáveis Oponente
let xOponente = 585;
let yOponente = 150;
let velocidadeYOponente = 4

// Placar do Jogo
let meuPlacar = 0;
let placarOponente = 0; 

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisaoBordas();
  mostraRaquete ( xRaquete , yRaquete);
  movimentoRaqueteDireita ();
  colisaoRaquete (xRaquete, yRaquete);
  bolinhaNaoFicaPresa ();
  mostraRaquete (xOponente, yOponente); 
  movimentaOponente ();
  colisaoRaquete (xOponente, yOponente);
  placar ();
  marcaPlacar ();

  }

function mostraBolinha() {
  circle (xBolinha, yBolinha, diametro);

}

function movimentaBolinha() {
   xBolinha += velocidadeXBolinha;
   yBolinha += velocidadeYBolinha;
}

function colisaoBordas() {
  if (xBolinha + raio > width ||
    xBolinha - raio < 0) { 
    velocidadeXBolinha *= -1;
  }
  if (yBolinha + raio > height ||
     yBolinha - raio < 0) {
    velocidadeYBolinha *= -1;
}
}

function mostraRaquete (x, y) {
  rect( x, y, wRaquete, hRaquete)
}


function movimentoRaqueteDireita () {
  if (keyIsDown(UP_ARROW)) {
    yRaquete -=10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaquete +=10;
  }
}

function colisaoRaquete (x, y) {
  colidiu = collideRectCircle (x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio);
  if (colidiu) {
    velocidadeXBolinha *= -1;
  }
}

function bolinhaNaoFicaPresa(){
    if (xBolinha - raio < 0){
    xBolinha = 23
    }
}

function movimentaOponente () {
    velocidadeYOponente = yBolinha - yOponente - wRaquete / 2 - 30;
    yOponente += velocidadeYOponente
}

function placar () {
  fill (255)
  text (meuPlacar, 278, 26)
  text (placarOponente, 321, 26)
}

function marcaPlacar (){
  if (xBolinha > 585) {
    meuPlacar += 1;
  }
  if (xBolinha < 10) {
    placarOponente += 1;
  }
}
4 respostas

Oi! Achei uma solução um pouquinho mais simples para os pontos, separei os dois parametros para colisão de borda com o x, e passei a adicionar os pontos. Ficou Assim: ` function verificaColisaoBorda(){ if (xBolinha + raio> width ){ pontosCasa++; console.log(pontosCasa) vX = -1; } if (xBolinha -raio < 0){ pontosFora++; console.log(pontosFora) vX = -1; } if (yBolinha + raio> height || yBolinha - raio < 0){ vY = -1; } } ` Quanto ao oponente, tentei usar a função random(https://p5js.org/reference/#/p5/random) do p5, mas não adiantou muita coisa.

Se você comentar a função bolinhaNaoFicaPresa() vai marcar pontos, aí tem que verificar direitinho essa função depois.

E também mudar no código:

function marcaPlacar (){
  if (xBolinha > 585) {
    meuPlacar += 1;
  }
  if (xBolinha < 10) {
    placarOponente += 1;
  }
}

Onde está 585, colocar 590. Eu parei o movimento da RaqueteOponente para validar que estava marcando pontos para ambos os lados.

Agora sobre o oponente, nunca errar, não joguei o suficiente, tem que ir testando...

Oi, pessoal! Consegui resolver a questão dos pontos, mas ainda estou quebrando cabeça para a questão do oponente nunca errar! O código que coloquei faz com que ele erre por que a raquete não desce até o final da borda, então não tá 100%! Segue código atualizado:

// Variáveis da Bolinha
let xBolinha = 300;
let yBolinha = 220;
let diametro = 23;
let raio = diametro / 2;

// Variáveis Velocidade Bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let wRaquete = 10;
let hRaquete = 90;

// Variáveis da Raquete
let xRaquete = 5;
let yRaquete = 150;

let colidiu = false;

// Variáveis Oponente
let xOponente = 585;
let yOponente = 100;
let velocidadeYOponente = 4

// Placar do Jogo
let meuPlacar = 0;
let placarOponente = 0; 

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisaoBordas();
  mostraRaquete ( xRaquete , yRaquete);
  movimentoRaqueteDireita ();
  colisaoRaquete (xRaquete, yRaquete);
  bolinhaNaoFicaPresa ();
  mostraRaquete (xOponente, yOponente); 
  movimentaOponente ();
  colisaoRaquete (xOponente, yOponente);
  placar ();
  marcaPlacar ();


  }

function mostraBolinha() {
  circle (xBolinha, yBolinha, diametro);

}

function movimentaBolinha() {
   xBolinha += velocidadeXBolinha;
   yBolinha += velocidadeYBolinha ;
}

function colisaoBordas() {
  if (xBolinha + raio > width ||
    xBolinha - raio < 0) { 
    velocidadeXBolinha *= -1;
  }
  if (yBolinha + raio > height ||
     yBolinha - raio < 0) {
    velocidadeYBolinha *= -1;
}
}

function mostraRaquete (x, y) {
  rect( x, y, wRaquete, hRaquete)
}

function bolinhaNaoFicaPresa ( ){
    if (xBolinha - raio <= 0){
    xBolinha = 20;

    } else {

      if (xBolinha - raio >= 588){
        xBolinha = 570;
      }
    }
}

function movimentoRaqueteDireita () {
  if (keyIsDown(UP_ARROW)) {
    yRaquete -=10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaquete +=10;
  }
}

function colisaoRaquete (x, y) {
  colidiu = collideRectCircle (x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio);
  if (colidiu) {
    velocidadeXBolinha *= -1;
  }
}


function movimentaOponente () {
    velocidadeYOponente = 0.88 * yBolinha - yOponente - hRaquete / 2 - 20 
    yOponente += velocidadeYOponente 
}

function placar () {
  textAlign (CENTER);
  textSize (25); 
  fill (255);
  text (meuPlacar, 150, 26);
  text (placarOponente, 450, 26);
}

function marcaPlacar (){
  if (xBolinha > 588) {
    meuPlacar += 1;
  }
  if (xBolinha < 15) {
    placarOponente += 1;
  }
}

Nessa parte do seu código..

”function movimentaOponente () { velocidadeYOponente = 0.88 * yBolinha - yOponente - hRaquete / 2 - 20; yOponente += velocidadeYOponente }”

Testa aumentar esse valor (20) pra bolinha bater bem no limite inferior da raquete.. no meu eu coloquei 100

Assim, algumas vezes a raquete não consegue alcançar a bolinha e erra.