1
resposta

o ponto esta ao bater na raquete e não na borda

Meu jogo está rodando bem. No entanto, o ponto do oponente esta estranho. Quando a bolinha bate na borda do meu lado não contabiliza ponto para o oponente, mas quando a bolinha bate na minha raquete o ponto é computado. O parte do placar referente aos meus pontos está ok. Já revirei os valores aqui e não entendo pq esta dando errado. :-(


//variaveis bolinha//
let xBolinha = 300;
let yBolinha = 200;
let diametro = 30;
let raio = diametro/2;

//velocidade bolinha
let velocidadeXBolinha = 2;
let velocidadeYBolinha = 2;

// variaveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

// variaveis oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
//let velocidadeXBolinha = 2;
let velocidadeYOponente;

//placar jogo
let meusPontos = 0;
let pontosOponente = 0;

let colidiu = false;
let colidiuOponente = false;


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete,yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  colisaoRaqueteBiblioteca(xRaquete,yRaquete);
  mostraRaquete(xRaqueteOponente,yRaqueteOponente);
  movimentaRaqueteOponente();
  colisaoRaqueteBiblioteca(xRaqueteOponente,yRaqueteOponente);
  incluiPlacar();
  marcaPontos();
}

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

function movimentaBolinha(){
  xBolinha += velocidadeXBolinha; //+= é a msm coisa q xbolinha+velcodadexbolinha//
  yBolinha += velocidadeYBolinha;
}

function verificaColisaoBorda(){
  if(xBolinha + raio >width ||xBolinha - raio < 0){ //width = tamanha max tela
    velocidadeXBolinha *= -1;

  }
  if(yBolinha +raio > height || yBolinha - raio < 0){
    velocidadeYBolinha *= -1;
  }
}

function mostraRaquete(x,y){
    rect (x,y,raqueteComprimento,raqueteAltura);
}



function movimentaMinhaRaquete(){  

  if (keyIsDown(UP_ARROW)){
      yRaquete -= 10;
      }


  if (keyIsDown(DOWN_ARROW)){
      yRaquete += 10;
      }
}

  function verificaColisaoRaquete(){

    if(xBolinha-raio<xRaquete+raqueteComprimento&&yBolinha-raio<yRaquete+raqueteAltura&&yBolinha+raio>yRaquete){
      xBolinha*= -1;
    }
  }

  function colisaoRaqueteBiblioteca(x,y){
   colidiu = 
     collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
    if (colidiu){
      velocidadeXBolinha*= -1;
    }    
  }

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha -yRaqueteOponente-raqueteComprimento/2-30;
  yRaqueteOponente += velocidadeYOponente; 
}

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(25);
  fill (color(255,140,0));  
  rect(130,5,40,25);
  fill (250);
  text(meusPontos,150,26);
  fill (color(255,140,0));
  rect(430,5,40,25);
  fill (255);
  text(pontosOponente,450,26);

}
function marcaPontos(){
  if (xBolinha>585){
    meusPontos+=1;
  }

  if (xBolinha<5){
    pontosOponente+=1;
  }
}
1 resposta

Fala, Everton!

Tudo bem contigo?

Desculpe a demora em dar um retorno

O diâmetro da bolinha está interferindo pois no valor de 30acontece a pontuação com o valor limitando os pontos para o oponente em 12

  if (xBolinha<12){
    pontosOponente+=1;
  }
}

Porém, batendo na raquete também contabiliza.

O que podemos fazer é diminuir o diâmetro da bolinha. Acredito que conseguiremos achar esse "meio termo"

Espero ter ajudado

Um abraço e bons estudos