1
resposta

Jogo pronto com leves alterações

https://editor.p5js.org/chaigon/full/w--b3FW7u

//Variáveis referentes a bola
let xBola = 400;
let yBola = 300;
let diametroBola = 20;
let raio = diametroBola / 2;

//Variáveis referentes a raquete do jogador
let xRaquete = 10;
let yRaquete = 250;
let raqComprimento = 10;
let raqAltura = 100;

//Variáveis do oponente
let xRaqEnemy = 780;
let yRaqEnemy = 250;
let velocidadeYEnemy;

let colisao = false;

//Velocidade da bola
let velocidadeXBola = 12;
let velocidadeYBola = 12;

//Variáveis Placar
let playerPoints = 0;
let enemyPoints = 0;

//Variáveis Sons
let raquetada;
let points;
let music;

function preload(){
  music = loadSound("bossaNova.wav");
  points = loadSound("ponto.wav");
  raquetada = loadSound("raquetada.wav");

}

function setup() {
  createCanvas(800, 600);
  music.loop();
}

function draw() {
  background(0);
  showBall();
  moveBall();  
  marginColisionVerify();
  showRaquete(xRaquete, yRaquete);
  raqueteMovement();
  //colisionVerify();
  colisionVerifyLibrary(xRaquete, yRaquete);
  colisionVerifyLibrary(xRaqEnemy, yRaqEnemy);
  showRaquete(xRaqEnemy,yRaqEnemy);
  raqEnemyMovement();
  showPlacar();
  scorePoints();

}

function showBall(){
  circle(xBola,yBola,diametroBola);
}

function moveBall(){
  xBola += velocidadeXBola;
  yBola += velocidadeYBola;
  }

function marginColisionVerify(){
    if (xBola > (width - raio) || xBola < raio){
    velocidadeXBola = velocidadeXBola * -1;
  }

  if (yBola > (height - raio) || yBola < raio){
    velocidadeYBola *= -1;
  }  
}

function showRaquete(x,y){
  rect(x, y, raqComprimento, raqAltura);
}


function raqueteMovement(){
  if(keyIsDown(UP_ARROW)){
    if(yRaquete >= 0){
      yRaquete -= 10;
    }
  }
  if(keyIsDown(DOWN_ARROW)){
    if(yRaquete <= height - raqAltura){
      yRaquete += 10;
    }
  }
}

function raqEnemyMovement(){
  velocidadeYEnemy = yBola - yRaqEnemy - raqComprimento /2 - 70;
  yRaqEnemy += velocidadeYEnemy;
}

function colisionVerify(){
  if(xBola - raio < xRaquete + raqComprimento && yBola - raio < yRaquete + raqAltura && yBola + raio > yRaquete){
    velocidadeXBola *= -1;
    raquetada.play();
  }
}

function colisionVerifyLibrary(x, y){
  colidiu = collideRectCircle(x, y, raqComprimento, raqAltura, xBola, yBola, raio);
  if (colidiu){
    velocidadeXBola *= -1;
    raquetada.play();
  }

}

function showPlacar(){
  stroke(color(75,0,130));
  textAlign(CENTER);
  textSize(18);
  fill(color(135,206,235));
  rect(300,10, 40,20, 5);
  fill(255);
  stroke(0);
  text(playerPoints, 320,26);
  stroke(color(75,0,130));
  fill(color(135,206,235));
  rect(500,10, 40,20, 5);
  fill(255);
  stroke(0);
  text(enemyPoints, 520, 26);
}

function scorePoints(){
  if(xBola > 800 - raio){
    playerPoints++;
    pontos.play();
  }
  if(xBola < raio){
    enemyPoints++;
    points.play();
  }
}
1 resposta

Boa Danilo Chaimsohn Gonçalves,

Gostei da solução que você propôs, afinal o resultado é o mesmo porém o código me parece muito mais robusto.

Para que mais pessoas consigam visualizar a sua solução proposta é recomendável com que você venha estar marcando este tópico como solucionado, assim pode estar ajudando ainda mais pessoas :)

Obrigado!!