Olá, terminei o curso e gostaria de compartilhar minha versão com algumas modificações.
Os movimentos do oponente eu usei os do Raphael Aracelli pois achei que ficaram mais orgânicos (link do código dele: (https://cursos.alura.com.br/forum/topico-outra-ideia-para-deixar-o-jogo-mais-interessante-96880 )
O que eu mudei foi, criei uma variável para alterar a distância de onde o oponente percebe a bola. Quanto mais atrás nos pontos você estiver mais fácil será de pontuar, embora mesmo a versão de "maior dificuldade" não é impossível de pontuar.
A trilha sonora e os sons eu criei usando o LMMS. Quem quiser testar: https://editor.p5js.org/Laino/full/Dan4Jf0u9
//sons
let ponto;
let trilha;
let mesa;
let raquetada;
//forma bola
let xBola = 500;
let yBola = 200;
let dBola = 20;
let rBola = dBola/2;
//movimenta bola
let xVel = 11;
let yVel = xVel - 2.5;
let xDirecao = [xVel, xVel*(-1)];
let yDirecao = [yVel, yVel*(-1)];
//comum raquetes
let largP = 10;
let altP = 90;
//forma jogador
let xP1 = 5;
let yP1 = 145;
//oponente
let xP2 = 785;
let yP2 = 145;
let velP2 = [xVel + 1, xVel, xVel - 1];
let dificuldade = 400;
//placar
let pontoP1 = 0;
let pontoP2 = 0;
function preload(){
  trilha = loadSound("trilha.mp3");
  ponto = loadSound("ponto.mp3");
  mesa = loadSound("mesa.mp3");
  raquetada = loadSound("raquete.mp3");
}
function setup() {
  createCanvas(800, 400);
  inicio();
  trilha.loop();
}
function draw() {
  background(0);
  strokeWeight(0);
    //Bola
  Bola();
  moveBola();
  colideBorda();
    //Player
  raquete(xP1, yP1);  
  moveJogador();
  colisaoRaquete(xP1, yP1);
    //Oponent
  raquete(xP2, yP2);
  moveP2();
  colisaoRaquete(xP2, yP2);
    //Score
  criaPlacar();
}
function inicio(){
  xBola = 500;
  yBola = 200;
  xVel = random(xDirecao);
  yVel = random(yDirecao);
}
function Bola(){
  circle(xBola, yBola, dBola);
}
function moveBola(){
  xBola += xVel;
  yBola += yVel;
}
function colideBorda(){
  if (yBola + rBola >= height || yBola - rBola <= 0){
    yVel *= -1;
    mesa.play();
  }
  if (xBola - rBola < 0){
    inicio();
    pontoP2 += 1;
    ponto.play();
  }
  if (xBola + rBola > width){
    inicio();
    pontoP1 += 1;
    ponto.play();
    }
}
function raquete(x, y){
  rect (x, y, largP, altP);
}
function campo(x, y){
  rect (x, y, 15, 20);
}
function moveJogador(){
  if (keyIsDown(UP_ARROW)){
      yP1 -= 10;
    }
  if (keyIsDown(DOWN_ARROW)){
      yP1 += 10;
    }
}
function colisaoRaquete(x, y){
  colide = collideRectCircle(x, y, largP, altP, xBola, yBola, rBola)
  if (colide){
    xVel *= -1;
    raquetada.play();
  }
}
function moveP2(){
  if (xBola > 400 && xVel > 0){
    if(yP2 != yBola){
      if(yP2 < yBola){
        yP2 += random(velP2);
      }
      else{
        yP2 += random(velP2) * -1;
      }
    }
  }  
}
function criaPlacar(){
  fill(255);
  textSize(70);
  text(pontoP1, 200, 90);
  text(pontoP2, 600, 90);
}