3
respostas

Pontuação de 3 em 3. Fonte do problema desconhecida.

Tentei aplicar a solução aqui abaixo, para um caso similar, mas não resultou em nada.


//Posição no SetUp
let xBolinha = 300;
let yBolinha = 200;

//Propriedades
let diametro = 15;
let velocidadeXBolinha = 2;
let velocidadeYBolinha = 2;
let raio = diametro / 2;
let velocidadeYOponente;

//Posição no SetUp
let xMinhaRaquete = 5;
let yMinhaRaquete = 150;
let yRaqueteOponente = 150;
let xRaqueteOponente = 585;

//Dimensões Raquete
let wRaquete = 10;
let hRaquete = 80;

//Placar do Jogo
let meusPontos = 0;
let pontosOponente = 0;

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

let colidiu = false;

function draw() {
  background('rgba(100%,0%,100%,0.5)');
  mostrarBolinha();
  movimentarBolinha();
  colisaoBolinhaBorda();
  mostrarRaquete(xMinhaRaquete, yMinhaRaquete);
  movimentarMinhaRaquete(xMinhaRaquete, yMinhaRaquete);
  colisaoBolinhaMinhaRaquete();
  verificarColisaoRaquete(xMinhaRaquete, yMinhaRaquete);
  mostrarRaquete(xRaqueteOponente, yRaqueteOponente)
  movimentarRaqueteOponente();
  verificarColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  mostrarPlacar();  
  marcarPonto();
}

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

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

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

function mostrarRaquete(x,y){
rect(x, y, wRaquete, hRaquete);
}

function movimentarMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
      yMinhaRaquete -= 10;
    }
  if (keyIsDown(DOWN_ARROW)){
      yMinhaRaquete += 10;
    }

  }

function colisaoBolinhaMinhaRaquete(){
  if (xBolinha - raio < xMinhaRaquete + wRaquete && yBolinha - raio < yMinhaRaquete + hRaquete && yMinhaRaquete - raio > yMinhaRaquete){
   velocidadeXBolinha *= -1;
  }
}

function colisaoMinhaRaqueteBiblioteca(){
  colidiu = 
  collideRectCircle(xMinhaRaquete, yMinhaRaquete, wRaquete, hRaquete, xBolinha, yBolinha, raio)
  if (colidiu){
    velocidadeXBolinha *= -1
  }
}

function verificarColisaoRaquete(x, y){
  colidiu = 
  collideRectCircle(x, y, wRaquete, hRaquete, xBolinha, yBolinha, raio)
  if (colidiu){
    velocidadeXBolinha *= -1
  }
}



function movimentarRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - wRaquete / 2 - 30;
  yRaqueteOponente += velocidadeYOponente
}

function mostrarPlacar(){
  text(meusPontos, 278, 26)
  text(pontosOponente, 321, 26)
}

function marcarPonto(){
  if (xBolinha > 590){
    meusPontos += 1;
  }
  if (xBolinha < 10){
    pontosOponente += 1;
  }
}
3 respostas

Fala, Guilherme! Tudo bem contigo?

Ao colocar o valor xBolinha < 8 consegue contabilizar somente um ponto

  if (xBolinha < 8){
    pontosOponente += 1;

Faça esse teste e nos dê um retorno

Um abraço!!!

A solução do Cássio é perfeita!

Mas o motivo de isto acontecer é porque o seu diâmetro é de 15 e você está contabilizando 1 ponto quando a bolinha está em 10, neste caso a bolinha permanece em 10 por tempo suficiente para contabilizar mais de 1 ponto.

No curso e na solução do Cássio, foram usados valores próximos ou iguais ao raio da bolinha, para garantir que a mesma permaneça onde você está validando somente tempo o suficiente para que seja contabilizado 1 ponto.

Att, Ariel

Eu tive esse problema, daí fiz assim:

function pontuacao () { if (xBolinha + raioBolinha >= 600) { pontosJogador += 1; } if (xBolinha - raioBolinha <= 0) { pontosOponente += 1; } }