1
resposta

A bola prende atrás da raquete, quicando entre ela e a parede.

Quando o pong começa, a bola fica presa entre a raquete e a parede quicando entre as duas sem parar; se eu mudo o "raqueteComprim / 2 - 30" pra -20 para de acontecer, mas ele sempre erra, se eu boto -40 ele sempre acerta

//Variáveis do círculo.
let xCirculo = 380;  //Posição X inicial do círculo.
let yCirculo = 250;  //Posição Y inicial do círculo.
let diamCirculo = 18;  //Diâmetro do círculo.
let raioCirculo = diamCirculo / 2 ;  //Raio do círculo.

//Velocidade do círculo.
let xSpeedCirculo = 8; //Velocidade do movimento X do círculo.
let ySpeedCirculo = 8; //Velocidade do movimento Y do círculo. 

//Variáveis da raquete.
let xRaquete = 8;  //Posição X da raquete.
let yRaquete = 175;  //Posição Y da raquete.
let raqueteComprim = 10;  //Comprimento da raquete.
let raqueteAlt = 100;  //Altura da raquete.

//Variáveis do oponente
let xRaqueteDoOponente = 780; //Posição X da raquete do oponente.
let yRaqueteDoOponente = 175; //Posição Y da raquete do oponente.
let velocidadeYOponente; 

//Placar do jogo
let minhaPontuaçao = 0; //Meus pontos.
let oponentePontuaçao = 0; //Pontos do oponente.
let chanceDeErrar = 0;

//Sons do jogo
let raquetada;
let pontuar;
let trilhaSonora;

let colisao = false

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

function setup() {
  createCanvas(800, 500);
  trilhaSonora.loop();
}

function draw() {
  background(0);
  mostraCirculo();
  movimentoCirculo();
  colisaoDaBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentoRaquete();
  //colisaoRaquete();
  colisaoDasRaquetesBiblioteca(xRaquete, yRaquete);
  mostraRaquete(xRaqueteDoOponente, yRaqueteDoOponente);
  movimentoRaqueteDoOponente();
  colisaoDasRaquetesBiblioteca(xRaqueteDoOponente, yRaqueteDoOponente); 
  incluirOsPontos();
  marcarAPontuaçao();
  calculaChanceDeErrar();

}

function mostraCirculo(){
  circle(xCirculo, yCirculo, diamCirculo);
}

function movimentoCirculo(){
  xCirculo += xSpeedCirculo;
  yCirculo += ySpeedCirculo;
}

function colisaoDaBorda(){
  if (xCirculo + raioCirculo> width ||
     xCirculo - raioCirculo< 0){
    xSpeedCirculo *= -1;
  }
  if (yCirculo + raioCirculo> height ||
     yCirculo - raioCirculo < 0){
    ySpeedCirculo *= -1;
  }
}

function mostraRaquete(x, y) {
    rect(x, y, raqueteComprim, raqueteAlt);
}

function movimentoRaquete() {
    if (keyIsDown(UP_ARROW)) {
        yRaquete -= 10;
    }
    if (keyIsDown(DOWN_ARROW)) {
        yRaquete +=10;
    }
}

function colisaoRaquete() {
    if (xCirculo - raioCirculo < xRaquete + raqueteComprim
        & yCirculo - raioCirculo < yRaquete + raqueteAlt
        & yCirculo + raioCirculo > yRaquete) {
        xSpeedCirculo *= -1;
      raquetada.play();
    }
}

function colisaoDasRaquetesBiblioteca(x, y){
  colidiu =    collideRectCircle(x, y,raqueteComprim,raqueteAlt,xCirculo,yCirculo,raioCirculo);
  if (colidiu){
    xSpeedCirculo *= -1;
    raquetada.play();
  }
}

function movimentoRaqueteDoOponente(){
  velocidadeYOponente = yCirculo - yRaqueteDoOponente - raqueteComprim / 2 - 30
  yRaqueteDoOponente += velocidadeYOponente + chanceDeErrar
  calculaChanceDeErrar()
}

function calculaChanceDeErrar() {
  if (oponentePontuaçao >= minhaPontuaçao) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

function incluirOsPontos(){
  textAlign(CENTER);
  textSize(25);
  stroke(9999);
  fill(0,0,205);
  rect(325, 8, 50, 35);
  stroke(9999);
  fill(0,0,205);
  rect(425, 8, 50, 35);
  fill(9999);
  text(minhaPontuaçao, 350, 34);
  fill(9999);
  text (oponentePontuaçao, 450, 34);

}

function marcarAPontuaçao(){
  if (xCirculo > 791){
    minhaPontuaçao += 1;
    pontuar.play();
  }
  if (xCirculo < 9){
    oponentePontuaçao += 1;
    pontuar.play();
  }

}
1 resposta

Olá, Davi! Tudo bem com você?

Ao modificarmos o valor do diâmetro da bolinha também precisamos refazer alguns cálculos no restante do código para que a lógica continue funcionando de acordo com o esperado. Dessa forma, você pode modificar alguns valores para que o jogo funcione bem.

No tocante ao bug da bolinha presa atrás da raquete, um outro aluno também aqui da Alura se deparou com esse problema e deu uma sugestão muito bacana. Vou compartilhar o tópico aqui com você:

Link para o tópico:Evitar que a bolinha trave atras da raquete

Além disso, o aluno Thiago Manata pensou em uma solução um pouco mais elaborada tecnicamente aqui no tópico:

Link para o tópico: Erro incremental no pong

Confira os tópicos e compartilhe seu progresso ou dúvidas conosco!

Bons estudos!