1
resposta

meus pontos está somando de 3 em 3, ao invés 1 a 1

fiz codigo , porem na soma do placar está somando de 3 em 3, já procurei erro e não achei .

segue meu código.

// Variáveis da bolinha 
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2;

// velocidade da bolinha
let velocidadeXBolinha = 3;
let velocidadeYBolinha = 3;
let raqueteComprimento = 10;
let raqueteAltura = 90;


// Variáveis da Raquete
let xRaquete = 5;
let yRaquete = 150;

// 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);
  incluiPlacar();
  marcaPonto();
  }

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

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


  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 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 incluiPlacar(){
  fill(255)
  text (meusPontos, 278, 26);
  text (pontosDoOponente,321, 26)
}

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

Olá, Diego! Tudo bom contigo?

Existem dois caminhos que podemos seguir para resolver o problema da marcação de pontos. Vamos analisá-los com carinho?

Alterando o diâmetro


A primeira alternativa é a modificação do valor do diâmetro. Em seu código, foi atribuído o número 18 a ele. Abaixo, há a alteração com o novo valor:

let diametro = 20;

Quando aumentamos o valor do diâmetro, consequentemente modificamos o valor do raio, o qual, por ser maior, fará com que xBolinha (coordenada central da bolinha horizontalmente) não alcance os pontos limites (590 e 10) mais rapidamente e com maior facilidade.

Generalizando a função marcaPonto()


Por outro lado, também temos a possibilidade de deixar o valor do diâmetro igual a 18 e somente alterar a função que atua sobre a pontuação dos jogadores. Veja o código abaixo:

function marcaPonto(){
  if(xBolinha > width - raio){
    meusPontos += 1;
  }
  if (xBolinha < raio){
    pontosDoOponente += 1;
  }
}

Note que, ao invés de utilizarmos valores concretos nas condicionais (590 e 10), foi desenvolvida a seguinte lógica:

  • A primeira condicional irá verificar se xBolinha é superior ao width (comprimento da tela) subtraído do raio. Se fôssemos executar os cálculos, tendo como base o diâmetro igual a 18 e o raio igual a 9, chegaríamos no número 591 (que corresponde ao limite da lateral direita)!
  • A segunda condicional irá verificar se xBolinha é inferior ao raio. Se isso for verdade, significa dizer que a posição da bolinha, na tela, corresponde a 9 (valor do raio e limite da lateral esquerda).

Com isso, a bolinha volta a se movimentar normalmente pela tela e, ao colidir com uma das paredes, o jogador terá seus pontos acrescidos em uma unidade!

Caso surjam dúvidas após minha explicação ou ao longo dos seus estudos, lembre-se que você pode contar com o fórum. Fico à disposição para te auxiliar no que for preciso!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.