1
resposta

Solução para a dificuldade do oponente

Declarei uma variável chamada chanceDeErrar recebendo 0, e determinei uma condição para diminuir a posição Y do oponente toda vez em que a bolinha passasse em uma certa posição (entre 16 e 22 do eixo x), na função verificaColisaoRaquete, utilizando Math.random. Escolhi esta posição porque é quando a bolinha está mais próxima da minha raquete, ai quem está jogando presta menos atenção na "sabotagem" da raquete oponente. Ficando desta forma:

function verificaColisaoRaquete(x, y) {
    colidiu = collideRectCircle(x, y, larguraRaquete, alturaRaquete, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadexBolinha *= -1;
        raquetada.play();}
    if(xBolinha<22 && xBolinha>16){
      chanceDeErrar = parseInt((Math.random() * (110 - 80 + 85).toFixed(0)));} 
}

Se quiser dar uma olhada no código completo, segue abaixo:

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

//velocidade da bolinha
let velocidadexBolinha = 9;
let velocidadeyBolinha = 9;

//variáveis da raquete
let xRaquete = 4;
let yRaquete = 200;
let larguraRaquete = 12;
let alturaRaquete = 90;
let raioBordaRaquete = 20;

//variáveis do oponente
let xOponente = 586;
let yOponente = 200;
let velocidadeOponente;
//let dificuldade;

//variáveis placar do jogo
let meusPontos = 0;
let pontosOponente = 0;

//variáveis do som
let raquetada;
let trilha;
let ponto;

let colidiu = false;

let chanceDeErrar = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaRaquete();
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xOponente, yOponente);
  movimentaOponente();
  verificaColisaoRaquete(xOponente, yOponente);
  incluiPlacar();
  marcaPonto();

}

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

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

function verificaColisaoBorda(){
  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, larguraRaquete, alturaRaquete, raioBordaRaquete);
}

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

function verificaColisaoRaquete(x, y) {
    colidiu = collideRectCircle(x, y, larguraRaquete, alturaRaquete, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadexBolinha *= -1;
        raquetada.play();}
    if(xBolinha<22 && xBolinha>16){
      chanceDeErrar = parseInt((Math.random() * (110 - 80 + 85).toFixed(0)));} 
}


function movimentaOponente() {
    velocidadeOponente = yBolinha - yOponente - larguraRaquete / 2 - chanceDeErrar;
    yOponente += velocidadeOponente;
}

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

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

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

Ótima solução! Obrigado por compartilhar!