Tentei a solução sugerida do curso e algumas outras do fórum e não funcionou. Alguém tem alguma sugestão?
Tentei a solução sugerida do curso e algumas outras do fórum e não funcionou. Alguém tem alguma sugestão?
Oi Letícia, tudo bem?
Entendi sua dúvida. 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?
Alterações fora da funçãomovimentaoponente()
direcaoRaqueteOponente
. Ela determinará se a raquete do oponente será movimentada para baixo ou para cima.movimentaoponente()
mediaYBolinha
, que armazenará a localização média da bolinha na tela;mediaYRaqueteOponente
, que armazenará a localização média da raquete do oponente na tela;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; 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:
```jsx
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!
Caso mesmo com as dicas acima você não consiga corrigir esse problema, sugiro que você compartilhe o link do seu código para que eu possa te ajudar da melhor maneira possível.
Espero que dê tudo certo. Caso tenha outras dúvidas, estarei a disposição.
Grande abraço e bons estudos!
me ajudou bastante. muito obrigada, Rodrigo Anita :)