2
respostas

Raquete adversária buga no início do jogo

Adicionei a variável chanceDeErrar e a função e o jogo bugou.

//bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 15;
let raioBolinha = diametroBolinha / 2;

//retangulo1(minha raquete)
let xRetangulo1 = 5;
let yRetangulo1 = 150;
let larguraRetangulo1 = 10;
let alturaRetangulo1 = 90;

//ratangulo2(raquete do oponente)
let xRetangulo2 = 585;
let yRetangulo2 = 150;
let velYOponente;

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

//colisão
let colisao = false;

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

//sons do jogo
let raquetada;
let ponto;
let trilha;

//chance do oponente errar
let chanceDeErrar = 0;

function preload(){
  trilha = loadSound("trilha.mp3");
  ponto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3")
}

//background
function setup() {
  createCanvas(600, 400);
  trilha.loop();
}
//comandos
function draw() {
  background(0);
  mostraBolinha();
  velocidadesBolinhas();
  colisaoBorda();
  mostraRaquete(xRetangulo1, yRetangulo1);
  mostraRaquete(xRetangulo2, yRetangulo2);
  movimentoRaquete1();
  movimentoRaquete2();
  colisaoBiblioteca(xRetangulo1, yRetangulo1);
  colisaoBiblioteca(xRetangulo2, yRetangulo2);
  incluiPlacar();
  marcaPonto();
  calculaChanceDeErrar();
}

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

function mostraRaquete(x, y){
  rect(x, y, larguraRetangulo1, alturaRetangulo1); 
}

function movimentoRaquete1(){
  if (keyIsDown(UP_ARROW)){
    yRetangulo1 -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRetangulo1 += 10;
  }
}

function movimentoRaquete2(){
  velYOponente = yBolinha -yRetangulo2 - larguraRetangulo1 / 2 - 30;
  yRetangulo2 += velYOponente + chanceDeErrar;
  calculaChanceDeErrar();
}

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

function colisaoBorda(){
  if (xBolinha + raioBolinha > width || xBolinha - raioBolinha < 0){
    velocidadeXBolinha *= -1;
}

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

function colisaoBiblioteca(x, y) {
    colidiu = collideRectCircle(x, y, larguraRetangulo1, alturaRetangulo1, xBolinha, yBolinha,raioBolinha);
  if (colidiu) {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255,40,0));
  rect(150, 10, 40, 20);
  fill(255);
  text(meusPontos, 170, 26);
  fill(color(255,40,0));
  rect(450,10,40,20);
  fill(255)
  text(pontosDoOponente, 470, 26);
}

function marcaPonto(){
  if (xBolinha > 590){
    meusPontos += 1
    ponto.play();
  }

  if (xBolinha < 10){
    pontosDoOponente +=1
    ponto.play();
  }
}

function calculaChanceDeErrar() {
  if (pontosDoOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}
2 respostas

Olá, Olívio! Tudo bem com você?

Desculpe a demora em responder você mas aqui vamos nós! :D

Observei o código que você postou e pude perceber que você chamou a função calculaChanceDeErrar() dentro da função draw() e isso gerou o conflito. O bug aconteceu porque a draw() funciona como um loop que repete continuamente o que é chamado em seu escopo. No entanto, a calculaChanceDeErrar() precisa ser chamada em um ponto específico do código para obtermos o comportamento desejado.

Para resolver você pode deixar a sua draw() dessa forma:

//comandos
function draw() {
  background(0);
  mostraBolinha();
  velocidadesBolinhas();
  colisaoBorda();
  mostraRaquete(xRetangulo1, yRetangulo1);
  mostraRaquete(xRetangulo2, yRetangulo2);
  movimentoRaquete1();
  movimentoRaquete2();
  colisaoBiblioteca(xRetangulo1, yRetangulo1);
  colisaoBiblioteca(xRetangulo2, yRetangulo2);
  incluiPlacar();
  marcaPonto();
  //calculaChanceDeErrar(); deixei em comentário
}

Ah, tentei entrar pelo seu link mas não consegui pois acusa "NOT FOUND".

Espero que as informações tenham ajudado!

Um abraço e bons estudos!