Antes de tudo, vinculei a randomização da posição com a posição X da bolinha.
function movimentaBolinha(){
xBolinha += velXBolinha;
yBolinha += velYBolinha;
if (xBolinha == 15){
calculaChanceDeErrar()
}
}
Assim, toda vez que a bolinha se aproximar da minha raquete, ela sorteia a chance de errar (repare que por conta do número alto que eu usei para ativar a função, ela sorteia duas vezes para cada passagem da bolinha no meu campo, mas isso ameniza um problema futuro que citarei em breve). Uma dúvida que tive foi se esse meu "if" estaria melhor dentro de outra função relacionada às raquetes, e não na bolinha, se puderem comentar depois, agradeço.
Logo após, vinculei a chance de errar à posição da raquete:
function movimentaRaquete(){
yRaqueteInimiga += velRaqueteInimiga
velRaqueteInimiga = yBolinha - yRaqueteInimiga - altRaquete /2 - chanceDeErrar
}
Sem subtrair a chance de errar da expressão acima, a bolinha sempre quica no centro da raquete inimiga, então bastou adicionar uma diferença para cima ou para baixo para saber se a raquete iria acertar ou não.
Para variável chanceDeErrar, calculei da seguinte forma:
function calculaChanceDeErrar(){
chanceDeErrar = chanceDeErrar + parseInt(random(-30, 30))
if (chanceDeErrar < -70){
chanceDeErrar = chanceDeErrar + parseInt(random(60, 120))
}
if (chanceDeErrar > 70){
chanceDeErrar = chanceDeErrar + parseInt(random(-60, -30))
}
}
Primeiro, calcula-se quantos pixel acima ou abaixo o random irá determinar para a posição da raquete, já os "ifs" impedem que a diferença entre as posições y da bolinha e raquete sejam tão grandes que a raquete suma do mapa.
Um dos problemas de fazer dessa maneira é que a raquete inimiga se teleporta instantaneamente a cada sorteio de posição, mas seguirei estudando uma forma de suavizar seu movimento(o número ser sorteado duas vezes a cada passada da bolinha ajudou a amenizar o efeito visual desses teletransportes, já que eu pude colocar números menores na conta, fazendo parecer apenas que a raquete está com FPS baixo ao invés de teletransportar). Peço desculpas se outra pessoa teve a mesma ideia que eu e já postou no fórum, essa foi uma ideia que tive durante as aulas e quis compartilhar. Se quiserem dar uma ideia de como suavizar o movimento da raquete, aceito sugestões.
Tentei colar o código completo aqui mas o limite de caracteres não deixou, então segue o link do projeto: https://editor.p5js.org/SchultzGabriel/sketches/-eoFORbNG