Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como reiniciar o trajeto da bolinha ao pontuar?

Olá pessoal, comecei há pouco e não tenho muito conhecimento a respeito de programação, por isso estou fazendo o curso de lógica com JS. Eu fiz esse jogo chamado PONG seguindo o curso, no entanto, notei um bug em que quando o oponente pontua a bolinha pode acabar bugando na minha raquete e contabilizar diversos hits (o que significa diversos pontos para o oponente) ao mesmo tempo. Como posso fazer uma condicional para quando o oponente pontuar a bolinha retornar ao centro do tabuleiro e recomeçar o trajeto?

meu código: https://editor.p5js.org/artorium1999/sketches/HHT1C19Mr

1 resposta
solução!

Olá Luís, dessa maneira a bolinha volta ao centro quando você ou o oponente marcar ponto:

//bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 13;
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;
let raio = diametro / 2;
//raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;
//oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let chanceDeErrar = 0;
//placar do jogo
let meusPontos = 0;
let pontosOponente = 0;
//sons do jogo
let raquetada;
let ponto;
let trilha;

let colidiu = false;

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

  function setup() {
  createCanvas(600, 400);
  trilha.loop();
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaobolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentoMinhaRaquete();
  //verificaColisaoRaquete();
  colisaoBiblioteca(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  colisaoBiblioteca(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();
}

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

  function movimentaBolinha(){
    xBolinha += velocidadexBolinha
    yBolinha += velocidadeyBolinha
  }

  function verificaColisaobolinha(){
    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 movimentoMinhaRaquete(){
    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){
      velocidadexBolinha *= -1;
      raquetada.play();
    }
  }

  function colisaoBiblioteca(x, y){
  colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, diametro);
  if(colidiu){
    velocidadexBolinha *= -1;
    raquetada.play();
  }
}

  function movimentaRaqueteOponente(){
    velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 -55;
    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 resetaPosicaoBolinha() {
      xBolinha = 300;
      yBolinha=200;
  }

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

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

Até mais, Marcus.