1
resposta

[Projeto] O meu código saiu um pouco diferente, se houver alguma sugestão para otimizá-lo, ficarei feliz em saber.

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

//velocidade da bolinha
let velocidadeXbolinha = 6;  
let velocidadeYbolinha = 6;

//variáveis da minha raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 90;

//variáveis da raquete oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let chanceDeErrar = 0;
let colidiu = false;

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

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

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

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

//funcionamento do jogo
function draw() {
  background(0);
  MostraBolinha();
  MovimentaBolinha();
  VerificaColisaoBolinha();
  MostrarRaquete();
  MovimentarRaquete();
  VerificaColisaoRaquete(xRaquete, yRaquete);
  MostrarRaqueteOponente();
  MovimentaRaqueteOponente();
  VerificaColisaoRaquete(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 MostrarRaquete(){
  rect(xRaquete, yRaquete, raqueteComprimento, raqueteAltura)
} 


function MostrarRaqueteOponente(){
  rect(xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura)
}

function MovimentarRaquete(){
  if (keyIsDown (UP_ARROW) && yRaquete > 0){
    yRaquete -= 10
  }
  if (keyIsDown (DOWN_ARROW) && yRaquete < height - raqueteAltura){
    yRaquete += 10
  }
}

function collideRectCircle(rx, ry, rw, rh, cx, cy, cr) {
  let rxCenter = rx + rw / 2;
  let ryCenter = ry + rh / 2;
  let dx = Math.abs(cx - rxCenter);
  let dy = Math.abs(cy - ryCenter);

  if (dx > rw / 2 + cr || dy > rh / 2 + cr) {
    return false;
  }

  if (dx <= rw / 2 || dy <= rh / 2) {
    return true;
  }

  let cornerDistSq = (dx - rw / 2) ** 2 + (dy - rh / 2) ** 2;
  return cornerDistSq <= cr ** 2;
}

function VerificaColisaoRaquete(x, y){
  colidiu = collideRectCircle (x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio)
  if (colidiu){
    velocidadeXbolinha *= -1;
    //velocidadeYbolinha *= -1;
    raquetada.play();
  }
}

function MovimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
  yRaqueteOponente += velocidadeYOponente + chanceDeErrar;
  calculaChanceDeErrar();
  if (yRaqueteOponente < 0){
    yRaqueteOponente =0; 
  }
  if (yRaqueteOponente > height - raqueteAltura){
    yRaqueteOponente =height - raqueteAltura;
  }
}

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

function bolinhaNaoFicaPresa(){
    if (XBolinha - raio < 0){
    XBolinha = 23
    }
}

function incluiPlacar(){
  stroke (255); //ContornoDoPlacar
  textAlign (CENTER); //AlinhamentoDoTexto
  textSize (16); //TamanhoDaFonteDoTexto
  fill (color (255,140,0)); //CorDoMeuPlacar
  rect (150, 10, 40, 20); //MedidasdoMeuPlacar
  fill (255); //CorDosMeusPontos
  text (meusPontos, 170, 25); //NúmeroDoMeuPlacar
  fill (color (255,140,0)); //CorDosPontosDoOponente
  rect (450, 10, 40, 20); //MedidasDoPlacarDoOponente
  fill (255); //CorDosPontosDoOponente 
  text (pontosDoOponente, 470, 25); //NúmeroDoPlacarDoOponente 
}

function marcaPonto(){
  if (xBolinha > width - raio){
    meusPontos ++;
    ponto.play();
  }
  if (xBolinha < raio){
    pontosDoOponente ++;
    ponto.play();
  }
}
1 resposta

Olá Gabriel, tudo bem? Espero que sim

Seu código ficou excelente, parabéns! Caso você queira, pode utilizar comentários no código para explicar o que cada parte faz e tornar o código mais fácil de entender. Continue se dedicando aos estudos, e praticando!

Caso tenha dúvidas, fico à disposição.

Abraços!