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!