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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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!