2
respostas

Jogo Pong - pronto

Percebi que o jogo apresentou alguns problemas como não reconhecer a raquete do jogador mesmo o codigo estando de acordo com os videos e as vezes a bola fica presa com a raquete e adiciona muitos pontos sem necessidade, gostaria de saber como solucionar

Aqui esta o codigo final do jogo:

//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;

//variaveis da raquetejogador let xRaquete = 5; let yRaquete = 150; let larguraRaquete = 10; let alturaRaquete = 90;

//variaveis da raqueteoponente let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

//colisao entre bolinha e raquete let colisao = false;

//placar do jogo let pontosJogador = 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(); colisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentaRaqueteJogador(); colisaoRaquete(); verificaColisaoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); incluiPlacar(); marcaPonto(); }

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

function movimentaBolinha() { xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha; }

function colisaoBorda() { 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, larguraRaquete, alturaRaquete); }

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

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

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

function verificaColisaoRaquete(x, y) { colisao = collideRectCircle ( x , y , larguraRaquete , alturaRaquete , xBolinha , yBolinha , raio ) ; if(colisao) { velocidadeXBolinha *= -1; raquetada.play(); } }

function movimentaRaqueteOponente() { velocidadeYOponente = yBolinha - yRaqueteOponente - larguraRaquete /2 - 40; yRaqueteOponente += velocidadeYOponente; }

function incluiPlacar() { stroke(255); textAlign(CENTER); textSize(16); fill(color(255, 140, 0)); rect(150, 10, 40, 20); fill(255); text(pontosJogador, 170, 26); fill(color(255, 140, 0)); rect(450, 10, 40, 20); fill(255); text(pontosOponente, 470, 26); }

function marcaPonto() { if (xBolinha > 590) { pontosJogador += 1; ponto.play(); }

if (xBolinha < 10){ pontosOponente += 1; ponto.play(); } }

e o link de acesso: https://editor.p5js.org/mariaeugenia907/sketches/AJpshAPxW

2 respostas

Olá, Maria! Tudo certo?

Testei seu jogo e pude perceber que há duas funções para a colisão da raquete do jogador e por isso estava ocorrendo o conflito. Eu apenas comentei a colisaoRaquete() na draw() que a colisão da raquete do jogador funcionou, olha só:

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisaoBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaRaqueteJogador();
  //colisaoRaquete(); <<<< comentei aqui
  verificaColisaoRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();
}

Sobre o problema com a bolinha presa na raquete... Realmente esse é um bug do jogo. A lógica da colisão funciona excluindo a parte superior e inferior da raquete enquanto ela se movimenta, e o problema surge porque existe a colisão da raquete e a colisão da borda lateral, então quando a bolinha ultrapassa essa área, ela quica entre os dois.

Uma aluna aqui da Alura teve uma ideia genial para solucionar o problema, vou compartilhar o link do tópico aqui para você:

Obrigada por compartilhar suas projeto e dúvidas conosco!

Espero que as informações tenham ajudado!

Um abraço e bons estudos!

Nossa !! Eu não percebi, muito obrigada pela ajuda!!