3
respostas

[Dúvida] Continuo sem conseguir marcar pontos. Segue o link e o código abaixo para vocês conseguirem visualizar. Agradeço a ajuda desde já!

https://editor.p5js.org/sousxx/sketches/96QolJ1Zm

//variáveis da bolinha 
let xBolinha = 300;
let yBolinha = 200;
let dBolinha = 15;
let raio = dBolinha/2;

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

//variáveis minha raquete 
let xRaquete = 5;
let yRaquete = 150;

//variáveis ambas raquetes 
let lRaquete = 10;
let hRaquete = 90;

//variáveis do oponente 
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;

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

//sons
let trilha;
let raquetada;
let ponto;

let colidiu = false;
let chanceDeErrar = 0;

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

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  colisaoBordas();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaMinhaRaquete();
  movimentaRaqueteOponente();
  //verificaColisaoMinhaRaquete();
  ColisaoRaqueteBiblioteca(xRaquete, yRaquete);
  ColisaoRaqueteBiblioteca(xRaqueteOponente, yRaqueteOponente);
  placar();
  marcarPontos();
  bolinhaNaoFicaPresa();
}

function mostraBolinha() {
  circle(xBolinha, yBolinha, dBolinha)
}

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

function colisaoBordas() {
  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, lRaquete, hRaquete)
}

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

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

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

function verificaColisaoMinhaRaquete() {
  if (xBolinha - raio < xRaquete + lRaquete &&
      yBolinha - raio < yRaquete + hRaquete &&
      yBolinha + raio > yRaquete) {
    velocidadeXBolinha *= -1;
  }
}

function ColisaoRaqueteBiblioteca(x,y) {
  colidiu = 
    collideRectCircle(x, y, lRaquete, hRaquete, xBolinha, yBolinha, raio)
  if (colidiu) {
    velocidadeXBolinha *= -1;
    raquetada.play(); 
  }
}

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

function marcarPontos() {
  if (xBolinha > 590) {
    meusPontos += 1;
    ponto.play();
  }
  if(xBolinha < 10) {
    pontosOponente += 1;
    ponto.play();
  }
}

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

Buenas Falcone!! Da uma olhada nessa dúvida aqui, acrdito que seja o mesmo problema que o teu

https://cursos.alura.com.br/forum/topico-duvida-oponente-segue-sem-errar-268393

Abs!

Oi Luciano, obrigada pela ajuda. Mas no meu código não há a colisaoRaqueteDoOponente, pois há somente a colisaoRaqueteBiblioteca. Fiz a função da colisaoRaquete e logo em seguida fiz a colisaoRaqueteBiblioteca. Logo, não fiz uma para verificar a colisão da raquete do oponente. Como a colisaoRaquete foi comentada, imaginei que não seria necessário criar uma para o ponente. Essas são as duas funções sobre colisão.

function verificaColisaoMinhaRaquete() {
  if (xBolinha - raio < xRaquete + lRaquete &&
      yBolinha - raio < yRaquete + hRaquete &&
      yBolinha + raio > yRaquete) {
    velocidadeXBolinha *= -1;
  }
}

function ColisaoRaqueteBiblioteca(x,y) {
  colidiu = 
    collideRectCircle(x, y, lRaquete, hRaquete, xBolinha, yBolinha, raio)
  if (colidiu) {
    velocidadeXBolinha *= -1;
    raquetada.play(); 
  }
}

Buenas! Entao, focando na chance de errar do adversario:

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

Esta função esta passando pra raqueteOponente inicialmente a posiçao da bolinha com um desvio de -30. (MENOS 30). Então na segunda linha, deveria passar MENOS a chance de errar, para ir aumentando o erro, se não, conforme aumenta a variavel chanceDeErrar, vai na pratica diminuir o desvio de -30, para +10, quando o valor da variavel chanceDeErrar estiver no maximo. E para que a variavel chanceDeErrar já não vá direto para o valor maximo, uma sugestao no seu caso seria colocar a funcao calculaChanceDeErrar dentro da funçao ColisaoRaqueteBiblioteca.

function ColisaoRaqueteBiblioteca(x,y) {
  colidiu = collideRectCircle(x, y, lRaquete, hRaquete, xBolinha, yBolinha, raio)
  if (colidiu) {
    velocidadeXBolinha *= -1;
    calculaChanceDeErrar ();
    raquetada.play(); 
  }
}

abs