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

Jogo Pong, bolinha raquete o adversario nunca erra e da bug quando acelera movimento Bolinha.

Guilherme boa tarde, segui o projeto no P5.JS como ia explicando, porém, a function verificaColisaoRaquete() e function verificaColisaoRaqueteAdversario(), fiz direto no programa como mostrou no início, antes de baixar um código alternativo do forum do P5.JS. Contudo, estou tendo algumas dificuldades no código do jogo. let velocidadeXBolinha = 5; let velocidadeYBolinha = 5; Não consigo aumentar a velocidade, porque a bolinha passa direto pela raquete do adversario, e entra em loop de pontos. function movimentaRaqueteAdversario() Nessa mesmo aumentando as chances de erro, o adversario nunca erra, ae se aumento muito, ele nunca acerta. Pode verificar onde estou errando nessas partes, por favor?

//Códico completo abaixo;

let xBolinha = 300; let yBolinha = 200; let diametroBolinha = 25; let raioBolinha = diametroBolinha/2; let velocidadeXBolinha = 5; let velocidadeYBolinha = 5; let xRaquete = 5; let yRaquete = 150; let larguraRaquete = 5; let alturaRaquete = 80; let xRaqueteAdversario = 590; let yRaqueteAdversario = 150; let chanceDeErrar = 0; let velocidadeYAdversario; let meusPontos = 0; let pontosAdversario = 0; 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(); velocidadeBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentaMinhaRaquete(); verificaColisaoRaquete(); mostraRaquete(xRaqueteAdversario, yRaqueteAdversario); movimentaRaqueteAdversario(); verificaColisaoRaqueteAdversario(); incluiPlacar(); marcaPonto(); }

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

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

function verificaColisaoBorda() { if(xBolinha + raioBolinha > width || xBolinha - raioBolinha < 0) { velocidadeXBolinha *= -1; } if(yBolinha + raioBolinha > height || yBolinha - raioBolinha < 0) { velocidadeYBolinha *= -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 verificaColisaoRaquete() { if(xBolinha - raioBolinha < xRaquete + larguraRaquete && yBolinha - raioBolinha < yRaquete + alturaRaquete && yBolinha + raioBolinha > yRaquete) { velocidadeXBolinha *= -1; raquetada.play(); } }

function movimentaRaqueteAdversario() { velocidadeYAdversario = (yBolinha - yRaqueteAdversario - larguraRaquete / 2) - 30; yRaqueteAdversario += velocidadeYAdversario; calculaChanceDeErrar() }

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

function verificaColisaoRaqueteAdversario() { if(xBolinha + raioBolinha > xRaqueteAdversario + larguraRaquete && yBolinha - raioBolinha < yRaqueteAdversario + alturaRaquete && yBolinha + raioBolinha > yRaqueteAdversario) { velocidadeXBolinha *= -1; raquetada.play(); } }

function incluiPlacar () { stroke(255); textAlign(CENTER); textSize(16); fill(color(255, 140, 0)); rect(130, 10, 40, 20); fill(255); text(meusPontos, 150, 26); fill(color(255, 140, 0)); rect(430, 10, 40, 20); fill(255); text(pontosAdversario, 450, 26); }

function marcaPonto() { if(xBolinha + raioBolinha > 599) { meusPontos += 1; ponto.play(); } if(xBolinha - raioBolinha < 1) { pontosAdversario += 1; ponto.play(); } }

2 respostas

Olá, Jefytter! Tudo bem com você?

Desculpe a demora em responder você mas aqui vamos nós :)

Observei seu código e em primeiro lugar gostaria de parabenizar seu esforço e dedicação. O projeto está legível e muito bem organizado, características essenciais ao trabalho do desenvolvedor.

Em relação ao bug na colisão, o primeiro ponto de atenção é ao incremento na function movimentaRaqueteAdversario(), você apenas esqueceu de somar a chanceDeErrar.

E na function calculaChanceDeErrar() eu apenas alterei os valores para a colisão ficar mais aparente.

Vou deixar o código abaixo para você verificar

function movimentaRaqueteAdversario() {
  velocidadeYAdversario = yBolinha - yRaqueteAdversario - alturaRaquete / 2 - 30;
  yRaqueteAdversario += velocidadeYAdversario + chanceDeErrar; //bem aqui precisa inserir a chanceDeErrar
  calculaChanceDeErrar();
}

function calculaChanceDeErrar() {
  if (pontosAdversario >= meusPontos) {
    chanceDeErrar += 1
    if (chanceDeErrar >= 39){
    chanceDeErrar = 100
    }
  } else {
    chanceDeErrar -= 1
    if (chanceDeErrar <= 35){
    chanceDeErrar = 80
    }
  }
}

Espero que as informações tenham ajudado!

Um abraço e sucesso na jornada!

Bons estudos!

solução!

Obrigado Camila,

Ajudou muito, identificar onde eu estava errando.

Agradecido!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software