3
respostas

Quebrei o jogo!

Terminei o curso e quis fazer umas melhorias no game, adicionando um vencedor e uma mensagem na tela seguido de musica quando alguém ganhasse, porém quando aperto play para testar o P5 trava completamente, não sei o porque ou qual seria o comando que o esta fazendo bugar sem parar, o código no momento está assim (vou tentar trocar o alert por um texto normal e ver se resolve pois os travamentos começaram depois que o primeiro alerto entrou em loop infinito):

let xBolinha = 300;
var yBolinha = 200;
let diametro = 20;
let raio = diametro / 2

let velocidadeXbolinha = 5;
let velocidadeYbolinha = 5;

let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 06;
let raqueteAltura = 100;

let xRaqueteOponente = 590;
let yRaqueteOponente = 150;
let velocidadeYOponente;

let colidiu = false;

let meusPontos = 0
let pontosOponente = 0

let raquetada;
let somDoPonto;
let trilhaSonora;
let vitoria;
let derrota;

let fimFim = 0

let chanceDeErrar;

function preload(){
  trilha = loadSound("trilha.mp3");
  somDoPonto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3");
  vitoria = loadSound("X2Download.com - Happy Wheels victory green screen (128 kbps).mp3");
  derrota = loadSound("sad_naruto.mp3");
}

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

function draw() {
  background(0);
  criaBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaBola();
  verificaColisaoRaquete(xRaquete, yRaquete);
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  colisor();
  movimentaMinhaRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  incluiPlacar();
  marcaPonto();
  paraLoop();
  fimDeJogo();
}

function colisor(){
  if (xBolinha + raio > width || xBolinha - raio < 0){
    velocidadeXbolinha *= -1
  }

  if (yBolinha + raio > height || yBolinha - raio <0){
    velocidadeYbolinha *= -1

  }
}

function movimentaBola(){
  xBolinha += velocidadeXbolinha
  yBolinha += velocidadeYbolinha
}

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

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(x, y) {
    colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadeXbolinha *= -1;
      raquetada.play();
    }

}

function calculaChanceDeErrar() {
  if (pontosOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento/2 - 100;
  yRaqueteOponente += velocidadeYOponente;
  calculaChanceDeErrar();
}

function incluiPlacar(){
  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(pontosOponente, 470, 26);

}

function marcaPonto(){
  if (xBolinha >590){
    meusPontos += 1;
    somDoPonto.play();
  } if (xBolinha <10){
    pontosOponente += 1;
    somDoPonto.play();
  }
}

function paraLoop(){
   if (meusPontos <=15){
     trilha.stop();
   } if (pontosOponente <= 15){
     trilha.stop();
   }
}


function fimDeJogo(){
  while (fimFim <= 1){
  if (meusPontos > 15){
    alert("Player 1 ganhou!");
    vitoria.play();
    fimFim++
  }
 if (pontosOponente > 15){
   alert("Você Perdeu! :c");
   derrota.play();
   fimFim++
 }
 }
}

link do game: https://editor.p5js.org/Ryuuji_Staz/sketches/Wmi4WfWKu

3 respostas

tirei o alert mas ele continua quebrado :c

let xBolinha = 300;
var yBolinha = 200;
let diametro = 20;
let raio = diametro / 2

let velocidadeXbolinha = 5;
let velocidadeYbolinha = 5;

let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 06;
let raqueteAltura = 100;

let xRaqueteOponente = 590;
let yRaqueteOponente = 150;
let velocidadeYOponente;

let colidiu = false;

let meusPontos = 0
let pontosOponente = 0

let raquetada;
let somDoPonto;
let trilhaSonora;
let vitoria;
let derrota;

let fimFim = 0

let chanceDeErrar;

function preload(){
  trilha = loadSound("trilha.mp3");
  somDoPonto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3");
  vitoria = loadSound("X2Download.com - Happy Wheels victory green screen (128 kbps).mp3");
  derrota = loadSound("sad_naruto.mp3");
}

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

function draw() {
  background(0);
  criaBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaBola();
  verificaColisaoRaquete(xRaquete, yRaquete);
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  colisor();
  movimentaMinhaRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  incluiPlacar();
  marcaPonto();
  paraLoop();
  fimDeJogo();
}

function colisor(){
  if (xBolinha + raio > width || xBolinha - raio < 0){
    velocidadeXbolinha *= -1
  }

  if (yBolinha + raio > height || yBolinha - raio <0){
    velocidadeYbolinha *= -1

  }
}

function movimentaBola(){
  xBolinha += velocidadeXbolinha
  yBolinha += velocidadeYbolinha
}

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

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(x, y) {
    colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadeXbolinha *= -1;
      raquetada.play();
    }

}

