3
respostas

Bot Invencível

Olá pessoal, boa noite

Finalizei o Projeto Jogo Pong, porém o Bot está invencível, tentei de algumas formas ajustar, porém não tive sucesso.

Se alguém tiver alguma dica eu agradeço!

https://editor.p5js.org/glingenover/full/O0CxYleiS

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

//variáveis da velocidade da bolinha
let velocidadeXBolinha = 8;
let velocidadeYBolinha = 8;
let larguraRaquete = 10;
let alturaRaquete = 80;

//variáveis da raquete
let xRaquete = 10;
let yRaquete = 160;

//variáveis do adversário
let xRaqueteAdv = 580;
let yRaqueteAdv = 160;
let velocidadeYAdv;
let velocidadeYAdv2 = 1;

let colidiu = false;

//Placar do Jogo
let meusPontos = 0;
let pontosAdv = 0;

//Sons do Jogo
let raquetada;
let ponto;
let trilha;

let chanceDeErrar = 0;

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

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

function draw() {
  background(110,0,0);
  desenhaQuadra();
  raqueteBorda();
  mostraRaquete(xRaquete, yRaquete);
  mostraRaquete(xRaqueteAdv, yRaqueteAdv);
  movimentaBolinha();
  verificaColisaoBorda();
  movimentaMinhaRaquete();
  movimentaRaqueteAdv();
  //verificaColisaoRaquete(xRaquete, yRaquete);
  //verificaColisaoRaquete(xRaqueteAdv, yRaqueteAdv);
  verificaColisaoRaqueteBiblioteca(xRaquete, yRaquete);
  verificaColisaoRaqueteBiblioteca(xRaqueteAdv, yRaqueteAdv);
  incluiPlacar();
  marcaPontos();
  mostraBolinha();
}

function desenhaQuadra(){
  stroke(255);
  fill(color(110,0,0));
  //escanteios
  circle(0, 0, 25); //esquerda cima
  circle(0, 400, 25); //esquerda baixo
  circle(600, 0, 25); //direita cima
  circle(600, 400, 25); //direita baixo
  //lado esquerdo
  line(0,0,0,400); //atrás do "gol" da esquerda
  circle(60, 200, 100); //meia lua
  rect(0, 100, 85, 200); //grande área
  rect(0, 140, 50, 120); //pequena área
  //lado direito
  circle(540, 200, 100); //meia lua
  rect(515, 100, 600, 200); //grande área
  rect(550, 140, 600, 120); //pequena área
  line(600,0,600,400); //atrás do "gol" da direita
  //laterais
  line(0,0,600,0); //lateral cima
  line(0,400,600,400); //lateral baixo
  fill(color(110,0,0));
  circle(300, 200, 100); //circulo central
  fill(color(255,255,255));
  circle(300, 200, 10); //circulo central
  line(300,0,300,400); //linha do meio campo
  fill(color(255,255,255));
  rect(300, 400, 5, 10);
}

function mostraRaquete(x, y){
  rect(x, y, larguraRaquete, alturaRaquete);
}

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

  if(keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}

function movimentaRaqueteAdv(){
  velocidadeYAdv = yBolinha - yRaqueteAdv - alturaRaquete / 2 - 30;
  yRaqueteAdv += velocidadeYAdv;
}

function raqueteBorda(){
  if(yRaquete > 320){
     yRaquete = 320
  }
  if(yRaquete < 0){
     yRaquete = 0
  }

  if(yRaqueteAdv > 320){
     yRaqueteAdv = 320
  }
  if(yRaqueteAdv < 0){
     yRaqueteAdv = 0
  }
}

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

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

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

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

function verificaColisaoRaquete(x, y){
  if(xBolinha - raio < xRaquete + larguraRaquete
    && yBolinha - raio < yRaquete + alturaRaquete
    && yBolinha - raio > yRaquete){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }
}

function verificaColisaoRaqueteBiblioteca(x, y){
 colidiu = collideRectCircle(x,y,larguraRaquete,alturaRaquete,xBolinha, yBolinha, raio)
  if(colidiu){
    velocidadeXBolinha *= -1;
    raquetada.play();
  }

}

function incluiPlacar(){
  stroke(255)
  textAlign(CENTER);
  textSize(16);
  fill(color(139,0,0));
  rect(130, 10, 40, 30);
  rect(430, 10, 40, 30);
  fill(color(255,255,255));
  text(meusPontos, 150, 30);
  text(pontosAdv, 450, 30);
}

function marcaPontos(){
  if(xBolinha > 590){
    meusPontos ++;
    ponto.play();
  }

  if(xBolinha < 10 ){
    pontosAdv ++;
    ponto.play();
  }
}

3 respostas

na posição da raqueta do adversário tu tem que colocar valor da posição - 50 (quanto mais próximo de 0 , mais dificil ele fica).

exemplo.. se a bolinha tiver na posicão 330 a raquete do oponente estará na 330 - 50 ... daí existe a possibilidade de o oponente errar.

Então.. Eu até tentei alguns números diferentes nessa parte, até o 45 no lugar do 30 ele continua invencível se eu colocar de 45.01 pra cima ele já não defende nenhuma vez, dai fica bem fácil..

Eu gostaria de algo que deixasse um percentual de chance de acerto, mas não consegui nada até o momento rs.

Eu também tô atrás de umas solução pra isso, vi alguns códigos de outras pessoas aqui nos fóruns mas nenhum funcionou, infelizmente....