Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

bolinha não retornando

Nos extremos da minha raquete a bolinha ultrapassa a borda e faz contagem de 98 pontos para o oponente e retornar. Não consigo visualizar o erro.

5 respostas

Olá, Peres! Tudo bem contigo?

Poste seu link editor para que possamos dar uma olhada!

Ficamos no aguardo!

segue código como solicitado

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

// velocidade da bolinha
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;

// variavéis da raquete
let xRaquete = 5;
let yRaquete = 150;
let larguraRaquete = 10;
let comprimentoRaquete = 90;
let deslocamentoDaRaquete = 6;

//variaveis da raquete oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYRaqueteOponente;
//variavéis para marcar pontos
let meusPontos = 0;
let pontosOponente = 0;
let chanceErrar = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  tocarBorda(); 
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  colisaoComRaquete();
  movimentaRaqueteOponente();
  colisaoComRaqueteOponente();
  incluiPlacar();
  marcaPontos();
}

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

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

function tocarBorda(){
  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, larguraRaquete, comprimentoRaquete);
}
function movimentaMinhaRaquete(){
  if(keyIsDown(DOWN_ARROW)){
  yRaquete+= 6;}
  if (keyIsDown(UP_ARROW)){
  yRaquete-= 6;
}
}
function colisaoComRaquete(){
  if(xBolinha - raio < xRaquete + larguraRaquete &&yBolinha + raio > yRaquete &&yBolinha - raio < yRaquete + comprimentoRaquete
    ){
  velocidadeXBolinha *= -1;
  }
}

function movimentaRaqueteOponente(){
  velocidadeYRaqueteOponente = yBolinha -yRaqueteOponente - comprimentoRaquete/2 - 30;
  yRaqueteOponente += velocidadeYRaqueteOponente + chanceErrar;
  calculaChanceErrar();
}

function colisaoComRaqueteOponente(){
  if (xBolinha + raio > xRaqueteOponente && yBolinha + raio > yRaqueteOponente && yBolinha - raio < yRaqueteOponente + comprimentoRaquete){
  velocidadeXBolinha *= -1;
  }
}

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(20);
  fill(color(255,140,0));
  rect(130,10,40,25);
  rect(430,10,40,25);
  fill(255);
  text(meusPontos,150,30);
  fill(255);
  text(pontosOponente,450,30);
}
function marcaPontos(){
  if(xBolinha > 590){
    meusPontos += 1;
  }
  if(xBolinha < 10){
    pontosOponente += 1;
  }
}

function calculaChanceErrar(){
  if(pontosOponente >= meusPontos){
    chanceErrar += 1;
  }if(chanceErrar >= 39){
    chanceErrar = 40;
  }else{
  chanceErrar -= 1;
    if(chanceErrar<=35){
    chanceErrar = 35
    }
  }

}

Fala, Peres! Tudo bem?

Eu rodei seu código e não consegui encontrar o erro.

Está rodando como esperado.

Se quiser mandar seu link editor do projeto, ficará mais fácil de ver rodando e aplicar alguns testes. Mas joguei seu código no meu projeto e teve o comportamento normal, Peres!!!

Peres, talvez sua raquete esteja muito grossa, o que faria a bola ficar rebatendo nos interiores da raquete, pois a orientação que ela recebe é mudar a direção quando toca a raquete. Se a raquete for muito longa, o computador demora um milésimo a mais para responder, o suficiente para a bolinha entrar em loop e ficar se rebatendo dentro da raquete até que o computador consiga responder. Tente diminuir e me diga se deu certo :)

solução!

vou fazer o teste e envio o retorno