Ah, legal, não sabia que tinha isso! Mas estou em dúvida de onde colocar essa velocidade. Devo adicioná-la na variável da posição do oponente?
No meu caso, essa é a função do movimento do oponente:
function movimento_do_oponente(){
nova_pos_y_oponente = y_bolinha - y_oponente - alt_raquete/2 - ((6.25 - y_bolinha/40)*15 + (2.5 - y_bolinha/100)*11);//toda a expressão ((6.25 - y_bolinha/40)*15 + (2.5 - y_bolinha/100)*11) tem o intuito de fazer com que o movimento do oponente permita que ele erre ou acerte dependendo de onde estará a bolinha.
y_oponente += nova_pos_y_oponente;
}
O código completo:
//variáveis da bolinha
let x_bolinha = 700;
let y_bolinha = 250;
let diametro = 20;
let raio = diametro / 2;
//velocidade da bolinha
let velocidade_x_bolinha = 7.2;
let velocidade_y_bolinha = -7.1;
//variáveis da raquete
let x_raquete = 5;
let y_raquete = 200;
let esp_raquete = 10;
let alt_raquete = 100;
//variáveis do oponente
let x_oponente = 785;
let y_oponente = 200;
let esp_oponente = 10;
let alt_oponente = 100;
let pos_y_oponente;
//placar
let meus_pontos = 0;
let pontos_oponente = 0;
function setup() {
createCanvas(800, 500);
}
function draw() {
background(0);
linha_de_campo();
mostra_bolinha();
movimenta_bolinha();
verifica_colisao_borda();
mostra_raquete(x_raquete, y_raquete);
movimento_da_raquete();
verifica_colisao_com_raquete();
mostra_raquete(x_oponente, y_oponente);
movimento_do_oponente();
//movimento_do_oponente_2();
verifica_colisao_com_oponente();
placar();
marca_ponto();
}
function mostra_bolinha(){
circle(x_bolinha, y_bolinha, diametro);
}
function movimenta_bolinha(){
x_bolinha += velocidade_x_bolinha;
y_bolinha += velocidade_y_bolinha;
}
function verifica_colisao_borda(){
if (x_bolinha + raio > width || x_bolinha - raio < 0) {
velocidade_x_bolinha *= -1;
}
if (y_bolinha + raio > height || y_bolinha - raio < 0) {
velocidade_y_bolinha *= -1;
}
}
function mostra_raquete(x,y){
rect(x, y, esp_raquete, alt_raquete);
}
function linha_de_campo(){
rect(400, 0, 1, 500);
}
function movimento_da_raquete(){
if (keyIsDown(UP_ARROW)){
y_raquete -= 10;
}
if (keyIsDown(DOWN_ARROW)){
y_raquete += 10;
}
}
function movimento_do_oponente(){
nova_pos_y_oponente = y_bolinha - y_oponente - alt_raquete/2 - ((6.25 - y_bolinha/40)*15 + (2.5 - y_bolinha/100)*11);//toda a expressão ((6.25 - y_bolinha/40)*15 + (2.5 - y_bolinha/100)*11) tem o intuito de fazer com que o movimento do oponente permita que ele erre ou acerte dependendo de onde estará a bolinha.
y_oponente += nova_pos_y_oponente;
}
function verifica_colisao_com_raquete(){
if (x_bolinha - raio < x_raquete + esp_raquete && y_bolinha - raio < y_raquete + alt_raquete && y_bolinha + raio > y_raquete){
velocidade_x_bolinha *= -1;
}
}
function verifica_colisao_com_oponente(){
if (x_bolinha + raio > x_oponente && y_bolinha - raio < y_oponente + alt_oponente && y_bolinha + raio > y_oponente){
velocidade_x_bolinha *= -1;
}
}
function placar(){
stroke(255);
textAlign(CENTER);
textSize(17);
fill(0);
rect(175, 14, 50, 20);
fill(255);
text(meus_pontos, 200, 30);
fill(0);
rect(575, 14, 50, 20);
fill(255);
text(pontos_oponente, 600, 30);
}
function marca_ponto(){
if (x_bolinha + raio > 799){
meus_pontos += 1;
}
if (x_bolinha - raio < 1){
pontos_oponente += 1;
}
}