Oi Diego, tudo bem?
Pelo que eu vejo, você está enfrentando dois problemas principais: a bolinha está atravessando a raquete do oponente e o placar está marcando 3 pontos ao invés de 1.
Para o primeiro problema, acredito que o erro esteja na função verificaColisaoRaquete2()
. Você está usando o operador &
para a verificação, quando deveria usar &&
para um correto funcionamento do operador lógico AND. Assim, a função fica:
function verificaColisaoRaquete2(){
if (xBolinha + raio > xRaquete2 - raquete2Comprimento &&
yBolinha + raio > yRaquete2 - raquete2Altura &&
yBolinha - raio < yRaquete2){
velocidadexBolinha *= -1;
}
}
Quanto ao segundo problema, parece que a função marcaPonto()
está sendo chamada mais de uma vez antes que a bolinha possa ser resetada para o centro, fazendo com que mais de um ponto seja marcado por vez. Uma solução possível seria adicionar uma variável de controle para verificar se a bolinha já marcou ponto e evitar que ela marque novamente até ser resetada.
Por exemplo, você pode adicionar uma variável marcouPonto
:
let marcouPonto = false;
E então, na função marcaPonto()
, você verifica se marcouPonto
é false
antes de adicionar pontos:
function marcaPonto(){
if(xBolinha > 590 && !marcouPonto){
pontosPlay1 += 1;
marcouPonto = true;
}
if(xBolinha < 10 && !marcouPonto){
pontosPlay2 += 1;
marcouPonto = true;
}
}
Finalmente, você precisa resetar marcouPonto
para false
quando a bolinha é resetada para o centro. Supondo que você tenha uma função resetBolinha()
que faz isso, ela ficaria assim:
function resetBolinha(){
xBolinha = 300;
yBolinha = 200;
marcouPonto = false;
}
Espero que essas sugestões possam te ajudar a solucionar os problemas. Lembre-se que a prática leva à perfeição, então continue se esforçando e não desanime!
Um abraço e bons estudos.