1
resposta

BUG NO JOGO DA BOLINHA

Boa noite, estou tendo duas dificuldades que creio eu, estejam interligadas. A primeira é que minha "raquete" fica saindo para fora da tela. E a segunda, é que com mesmo com o código proposto pelo instrutor, o oponente fica impossivel de fazer ponto. Ai esta meu código, desde já agradeço!

let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro / 2;
let xRaquete = 5;
let yRaquete = 150;
let raquetecomprimento = 10;
let raquetealtura = 90;
let xOponente = 585;
let yOponente = 150
let velocicadeyOponente;
let colidiu = false;
let meuspontos = 0
let pontosdooponente = 0
let chanceDeErrar = 0;

  let velocidadedabolinha = 5;
  let velocidadeYdabolinha = 5;

//sons
let raquetada;
let ponto;
let trilha;

function preload(){

  trilha = loadSound("trilha sonora.mp3");
  ponto = loadSound("ponto.mp3");
  raquetada = loadSound("raquete.mp3");
}


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

function draw() {
  background(0);

  mostrabolinha();
  movimenta();
  //colisaoborda();
  raquete(xRaquete, yRaquete);
  movimentaraquete();
  raquete(xOponente, yOponente);
  //movimentaoponente();
  colisao(xRaquete, yRaquete);
  colisao(xOponente, yOponente);
  placar();
  marcaponto();
}

function mostrabolinha(){

  circle(xBolinha, yBolinha, diametro);
}

function movimenta(){

if(xBolinha + raio > width || xBolinha - raio < 0){
  velocidadedabolinha *= -1
}
    else if(yBolinha + raio > height || yBolinha - raio < 0){
      velocidadeYdabolinha *= -1
          }
}

function colisaoborda(){

xBolinha += velocidadedabolinha;
  yBolinha += velocidadeYdabolinha;
}

function raquete(x,y){

  rect(x, y, raquetecomprimento, raquetealtura);

}

function movimentaraquete(){

  if(keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }

  if(keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }

}


function movimentaoponente(){

  velocidadeyOponente = yBolinha - yOponente - raquetecomprimento / 2 - 30;
  yOponente += velocidadeyOponente + chanceDeErrar
 calculaChanceDeErrar();
}

function colisao(x,y){

  let colidiu = collideRectCircle(x, y, raquetecomprimento, raquetealtura, xBolinha, yBolinha, raio);
  if (colidiu){
    velocidadedabolinha *= -1
    raquetada.play();
  }
}

function placar(){
  textAlign(CENTER)
  textSize(20);
  stroke(220);
  //cor dos contadores
  fill(color(0,191,255));
  rect(150, 10, 40, 20);
  rect(450, 10, 40, 20);

  stroke(0);
  //cor do numero
  fill(color(220));
  text(pontosdooponente, 470, 26)
  text(meuspontos, 170, 26)
  //cor da raquete
  fill(color(75,0,130));

}

function marcaponto(){

  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
    }
}



1 resposta

Olá, Marco! Como está?

Uma sugestão simples para evitar que a raquete ultrapasse as bordas é inserir condições para limitar esse movimento. Para isso você pode escrever uma nova função:

function raqueteBorda(){
  if (yRaquete > 320){
    yRaquete = 320
  } 
  if (yRaquete < 0){
    yRaquete = 0
  }
  if (yRaqueteOponente > 320) {
    yRaqueteOponente = 320
  }
  if (yRaqueteOponente < 0){
    yRaqueteOponente = 0 
  }
}

Alguns alunos também tiveram a mesma dúvida sobre como implementar níveis de dificuldade ou erro aleatório do oponente e vou compartilhar os links para respostas bem legais aqui para você.

Espero que as informações tenham ajudado!

Um abraço e bons estudos!