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

[Dúvida] Oponente nunca erra

Já tentei várias soluções ditas aqui no fórum, mas não consigo fazer o oponente errar. Em 89 ele nunca erra, em 90 erra sempre.

//variáveis da bola
let xBola = 240;
let yBola = 180;
let diametroBola = 20;
let raioBola = diametroBola/2; 

//velocidade da bola
let velocidadeXBola = 5;
let velocidadeYBola = 5;

//variáveis da raquete
let xRaquete = 5;
let yRaquete = 140;
let larguraRaquete = 10;
let alturaRaquete = 85;

//variáveis do oponente
let xOponente = 465;
let yOponente = 140;
let larguraOponente = 10;
let alturaOponente = 85;
let velocidadeYOponente;

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



function setup() {
  createCanvas(480, 360);
}

function draw() {
  background('rgb(91,52,179)') ;
  noStroke () ;
  bola () ;
  divisor () ;
  raquete (xRaquete, yRaquete) ;
  raquete (xOponente, yOponente) ;
  colisaoBorda () ;
  movimentoRaquete () ;
  movimentoOponente () ;
  colisaoRaquete () ;
  colisaoOponente () ;
  placar () ;
  marcarPontos () ;
  xBola += velocidadeXBola ;
  yBola += velocidadeYBola ;

}

function bola (){
  circle(xBola,yBola,diametroBola)
}

function colisaoBorda (){
  if (xBola + raioBola > width || xBola - raioBola < 0) {
     velocidadeXBola *= -1 }

  if (yBola + raioBola > height || yBola - raioBola < 0) {
      velocidadeYBola *= -1 }

}

function divisor (){
  rect(230, 0, 10, 480)
}

function raquete (x, y){
  rect(x, y, larguraRaquete, alturaRaquete)
}

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

function colisaoRaquete (){
  if (xBola - raioBola < xRaquete + larguraRaquete && 
     yBola + raioBola > yRaquete && 
    yBola - raioBola < yRaquete + alturaRaquete)
    velocidadeXBola *= -1;
}

function colisaoOponente (){
  if (xBola + raioBola > xOponente - larguraOponente && 
     yBola + raioBola > yOponente && 
    yBola - raioBola < yOponente + alturaOponente)
    velocidadeXBola *= -1;
}

function movimentoOponente (){
  velocidadeYOponente = yBola - yOponente - 
  larguraRaquete / 2 - 30
  yOponente += velocidadeYOponente 

}

function placar (){
  fill (255)
  text (meusPontos, 185, 26)
  text (meusPontos, 275, 26)
}

function marcarPontos (){
  if (xBola > 470){
      meusPontos += 1;
}
  if (xBola < 10){
     pontosOponente += 1;
  }
}
3 respostas

Poderia tentar incluir essa "probErro" para gerar a probabilidade de acordo com o que você achar necessário, nesse caso está 30%.

function movimentoOponente () { let probErro = random(1); if (prob < 0.3) { velocidadeYOponente = random(-5, 5); } else { velocidadeYOponente = yBola - yOponente - larguraRaquete / 2 - 30; } yOponente += velocidadeYOponente; }

Tentei, mas a raquete do oponente ficou se mexendo travando :(

solução!

Consegui! O erro tava aqui:

function movimentoOponente (){
  velocidadeYOponente = yBola - yOponente - 
  larguraRaquete / 2 - 30
  yOponente += velocidadeYOponente 

Correção:

function movimentoOponente (){
  velocidadeYOponente = (yBola - yOponente - 
  larguraRaquete) / 2 - 30
  yOponente += velocidadeYOponente 

Precisava colocar parênteses antes da divisão pra essa operação matemática ser feita primeiro. Tudo ok.