As raquetes estavam indo junto com bolinha na criação do pong, qual a solução para resolver?
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!
As raquetes estavam indo junto com bolinha na criação do pong, qual a solução para resolver?
Oi Anderson, tudo bem?
Para ajudar a reduzir os problemas enfrentados, seguem algumas dicas, tanto para o Scratch quanto para o p5.js.
No Scratch, na aba do ator "raquete do oponente", podemos resolver o problema utilizando o blocos: “deslize por 0 segs até x:220 y: posição y da bolinha -50”.

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:
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!