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);
}