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

Raquete do oponente indo pra baixo e sumindo da tela do jogo

Assim que coloquei a função calculaChancedeErrar(); a raquete do oponente após iniciado jogo sai da tela. Alguém teve algo parecido?

4 respostas

Olá, Álvaro! Tudo bom?

Certamente é algum problema no seu código. Você poderia compartilhar o link do seu projeto para que eu possa visualizar melhor?

Fico no aguardo.

Tudo sim e com você?

Segue o link https://editor.p5js.org/silvalvaro/sketches/RDMXGMFVR.

solução!

Olá, Álvaro! O problema é que na função movimenta raquete oponente você calculou de acordo com a vecidade y da bolinha e não o y da raquete. A correspondência equivocada acabou gerando o bug na raquete, olha só no código.

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;

//variáveis raquete
let xRaquete = 5;
let yRaquete = 150;
let larguraRaquete = 10;
let alturaRaquete = 90;

let colidiu = false;

//variáveis raquete do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let yVelocidadeOponente;
let chanceDeErrar = 0;

//velocidade da bolinha
let xVelocidadeBolinha = 10;
let yVelocidadeBolinha = 10;

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

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

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

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //verificaColisaoRaquete();
  VerificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  VerificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPontos();
  //multiplayer();

  bolinhaNaoFicaPresa();
}

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

function movimentaBolinha(){
  xBolinha += xVelocidadeBolinha;
  yBolinha += yVelocidadeBolinha;
}

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

function mostraRaquete (x, y){
  rect(x, y, larguraRaquete, alturaRaquete);  
}

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

function verificaColisaoRaquete(){
  if(xBolinha - raio < xRaquete + larguraRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){
    xVelocidadeBolinha *= -1;
    raquetada.play();
  }
}

function VerificaColisaoRaquete(x, y){
  colidiu = collideRectCircle(x, y, larguraRaquete, alturaRaquete, xBolinha, yBolinha, raio);
  if(colidiu){
    xVelocidadeBolinha *= -1;
    raquetada.play();
  }
}
function movimentaRaqueteOponente(){
  yVelocidadeOponente = yBolinha - yRaqueteOponente - larguraRaquete /2 - 30;
  yRaqueteOponente += yVelocidadeOponente + chanceDeErrar; //nesta parte do código que a correspodência foi feita de forma incorreta
  calculaChanceDeErrar();

}

function incluiPlacar(){
  stroke(255);
  textAlign(CENTER);
  textSize(16);
  fill(color(255, 140, 0));  
  rect (150, 10, 40, 20);
  fill(255);
  text (meusPontos, 170, 26);
  fill(color(255, 140, 0));
  rect (450, 10, 40, 20);
  fill(255);
  text (pontosDoOponente, 470, 26);
}
function marcaPontos(){
  if (xBolinha > 590){
    meusPontos += 1;
    ponto.play();
  }
  if (xBolinha < 10){
    pontosDoOponente += 1;
    ponto.play();
  }
}
function calculaChanceDeErrar() {
  if (pontosDoOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

function bolinhaNaoFicaPresa(){
    if (xBolinha - raio < 0){
    xBolinha = 23
    }
}


Obrigado Camila, acabei não percebendo o erro!