2
respostas

[Dúvida] raquete do oponente não erra nunca.

boa noite tentei solucionar esse erro de todas as formas possíveis que encontrei aqui no fórum e em outros navegadores mas nada funcionou. ou a raquete não erra nunca, ou ela erra sempre, ou ela erra toda vez que eu erro também. usei todos os códigos que foram sugeridos para outras pessoas com a mesma dúvida que a minha mas nada resolveu. vou deixar o código aqui para quem puder dar uma olhada e me ajudar porque já estou há umas 4 horas olhando dicas e tentando arrumar sozinha.

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

//velocidade da bolinha
let velocidadeXbolinha = 6;
let velocidadeYbolinha = 6;

//variaveis da raquete
let xRaquete = 2;
let yRaquete = 150;
let raqueteLargura = 10;
let raqueteAltura = 90;

//variaveis do oponente
let xRaqueteOponente = 588;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let chanceErrar = 0;

//placar do jogo
let meusPontos = 0;
let pontosOponente = 0;

let colidiu = false;

//sons do jogo
let raquetada;
let ponto;
let trilha;


function preload(){
  trilha = loadSound ("ariana grande 3435.mp3");
  ponto = loadSound ("ponto.mp3");
  raquetada = loadSound ("raquetada.mp3");
}

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

function draw(){
  background(0);
  mostraBolinha();
  movimentaBolinha();
  reconheceBorda();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  //colisaoRaquete();
  colisaoRaqueteBiblioteca(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente)
  movimentaRaqueteOponente();
  colisaoRaqueteBiblioteca(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();
  calculaChanceDeErrar();
  bolinhaNaoFicaPresa();

}

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

function movimentaBolinha(){
  xBolinha += velocidadeXbolinha;
  yBolinha += velocidadeYbolinha;
}

function reconheceBorda(){
   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, raqueteLargura, raqueteAltura)
}

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

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

function colisaoRaqueteBiblioteca(x, y){
  colidiu =
  collideRectCircle(x, y, raqueteLargura, raqueteAltura, xBolinha, yBolinha, raio);
  if (colidiu){
    velocidadeXbolinha *= -1;
    calculaChanceDeErrar();
    raquetada.play();
  }
}

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

function incluiPlacar(){
  stroke (255);
  textAlign (CENTER);
  textSize (18);
  fill (color (216, 191, 216));
  rect (197, 19, 50, 30)
  fill (255);
  text (meusPontos, 220, 40);
  fill (color (216, 191, 216));
  rect (347, 19, 50, 30);
  fill (255);
  text (pontosOponente, 370, 40);
}

function marcaPonto(){
  if (xBolinha > 597){
    meusPontos += 1;
    ponto.play();
  }
  if (xBolinha < 15){
    pontosOponente += 1;
    ponto.play();
  }
}

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

function bolinhaNaoFicaPresa(){
    if (xBolinha - raio < 0){
      xBolinha = 23
    }
    if (xBolinha + raio > 600){
      xBolinha = 580
    }
}
2 respostas

oi nathália ! Eu estava a responder outro t+opico sobre essa confusão que o pessoal está a fazer com relação aos valores Altura e Comprimento! Espero que eles façam algo com relação a isso, nas próximas atualizações. Vamos lá:

Na "function movimentaRaqueteOponente()" , você colocou que a " ...raqueteLargura / 2 - 30 " . Quando você declarou "let raqueteLargura = 10". No seu caso, vc colocou a altura da raquete que é 90, na largura. Experimente trocar no seu código, a raqueteLargura por raqueteAltura. Mas antes, perceba onde a bolinha bate na raquete, com raqueteLargura na função!! Agora mude para raqueteAltura, e vais ver que a bolinha , agora colide bem no canto!! Agora coloque um valor alto, tipo uns 80, 90... Percebeu a diferença?

Veja que o instrutor pede para pegarmos o comprimento da raquete , dividirmos por 2 e subtrair 30!!! E aí está confusão, ele diz comprimento da raquete. Mas imagine que se o comprimento da raquete for 10, como dividimos por 2 e ainda subtraímos 30? Isso só pode ser com o 90, só que para esse valor ela usa a raqueteAltura. E raqueteComprimento = 10. Mas se usar o raciocínio de que é mais provável que deve ser dividido o 90 do que o 10, vc já entende quem tem que ser Altura e Largura(comprimento). Espero ter ajudado!!!!!! Diga alguma coisa!! Bons estudos!!

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteLargura / 2 - 30;
  yRaqueteOponente += velocidadeYOponente + chanceErrar
  calculaChanceDeErrar();
}
let yRaquete = 150;
let raqueteLargura = 10;
let raqueteAltura = 90;

boa noite, romeu troquei aqui conforme você salientou porque realmente faz sentido e ficou assim

function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteAltura / 2 - 30;
  yRaqueteOponente += velocidadeYOponente + chanceErrar
  calculaChanceDeErrar();

porém a raquete continua jogando sem errar, como se não existisse nenhuma margem de erro. e mesmo que eu mude os valores da subtração também não resolve.

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