meu oponente nunca erra mesmo eu colocando a linha para aumentar a chance de erro do oponente, segue o codigo https://editor.p5js.org/hgokuh/sketches/Wk4ZKjgna
meu oponente nunca erra mesmo eu colocando a linha para aumentar a chance de erro do oponente, segue o codigo https://editor.p5js.org/hgokuh/sketches/Wk4ZKjgna
Oi, Humberto! Tudo certo por aí?
Desde já, agradeço a paciência em aguardar uma resposta!
Pensando em uma solução para o problema do “oponente nunca erra”, organizei uma nova lógica bem interessante. Antes de analisá-la, precisaremos alterar algumas coisas em seu código, beleza?
chancedeerrar, bem como à função calculachanceerrar().Depois disso, podemos partir para o ponto principal!
Para o problema em questão, desenvolvi o trecho de código abaixo:
let direcaoRaqueteOponente = 1;
function movimentaoponente(){
const mediaYBolinha = yBolinha + raio;
const mediaYRaqueteOponente = yraqueteoponente + (raquetealtura/2);
if (mediaYBolinha > mediaYRaqueteOponente) {
direcaoRaqueteOponente = 1;
} else {
direcaoRaqueteOponente = -1;
}
yraqueteoponente += 5 * random(0.6, 0.95) * direcaoRaqueteOponente;
}
Vamos analisar o que foi feito em etapas?
movimentaoponente()direcaoRaqueteOponente. Ela determinará se a raquete do oponente será movimentada para baixo ou para cima.movimentaoponente()Foi criada a variável mediaYBolinha, que armazenará a localização média da bolinha na tela;
Foi criada a variável mediaYRaqueteOponente, que armazenará a localização média da raquete do oponente na tela;
Caso mediaYBolinha seja superior a mediaYRaqueteOponente, significa dizer que a bolinha está abaixo da raquete do oponente verticalmente. Por esse motivo, direcaoRaqueteOponente continua sendo positivo, a fim de aumentar o valor de yraqueteoponente (fazer a raquete descer). Caso isso não seja verdade, direcaoRaqueteOponente será igual a -1, fazendo com que a raquete adversária vá para cima;
Por fim, realizou-se uma atribuição com soma:
yraqueteoponente += 5 * random(0.6, 0.95) * direcaoRaqueteOponente;
random(0.6, 0.95) gerará um valor aleatório entre o intervalo de 0.6 e 0.95;direcaoRaqueteOponente determinará se a raquete irá para cima ou para baixo, como vimos anteriormente.Com isso, a raquete do oponente passa a funcionar normalmente, ora acertando, ora errando! Muita bacana, não acha?
Para deixar seu jogo ainda mais legal, adicionei uma função que altera a posição horizontal da bolinha caso ela esteja muito próxima da borda e da raquete ao mesmo tempo, evitando o problema de ficar presa. Veja só como ficou:
function bolinhaNaoFicaPresa() {
if (xBolinha - raio <= 0){
xBolinha = 35;
} else {
if (xBolinha - raio >= 588){
xBolinha = width - 35;
}
}
}
Lembre-se de chamá-la dentro de draw(), da seguinte maneira:
function draw() {
// ... restante do código
bolinhaNaoFicaPresa();
}
Espero que tenha compreendido minha explicação! Caso surjam dúvidas ao decorrer dos seus estudos, lembre-se que você pode contar com o fórum. Fico à disposição para te ajudar da melhor maneira possível!
Grande abraço, Humberto!