Oi, Renan! Tudo bom?
Desculpe a demora em te responder.
Entendo sua preocupação, Renan, mas é importante lembrar que simular a imprevisibilidade e a complexidade da ação humana em um jogo não é uma tarefa simples. O nosso comportamento é cheio de nuances e variações que são desafiadoras de replicar digitalmente, mas trago aqui uma alternativa para o seu Pong!
Observe o código abaixo:
function movimentoOponente() {
let diferencaY = yBolinha - yOponente - comprimentoRaquete / 2;
if (random(0, 100) < chanceDeErrar) {
diferencaY = random(-7, 7);
}
yOponente += diferencaY * 0.05;
}
function calculaChanceDeErrar() {
if (pontosDoOponente >= meusPontos) {
chanceDeErrar = 30;
} else {
chanceDeErrar = 60;
}
}
Na função movimentoOponente()
, construímos a seguinte lógica:
- Calcula-se a diferença entre a posição da bola e o centro da raquete do oponente;
- Decide-se, aleatoriamente, se o oponente "erra" com base na
chanceDeErrar
; - Se "erra", move-se aleatoriamente entre -7 e 7;
- Atualiza-se a posição da raquete do oponente em 5% da diferença calculada ou na direção aleatória.
Enquanto isso, na função calculaChanceDeErrar()
, organizamos o seguinte:
- Se o oponente estiver ganhando ou empatado, a chance de errar é de 30%;
- Se o oponente estiver perdendo, a chance de errar é de 60%.
Renan, ao fim, chegaremos neste resultado:
Espero que goste dessa alternativa, Renan! Lembre-se que ela não é perfeita — sinta-se confortável para aprimorá-la e deixá-la do seu jeito!
Qualquer dúvida, estarei por aqui.
Um abraço!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!