1
resposta

Computador Invencível

Boa noite! segui o passo a passo do professor, utilizei o código "chanceDeErrar", porém a máquina continuou invencível. Alterei para o método math.random e mesmo assim, continuou invencível. Alguém poderia mostrar o meu erro, para que eu não o reproduza mais? Desde já agradeço.

let colisao = false;

//tamanho da quadra
let xQuadra = 600;
let yQuadra = 400;

let meusPontos = 0;
let pontosOponente = 0;

//variáveis da bolinha
let xBolinha = xQuadra / 2;
let yBolinha = yQuadra / 2;
let dBolinha = 15
let raio = dBolinha / 2;

//velocidade bolinha
let xVelocidade = 8;
let yVelocidade = 8;

//Tamanho da Raquete1
let xRaquete1 = 5;
let yRaquete1 = 170;
let wRaquete1 = 10;
let hRaquete1 = 70;

//Raquete do Oponente
let xRaquete2 = 585;
let yRaquete2 = 170; 
let velocidadeYoponente;
let chanceDeErrar = 0;

//cor da quadra
let rQuadra = 100;
let gQuadra = 150;
let bQuadra = 100;

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

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

function setup() {
  createCanvas(xQuadra, yQuadra);
  trilha.loop();
}

function draw() {
  background(rQuadra,gQuadra,bQuadra);
  desenhoBolinha();
  movimentoBolinha();
  colisaoBorda();
  raqueteJogador1(xRaquete1, yRaquete1);
  movimentoRaquete1();
  //colisaoRaquete();
  colisaoRaqueteBiblioteca(xRaquete1, yRaquete1);
  raqueteJogador1(xRaquete2, yRaquete2);
  movimentoRaqueteOponente();
  colisaoRaqueteBiblioteca(xRaquete2, yRaquete2);
  incluirPlacar();
  marcador();
}

function desenhoBolinha(){
  fill(255)
   circle(xBolinha,yBolinha,dBolinha)
}

function movimentoBolinha(){
  xBolinha += xVelocidade
  yBolinha += yVelocidade
}

function colisaoBorda(){
  if (xBolinha + raio > width ||
     xBolinha - raio < 0){
    xVelocidade *= -1;
  }

  if (yBolinha + raio > height ||
     yBolinha - raio < 0){
    yVelocidade *= -1;
  }
}

function raqueteJogador1(x, y){
  fill(20,20,20)
  rect(x, y, wRaquete1, hRaquete1)
}

function movimentoRaquete1(){
  if (keyIsDown(UP_ARROW)){
    yRaquete1 -= 10;
  }
   if (keyIsDown(DOWN_ARROW)){
    yRaquete1 += 10;
  }
}

//function colisaoRaquete(){
  if (xBolinha -raio < xRaquete1 + wRaquete1
     && yBolinha - raio < yRaquete1 + hRaquete1
     && yBolinha + raio > yRaquete1){
    xVelocidade *= -1;
    raquetada.play();
  }


function colisaoRaqueteBiblioteca(x, y){
  colisao = 
collideRectCircle (x, y, wRaquete1, hRaquete1, xBolinha, yBolinha, raio);
  if (colisao){
    xVelocidade *= -1;
    raquetada.play();
  }
}

function movimentoRaqueteOponente(){
  velocidadeYoponente = yBolinha - yRaquete2 - hRaquete1 / 2;
  yRaquete2 += velocidadeYoponente/ (Math.floor(Math.random() * 2) +3)
}

function incluirPlacar(){
  stroke(255)  
  textAlign(CENTER)
  textSize(20);
  fill(color(255,190,0));
  rect(150, 10, 40, 20);
  fill(255,30,100);
  text(meusPontos, 170, 27);
  fill(255,190,0);
  rect(450, 10, 40, 20);
  fill(color(255,30,100));
  text(pontosOponente, 470,27);
}

function marcador(){
  if (xBolinha> 590){
    meusPontos += 1;
    ponto.play();
    }

  if(xBolinha< 10){
    pontosOponente += 1;
    ponto.play();
    }
}
1 resposta

Olá Luis, tudo bem com você?

Peço desculpa pela demora em responder a sua dúvida.

O seu erro durante o desenvolvimento da solução foi a maneira em que você utilizou a função random() , pois da forma em que você definiu ela vai estar gerando números arbritario entre 1 e 0, e isso vai ficar acabar ficando de uma forma que ele sempre vai errar.

function movimentoRaqueteOponente(){
  velocidadeYoponente = yBolinha - yRaquete2 - hRaquete1 / 2;
  yRaquete2 += velocidadeYoponente/ (Math.floor(Math.random() * 2) +3)
}

Contudo existe uma solução para isso, ela vai estar coletando com base na quantidade de pontos feita por você ou o oponente, e assim fazendo o calculo da chance de erro.

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

E por fim basta você chama-la dentro da sua função de mover a raquete, e quando ela estiver em movimento e baseando-se na quantidade de pontos já feita por você e o oponente sua velocidade será alterada para aumentar a chance de erro ou não.

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

Espero que de alguma forma eu tenha lhe ajudado, e caso ainda tenha dúvidas vou estar a sua disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.