1
resposta

Jogo com o Oponente que realmente tem chances de errar, pois é um número aleatório é quem determina isso

Fala Galera,

Fiz um jogo onde eu criei uma função que gera um número aleatório que determina se o meu oponente irá acertar ou não.

Esse número é gerado toda vez que a bolinha toda na minha raquete ou na borda do meu lado do jogo.

E esse valor eu coloquei dentro da função do movimento da raquete do oponente.

function calculaChanceErro(){
  chanceErro = Math.round(Math.random()*140);
}

function movimentaOponenteRaquete2(){

  yOponenteRaquete = yBolinha + alturaRaquete/4 - chanceErro;
}

Esse é a parte do código que gera o número aleatório que irá determinar o erro do oponente.

Quem determinar o nível de precisão do oponente é a variável "alturaRaquete" + o divisor dele e o valor que multiplica o Randon.

Quando maior o divisor da variável alturaRaquete e menor é o multiplicador do Random, maior é a precisão.

Precisão fraca: random()180 / alturaRaquete/2 Precisão menor: random()140 / alturaRaquete/3 Precisão boa: random()140 / alturaRaquete/4 Precisão mais forte: random()90 / alturaRaquete/4

//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 18;
let raio = diametro / 2;

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

//variáveis da velocidade de bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

//variáveis das raquetes
let comprimentoRaquete = 10;
let alturaRaquete = 90;

//variaveis minha raquete
let xMinhaRaquete = 5;
let yMinhaRaquete = 150 ;

//variaveis raquete oponente
let xOponenteRaquete = 585;
let yOponenteRaquete = 150;
let velocidadeYOponente;
let chanceErro = 75;

let meuPlacar = 0;
let oponentePlacar = 0;

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

let colidiu = false;

function draw() {
  background(0);
  mostraBolinha ();
  movimentaBolinha ();
  verificaColisaoBorda ();
  pontuacao();
  placar();

  desenhaRaquete(xMinhaRaquete, yMinhaRaquete);
  movimentaMinhaRaquete();
  colisaoMinhaRaqueteBiblioteca();

  desenhaRaquete(xOponenteRaquete, yOponenteRaquete);
  movimentaOponenteRaquete();
  colisaoOponenteRaqueteBiblioteca();
  //movimentaOponenteRaquete();
}

function preload(){

  raquetada = loadSound("raquetada.mp3");
  ponto = loadSound("ponto.mp3");
  trilha = loadSound("trilha.mp3");

}

function mostraBolinha (){

  circle(xBolinha, yBolinha, diametro);
}

function desenhaRaquete(x, y){

  rect(x, y, comprimentoRaquete, alturaRaquete)
}

function movimentaBolinha (){

  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

function movimentaMinhaRaquete (){

  if (keyIsDown(UP_ARROW)) {
    yMinhaRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yMinhaRaquete += 10;
  }
}

function calculaChanceErro(){
  chanceErro = Math.round(Math.random()*140);
}

function movimentaOponenteRaquete(){

  yOponenteRaquete = yBolinha + alturaRaquete/4 - chanceErro;
}

function verificaColisaoBorda (){

  if (xBolinha+raio > width){
      velocidadeXBolinha *= -1;
  }
  if (xBolinha-raio < 0){
      velocidadeXBolinha *= -1;
      calculaChanceErro();
  }
  if (yBolinha+raio > height ||
    yBolinha-raio < 0){
      velocidadeYBolinha *= -1;
  }
}

function colisaoMinhaRaqueteBiblioteca() {

  colidiu = 
  collideRectCircle(xMinhaRaquete, yMinhaRaquete, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, raio);
  if (colidiu) {
    velocidadeXBolinha *= -1;
    raquetada.play();
    calculaChanceErro(); ///////////////////
  }
}

function colisaoOponenteRaqueteBiblioteca() {

  colidiu = 
  collideRectCircle(xOponenteRaquete, yOponenteRaquete, comprimentoRaquete, alturaRaquete, xBolinha, yBolinha, raio);
  if (colidiu) {
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function pontuacao(){

  if (xBolinha-raio < 0){
      oponentePlacar += 1;
      ponto.play();
  }
  if (xBolinha+raio > width){
      meuPlacar += 1;
      ponto.play();
  }
}

function placar (){
  textSize(20);
  textAlign(CENTER);
  stroke(255);
  fill(255,140, 0);
  rect(180,28, 45, 30);
  rect(330,28, 45, 30);
  fill(255);
  text(meuPlacar, 202, 50);
  text(oponentePlacar, 352, 50);
}
1 resposta

Fala, Diogenes!

Desculpe a demora em responder você!

Caramba, que solução show!

É uma excelente execução lógica para adicionar essa implementação e deixar o jogo com um comportamento mais interessante!

Muito obrigada por compartilhar seu projeto conosco, certamente sua solução irá ajudar outros alunos com uma ideia semelhante.

Continue com esse foco nos estudos que sua carreira como dev será brilhante.

Um forte abraço, obrigada novamente e bons estudos!