function calculaChanceDeErrar() {
  if (pontosOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento/2 - 100;
  yRaqueteOponente += velocidadeYOponente;
  calculaChanceDeErrar();
}

function incluiPlacar(){
  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(pontosOponente, 470, 26);

}

function marcaPonto(){
  if (xBolinha >590){
    meusPontos += 1;
    somDoPonto.play();
  } if (xBolinha <10){
    pontosOponente += 1;
    somDoPonto.play();
  }
}

function paraLoop(){
   if (meusPontos <=15){
     trilha.stop();
   } if (pontosOponente <= 15){
     trilha.stop();
   }
}


function fimDeJogo(){
  while (fimFim <= 1){
  if (meusPontos > 15){
    fill (0, 191, 255);
    rect(150, 100, 300, 200);
    fill (255, 105, 180);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Você Venceu!!!", 185, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
    vitoria.play();
    fimFim++
  }
 if (pontosOponente > 15){
   fill (0, 191, 255);
    rect(150, 100, 300, 200);
    fill (255, 105, 180);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Você Perdeu! :c", 185, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
   derrota.play();
   fimFim++
 }
 }
}

Consegui fazer funcionar, mas agora o problema é o som, esta tão atrasado que parece que peguei um vírus de terror dos anos 2000

let xBolinha = 300;
var yBolinha = 200;
let diametro = 20;
let raio = diametro / 2

let velocidadeXbolinha = 5;
let velocidadeYbolinha = 5;

let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 06;
let raqueteAltura = 100;

let xRaqueteOponente = 590;
let yRaqueteOponente = 150;
let velocidadeYOponente;

let colidiu = false;

let meusPontos = 0
let pontosOponente = 0

let raquetada;
let somDoPonto;
let trilhaSonora;
let vitoria;
let derrota;

let fimFim = 0

let chanceDeErrar;

function preload(){
  trilha = loadSound("trilha.mp3");
  somDoPonto = loadSound("ponto.mp3");
  raquetada = loadSound("raquetada.mp3");
  vitoria = loadSound("X2Download.com - Happy Wheels victory green screen (128 kbps).mp3");
  derrota = loadSound("sad_naruto.mp3");
}

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

function draw() {
  background(0);
  criaBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaBola();
  verificaColisaoRaquete(xRaquete, yRaquete);
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  colisor();
  movimentaMinhaRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  incluiPlacar();
  marcaPonto();
  paraLoop();
  fimDeJogo();
}

function colisor(){
  if (xBolinha + raio > width || xBolinha - raio < 0){
    velocidadeXbolinha *= -1
  }

  if (yBolinha + raio > height || yBolinha - raio <0){
    velocidadeYbolinha *= -1

  }
}

function movimentaBola(){
  xBolinha += velocidadeXbolinha
  yBolinha += velocidadeYbolinha
}

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

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(x, y) {
    colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
    if (colidiu){
        velocidadeXbolinha *= -1;
      raquetada.play();
    }

}

function calculaChanceDeErrar() {
  if (pontosOponente >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 40
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 35
    }
  }
}

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento/2 - 100;
  yRaqueteOponente += velocidadeYOponente;
  calculaChanceDeErrar();
}

function incluiPlacar(){
  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(pontosOponente, 470, 26);

}

function marcaPonto(){
  if (xBolinha >590){
    meusPontos += 1;
    somDoPonto.play();
  } if (xBolinha <10){
    pontosOponente += 1;
    somDoPonto.play();
  }
}

function paraLoop(){
   if (meusPontos >=3){
     trilha.stop();
   } if (pontosOponente >= 3){
     trilha.stop();
   }
}


function fimDeJogo(){
  if (meusPontos > 2){
    fill (0, 191, 255);
    rect(150, 100, 300, 200);
    fill (255, 105, 180);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Você Venceu!!!", 185, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
    vitoria.play();
    fimFim++
  }
 if (pontosOponente > 2){
   fill (0, 191, 255);
    rect(150, 100, 300, 200);
    fill (255, 105, 180);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Você Perdeu! :c", 185, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
   derrota.play();
 }

}

Ola bom dia , creio que o defeito do seu código inicial era que anteriormente o while estava menor ou igual a 1 ou seja , o jogo não rodava porque estava sempre menor que 1 , neste abaixo modifiquei os sinais para >=1 poderia verificar se roda ? while (fimFim >= 1){ if (meusPontos > 15){ alert("Player 1 ganhou!"); vitoria.play(); fimFim++ } if (pontosOponente > 15){ alert("Você Perdeu! :c"); derrota.play(); fimFim++ } } }