1
resposta

[Bug] bug

//variáveis da Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 13;
let raio = diametro/2;
//velocidade da Bolinha
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;
//variáveis Raquete
let xRaquete = 5;
let yRaquete = 150;
let lRaquete = 10;
let aRaquete = 90;
let vYRaquete = 3;
//variáveis Oponente
let xOponente = 585;
let yOponente = 150;
let lOponente = 10;
let aOponente = 90;
let vYOponente;

let colidiu = false;

//placar jogo
let meusPontos = 0;
let pontosOponente = 0;

let dOponenteBolinha = 0;

//sons do jogo
let raquetada;
let ponto;
let trilha;


function preload()
{
  trilha = loadSound("trilha.mp3");
  ponto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3");
}

function setup() {
  createCanvas(600, 400);
  trilha.loop();
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xOponente, yOponente);
  movimentaMinhaRaquete();
  movimentaRaqueteOponente();
  //verificaColisaoRaquete();
  colisaoRaquetebiblioteca(xRaquete,yRaquete);
  colisaoRaquetebiblioteca(xOponente,yOponente);
  incluiPlacar(meusPontos,150,26);
  incluiPlacar(pontosOponente,450,26);
  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, lRaquete, aRaquete);
}

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

function verificaColisaoRaquete()
{
  if (xBolinha-raio < xRaquete+lRaquete && yBolinha-raio < yRaquete+aRaquete && yBolinha+raio > yRaquete)
  {
    velocidadeXBolinha *= -1;
    //velocidadeYBolinha *= -1;
  }

}

function colisaoRaquetebiblioteca(x,y)
{
  colidiu = collideRectCircle(x,y,lRaquete,aRaquete,xBolinha,yBolinha,raio);
  if(colidiu)
  {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function movimentaRaqueteOponente()
{
  vYOponente = yBolinha - yOponente - lOponente/2 -dOponenteBolinha;
  yOponente += vYOponente;

  if(pontosOponente > meusPontos)
  {
    dOponenteBolinha = 100;
  }
  if(pontosOponente < meusPontos && dOponenteBolinha > 50)
  {
    dOponenteBolinha -= 3;
  }
}

function incluiPlacar(pontos,x,y)
{
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255,140,0));
  rect(x-20, y-16, 40, 20);
  fill(255);
  text(pontos, x, y);
}

function marcaPonto()
{
  if (xBolinha+raio > width)
  {
    meusPontos += 1;
    ponto.play();
  }
  if(xBolinha-raio < 0)
  {
    pontosOponente += 1;
    ponto.play();
  }
}

} preciso de ajuda para ver se há algo errado

1 resposta

Olá Peterson, tudo bem? espero que sim

Desde já gostaria de agradecer a paciência em aguardar uma resposta ou uma revisão do seu código no seu caso.

Com base no código enviado por ti não percebi nenhum bug que prejudica a experiência do jogador , observando seu código, em geral ele está muito bom, ficou limpo e organizado, seguindo o padrão da aula.

Mas é claro que há espaços para evoluir o seu código cada vez mais, uma dica legal é limitar o movimento da raquete para que o jogador quando pressionar a tecla de baixo ou de ir para cima a raquete não suma da tela.

deste modo, criando a função:

function podeSeMover(){
  return yRaquete > -15;
}

function podeSeMover1(){
  return yRaquete < 350;
} 

e depois só chamá-la na função responsável por movimentar a raquete

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){    
    if(podeSeMover()){
      yRaquete -= vYRaquete;
    }  
}  
  if (keyIsDown(DOWN_ARROW)){
    if(podeSeMover1()){
      yRaquete += vYRaquete;
    }      
  }
}

A lógica é a seguinte: a function podeSeMover caso retorne true ela permite a ação do if que é adicionar ou diminuir o valor do yRaquete com base no acionamento das teclas.

Seu código com essa impletação fica assim:

//variáveis da Bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 13;
let raio = diametro/2;
//velocidade da Bolinha
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;
//variáveis Raquete
let xRaquete = 5;
let yRaquete = 150;
let lRaquete = 10;
let aRaquete = 90;
let vYRaquete = 3;
//variáveis Oponente
let xOponente = 585;
let yOponente = 150;
let lOponente = 10;
let aOponente = 90;
let vYOponente;

let colidiu = false;

//placar jogo
let meusPontos = 0;
let pontosOponente = 0;

let dOponenteBolinha = 0;

//sons do jogo
let raquetada;
let ponto;
let trilha;


function preload()
{
  trilha = loadSound("trilha.mp3");
  ponto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3");
}

function setup() {
  createCanvas(600, 400);
  trilha.loop();
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xOponente, yOponente);
  movimentaMinhaRaquete();
  movimentaRaqueteOponente();
  //verificaColisaoRaquete();
  colisaoRaquetebiblioteca(xRaquete,yRaquete);
  colisaoRaquetebiblioteca(xOponente,yOponente);
  incluiPlacar(meusPontos,150,26);
  incluiPlacar(pontosOponente,450,26);
  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, lRaquete, aRaquete);
}

function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){    
    if(podeSeMover()){
      yRaquete -= vYRaquete;
    }  
}  
  if (keyIsDown(DOWN_ARROW)){
    if(podeSeMover1()){
      yRaquete += vYRaquete;
    }      
  }
}


function verificaColisaoRaquete()
{
  if (xBolinha-raio < xRaquete+lRaquete && yBolinha-raio < yRaquete+aRaquete && yBolinha+raio > yRaquete)
  {
    velocidadeXBolinha *= -1;
    //velocidadeYBolinha *= -1;
  }

}

function colisaoRaquetebiblioteca(x,y)
{
  colidiu = collideRectCircle(x,y,lRaquete,aRaquete,xBolinha,yBolinha,raio);
  if(colidiu)
  {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function movimentaRaqueteOponente()
{
  vYOponente = yBolinha - yOponente - lOponente/2 -dOponenteBolinha;
  yOponente += vYOponente;

  if(pontosOponente > meusPontos)
  {
    dOponenteBolinha = 100;
  }
  if(pontosOponente < meusPontos && dOponenteBolinha > 50)
  {
    dOponenteBolinha -= 3;
  }
}

function incluiPlacar(pontos,x,y)
{
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255,140,0));
  rect(x-20, y-16, 40, 20);
  fill(255);
  text(pontos, x, y);
}

function marcaPonto()
{
  if (xBolinha+raio > width)
  {
    meusPontos += 1;
    ponto.play();
  }
  if(xBolinha-raio < 0)
  {
    pontosOponente += 1;
    ponto.play();
  }
}

function podeSeMover(){
  return yRaquete > -15;
}

function podeSeMover1(){
  return yRaquete < 350;
}

Mas fica o desafio para fazer outros upgrades, caso tenha outras dúvida me coloco a disposição, bons estudos e até mais!

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