6
respostas

[Bug] Oponente não erra e a bolinha fica presa

O código está idêntico ao do instrutor, porém o meu oponente não está errando. O delay do yBolinha não funcionou para o meu código. E ás vezes a bolinha fica presa atras da raquete e marca trilhões de pontos para o oponente. Segue o código e um link para um vídeo de demonstração.

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2 ;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raqueteComprimento = 10;
let raqueteAltura = 90;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;

//variáveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

let colidiu = false;

//placar do jogo
let meusPontos = 0;
let pontosDoOponente = 0;

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

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

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

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

function verificaColisaoBorda(){
  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, raqueteComprimento, 
      raqueteAltura);
}

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}
function verificaColisaoRaquete(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(){
  fill(255);
  text(meusPontos, 278, 26);
  text(pontosDoOponente, 321, 26)
}

function marcaPonto(){
  if (xBolinha > 590){
    meusPontos += 1;
  }
  if (xBolinha < 10){
    pontosDoOponente += 1;
  }
}

https://drive.google.com/file/d/1_eFGzMSy3JL95FSBvoMKEq4U7PWttUNp/view?usp=share_link

6 respostas

Bom dia , de acordo com curso ainda resta duas funções a serem escritas , calculaChanceDeErrar() e bolinhaNaoFicaPresa() ; ambas ficaram assim no meu código :

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

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

 function bolinhaNaoFicaPresa(){
    if (xBolinha - raio < 0){
    xBolinha = 100
    }
   if (xBolinha + raio > 600){
     xBolinha = 500
   }
}

Cara, a única função que deu certo foi a bolinhaNaoFicaPresa. A outra não fez nenhuma diferença no código.

o meu estava com o mesmo problema eu refiz o codigo novamente ai funcionou e tambem ferifique se inseriu o p5.collide2d pois quando fui fazer novamente o meu deu erro na sintaxe do index mas isso aconteceu comigo por no caso eu estar usando o linux mas verifique se nao ha erro pois nao encontrei nenhum erro ali de escrita

No meu, eu coloco o código e a raquete do oponente simplesmente some e não to conseguindo corrigir.

Verifiquem se a função esta no draw , sem o código é muito complexo para descubrir o erro.

Já refiz umas duas vezes e não deu certo, a primeira vez a raquete do oponente também sumiu, ai nessa segunda não tá mudando nada. Segue o link do código.

https://editor.p5js.org/ERROR504/sketches/yYHyt4ha1