Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problemas bugs e desavenças

Oiii, acompanhei as aulas bonitinho mas ainda assim tive alguns problemas:

  • mesmo o campo estando delimitado, a bolinha atravessa a raquete do player e some por uns segundos muitas vezes
  • o oponente nunca erra, li o que os outros tentaram ajudar mas não rolou

meu código

//variáveis da bolinha

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

//variáveis do player

let xPlayer=5; let yPlayer=150; let hPlayer=90; let cPlayer=10;

//velocidade da bolinha let velocidadex = 6; let velocidadey= 6;

//variáveis do oponente let xNpc= 585; let yNpc=150; let hNpc=90; let cNpc=10;

//velocidade do oponente let velYNpc;

//Placar do jogo let meusPontos=0; let pontosNpc=0;

function setup() { createCanvas(600, 400); }

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisao(); mostraPlayer(); movimentaPlayer(); verificaColizaoPlayer(); mostraNpc(); movimentaNpc(); verificaColizaoNpc(); incluiPlacar(); pontos(); }

function mostraBolinha(){ circle(xBolinha, yBolinha, diametro); } function mostraPlayer (){ rect(xPlayer, yPlayer, cPlayer, hPlayer) } function movimentaPlayer() { if (keyIsDown(UP_ARROW) ) { yPlayer-=10; } if (keyIsDown(DOWN_ARROW)) { yPlayer+= 10; } }

function movimentaBolinha(){ xBolinha+=velocidadex; yBolinha+=velocidadey } function verificaColisao(){ if (xBolinha+raio > width||xBolinha-raio < 0) { velocidadex=-1 } if (yBolinha +raio> height||yBolinha -raio< 0) { velocidadey=-1 } }

function verificaColizaoPlayer(){ if (xBolinha - raio < xPlayer + cPlayer && yBolinha -raio < yPlayer + hPlayer && yBolinha-raio> yPlayer) { velocidadex*=-1; } } function mostraNpc(){ rect(xNpc, yNpc, cNpc, hNpc)}

function movimentaNpc() { velYNpc= yBolinha- yNpc - hNpc/2 - 40; yNpc+= velYNpc }

function verificaColizaoNpc(){ if (xBolinha + raio > xNpc && yBolinha+ raio> yNpc && yBolinha < yNpc+ hNpc) { velocidadex *=-1; } } function pontos(){ if(xBolinha < 10){ pontosNpc+= 1 } if(xBolinha > 590){ meusPontos += 1; } }

function incluiPlacar(){ fill(255) text(meusPontos, 200, 26); text(pontosNpc, 400, 26); }

1 resposta
solução!

Olá Ana,

No seu código, você colocou na função verificaColisao() que a velocidade da bolinha será apenas igual a -1:

{ velocidadex=-1 }

Para que ela inverta o sentido, você deve inserir um asterisco, que é reconhecido no p5.js como o sinal de multiplicação. Exemplo:

{ velocidadex *=-1 }

Quanto à raquete do oponente não estar errando, você tem que gerar uma variável chancedeerrar. Na última aula do curso, o instrutor passa o código e como fazer. Abaixo colei o código que ele passa no final do curso:

let chanceDeErrar = 0;

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

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

Tente fazer essas alterações e diga se ajudou :D