1
resposta

O jogo para quando a bolinha bate na borda

Tentei reutilizar os códigos usados no p5.js em um arquivo de html com o objetivo de conseguir rodar o jogo do pong em uma pagina de html se o uso do p5.js Web. Consegui rodar o jogo na página de html, mas tem um bug que até agora não consegui resolver que é quando a bolinha colide no eixo x da borda e o jogo para. Alguém consegue me ajudar?

O arquivo html index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="p5.js"></script> //  utilizei a própria biblioteca do p5.js
    <link rel="stylesheet" type="text/css" href="style.css" />
    <meta charset="utf-8" />
  </head>
  <body>
    <script src="sketch.js"></script>
    <script src="p5.collide2d.js"></script>
  </body>
</html>

O arquivo sketch.js

//variaveis da bolinha
let xBolinha = 300
let yBolinha = 200
let diametro = 15
let raio = diametro / 2

//velocidade da bolinha
let velocidadeXBolinha = 6
let velocidadeYBolinha = 6

//varaiveis da raquete
let xRaquete = 0
let yRaquete = 150
let raqueteComprimento = 10
let raqueteAltura = 90

//variaveis do oponente
let xRaqueteOponente = 585
let yRaqueteOponente = 150
let velocidadeYOponente
let chanceDeErrar = 0

let colidiu = false

//placar do jogo
let meusPontos = 0
let pontosOponente = 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()
  movimentaMinhaRaquete()
  mostraRaquete(xRaquete, yRaquete)
  mostraRaquete(xRaqueteOponente, yRaqueteOponente)
  // verificaColisaoRaquete()
  colisaoRaqueteLib(xRaquete, yRaquete)
  colisaoRaqueteLib(xRaqueteOponente, yRaqueteOponente)
  movimentaRaqueteOponente()
  incluirPlacar()
  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, raqueteComprimento, raqueteAltura)
}

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

function verificaColisaoRaquete() {
  if (
    xBolinha - raio < xRaquete + raqueteComprimento &&
    yBolinha - raio < yRaquete + raqueteAltura &&
    yBolinha + raio > yRaquete
  ) {
    velocidadeXBolinha *= -1
  }
}

function colisaoRaqueteLib(x, y) {
  colidiu = collideRectCircle(
    x,
    y,
    raqueteComprimento,
    raqueteAltura,
    xBolinha,
    yBolinha,
    raio
  )
  if (colidiu) {
    velocidadeXBolinha *= -1
    raquetada.play()
  }
}

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

function incluirPlacar() {
  stroke(255) //contorno
  textSize(16)
  textAlign(CENTER)
  fill(color(255, 140, 0))
  rect(150, 10, 40, 20)
  rect(450, 10, 40, 20)
  fill(255)
  text(pontosOponente, 470, 26)
  text(meusPontos, 170, 26)
}

function marcaPonto() {
  if (xBolinha == 594) {
    meusPontos += 1
    ponto.play()
  }
  if (xBolinha == velocidadeXBolinha && velocidadeXBolinha > 0) {
    pontosOponente += 1
    ponto.play()
  }
}

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

Oi oi, Herisson! Tudo bem por aí?

É provável que a collide2d não esteja funcionando porque falta você baixar a biblioteca para o seu computador e passar o caminho corretamente no index.html.

Vou deixar dois passos para você verificar, tudo certo?

  • Você realizou o download da biblioteca para sua máquina?
  • Sugiro também que você deixe a biblioteca na pasta raiz do projeto, uma vez que o caminho orientado foi esse <script src="p5.collide2d.js"></script>

Complete os passos e teste o jogo novamente para ver se funcionou direitinho :)

Espero que tenha ajudado, fico à disposição!

Um abraço e bons estudos!