Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Eu e o Oponente esta com pontos de 3 em 3

fui fazendo de acordo com as aulas, e a pontuação minha e do oponente estão de 3 em 3 quando erramos.https://editor.p5js.org/Gabriellreus/sketches/XruNQPIF8

Meu codigo abaixo:

// variáveis da Bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 15; let raio = diametro / 2;

//Velocidade da Bolinha let velocidadeXBolinha = 2; let velocidadeYBolinha = 2;

// variáveis da raquete let xRaquete = 5; let yRaquete = 150; let raqueteComprimento = 10; let raqueteAltura = 90;

// variáveis do oponente let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

let colidiu = false;

//placar do jogo let meusPontos = 0; let pontosDoOponente = 0;

function setup() { createCanvas(600, 400); }

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentaMinhaRaquete(); //verificaColisaoRaquete(); verificaColisaoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); incluirPlacar(); marcaPonto(); }

function mostraBolinha(){ circle(xBolinha, yBolinha, diametro); }

function movimentaBolinha(){ xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha; }

function movimentaMinhaRaquete() { if (keyIsDown(UP_ARROW)) { yRaquete -= 10; } if (keyIsDown(DOWN_ARROW)) { yRaquete += 10; }

// Vamos limitar a movimentação da raquete para que ela não ultrapasse as bordas:
yRaquete = constrain(yRaquete, 10, 310);

}

function movimentaRaqueteOponente() { velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30; yRaqueteOponente += velocidadeYOponente;

// Vamos limitar a movimentação da raquete para que ela não ultrapasse as bordas:
yRaqueteOponente = constrain(yRaqueteOponente, 10, 310);

}

function verificaColisaoBorda(){ if (xBolinha + raio > width || xBolinha - raio < 0) { velocidadeXBolinha *= -1; }

if (yBolinha + raio > height || yBolinha - raio < 0) { velocidadeYBolinha *= -1; } }

function mostraRaquete(x, y){ rect(x, y, raqueteComprimento, raqueteAltura); }

function mostraRaqueteOponente(){ rect(xRaqueteOponente, yRaqueteOponente, raqueteComprimento, raqueteAltura); }

function movimentaMinhaRaquete(){ if (keyIsDown(UP_ARROW)){ yRaquete -= 10;

} if (keyIsDown(DOWN_ARROW)){ yRaquete += 10;

} } function verificaColisaoRaquete(){ if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){ velocidadeXBolinha *= -1; }

} function verificaColisaoRaquete(x, y){ colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura,xBolinha, yBolinha, raio); if (colidiu){ velocidadeXBolinha *= -1;}

} function movimentaRaqueteOponente(){ velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30; yRaqueteOponente += velocidadeYOponente

}

function incluirPlacar(){ fill(255); text(meusPontos, 278, 26); text(pontosDoOponente, 321, 26) }

function marcaPonto(){ if (xBolinha > 590){ meusPontos += 1; } if (xBolinha < 10){ pontosDoOponente += 1; } }

2 respostas
solução!

Oi Gabriel, tudo bem?

Acessei seu projeto no p5, percebi que a pontuação está sendo atualizada corretamente. No entanto, você mencionou que a pontuação está aumentando de 3 em 3 quando ocorre um ponto. Isso pode ser causado por chamar a função marcaPonto() várias vezes seguidas quando a condição é verdadeira. Para evitar isso, você pode adicionar uma variável booleana para controlar se o ponto já foi marcado ou não.

Aqui está uma sugestão de modificação na função marcaPonto():

let pontoMarcado = false;

function marcaPonto() {
  if (xBolinha > 590 && !pontoMarcado) {
    meusPontos += 1;
    ponto.play();
    pontoMarcado = true;
  }
  if (xBolinha < 10 && !pontoMarcado) {
    pontosDoOponente += 1;
    ponto.play();
    pontoMarcado = true;
  }
  
  if (xBolinha > 10 && xBolinha < 590) {
    pontoMarcado = false;
  }
}

Teste essa alteração no seu código e veja se a pontuação está sendo atualizada corretamente.

Espero ter ajudado!

Caso tenha dúvidas, estarei a dispoisção.

Abraços e bons estudos!

Sarah,

Meus pontos foramd e 3 em 3 também e consegui alterar modificando os valores das extremidades (não sei se apesar de funcionar, é correto). Mas vi que você colocou uma sugestão aqui mas não entendi algumas coisas nela. Pode explicar, pfv?

let pontoMarcado = false; function marcaPonto() { if (xBolinha > 590 && !pontoMarcado) { meusPontos += 1; ponto.play(); pontoMarcado = true; }