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

Pontos +2 vs Pontos +1

No início, coloquei a condição if dos pontos dentro da função placar, como segue:

function placar(texto, x, y) {
  fill(255);
  text(texto, x, y);
if(xBolinha - raio <= 0) {
    pontosOponente++;
  } 
  if(xBolinha + raio >= 600) {
    pontosPlayer++;
  }
}

Deste modo, sempre marcava 2 pontos de cada vez, ao invés de somente 1. Mas quando fiz como o professor, e coloquei em uma função à parte a mudança do placar, ficou certinho, marcando 1 ponto. Por que minha primeira solução contabilizava dois de cada vez? E mais uma dúvida, se a bola toca a borda esquerda, então xBolinha - raio == 0 e se toca a borda direita, então xBolinha + raio == 600, certo? Mas quanto testei nesse modelo, não marcou nada. Por quê?

2 respostas
solução!

Olá Bruna,

Vendo a estrutura da função, a única situação que posso imaginar é que você teve que utiliza-la duas vezes no draw(). Uma com os parâmetros do Player e uma com os parâmetros do Oponente.

Caso seja essa a situação. O código ficaria parecido com isso:

function draw() {
    background(0);
    funcao1();
    funcao2();
    placar(textoPlayer, xPlayer, yPlayer);
    placar(textoOponente, xOponente, yOponente);
    funcao3();
    funcao4();
    funcao5();
}

Desta forma o jogo vai verificar duas vezes se houve pontuação, pois a função draw() irá executar a função placar() para o player, verificando os if(). Em seguida irá executar a função placar() para o Oponente, verificando os if() uma segunda vez.

Sendo assim, quando a bolinha tocasse a borda direita os seguinte eventos aconteceriam:

//A bolinha toca;
//Função Placar(player) é executada;
//Condição if(xBolinha + raio >= 600) é atendida;
//Instrução pontosPlayer++ é executada somando um ponto;
//Placar(Oponente) é executada;
//Condição if(xBolinha + raio >= 600) é atendida;
//Instrução pontosPlayer++ é executada somando um ponto;

Ao fim desta sequencia de eventos o jogo terá adicionado dois pontos para o Player.

Quanto a questão do xBolinha - raio == 0 e xBolinha + raio == 600. Provavelmente os cálculos xBolinha - raio e xBolinha + raio nunca resultam exatamente em 0 e 600. Por exemplo, no meu código quando executei console.log para os parâmetros xBolinha, xBolinha + raio e pontosPlayer. Eu obtive os resultados:

(xBolinha, xBolinha + raio, pontosPlayer)
(589, 596.5, 3)
(595, 602.5, 3)
(031, 038.5, 4)

(589, 596.5, 4)
(595, 602.5, 4)
(031, 038.5, 5)

Essa sequência se repete toda vez que o Player marca um ponto.

Se observarmos os dados obtidos podemos ver que xBolinha + raio resultou em 602,5, portando se a condição do if() for xBolinha + raio == 600 ela nunca será verdadeira.

Espero ter ajudado.

Oi Gustavo. Muito obrigada pela resposta. Você estava certíssimo em ambas. Agora clareou para mim. x)