2
respostas

[Dúvida] O oponente não erra

fiz o codigo seguindo as orientações, porem, por mais que eu tente, o oponente não erra.... só erra quando diminuo em 100 o valor desse comando:

"velocidadeYDireita = yBolinha - yRaqueteDireita - raqueteComprimento / 2 - 30"

mas aí não acerta nenhuma.... ``

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

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raio = diametro / 2;

//Variáveis para borda da bolinha
let esquerdaBolinha = xBolinha - raio;
let superiorBolinha = yBolinha - raio;
let inferiorBolinha = yBolinha + raio;

//Variáveis da Raquete esquerda
let xRaqueteEsquerda = 5;
let yRaqueteEsquerda = 130;

//Variável raquete direita
let xRaqueteDireita = 585;
let yRaqueteDireita = 130;
let VelocidadeYDireita;

//variável raquete
let raqueteComprimento = 10;
let raqueteAltura = 90;

//Variável esfera 
let direitaRaquete = xRaqueteEsquerda + raqueteComprimento;
let superiorRaquete = yRaqueteEsquerda;
let inferiorRaquete = yRaqueteEsquerda + raqueteAltura;

let colidiu = false;

//Placar
let meusPontos = 0;
let pontosDoOponente = 0;

function setup() {
  createCanvas(600, 400)
}

function draw() {
  background (255,203,219);
  mostraBolinha ();
  movimentaBolinha ();
  verificaBorda ();
  mostraRaqueteDireita ();
  mostraRaqueteEsquerda ();
  movimentaRaqueteEsquerda ();
  movimentaRaqueteDireita ();
  //verificaColisao ();
  colisaoRaqueteBiblioteca(xRaqueteDireita, yRaqueteDireita);
  colisaoRaqueteBiblioteca(xRaqueteEsquerda, yRaqueteEsquerda);
  incluiPlacar ();
  marcaPonto ();
}

function mostraBolinha (){
  circle(xBolinha,yBolinha, diametro)
  let cor = color (255,0,127);
  fill (cor);
  noStroke();
}

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

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

function mostraRaqueteEsquerda () {
  rect(xRaqueteEsquerda,yRaqueteEsquerda,raqueteComprimento,raqueteAltura);
}

function mostraRaqueteDireita () {
  rect(xRaqueteDireita,yRaqueteDireita,raqueteComprimento,raqueteAltura);
}

function movimentaRaqueteEsquerda (){
  if (keyIsDown(UP_ARROW)) {
    yRaqueteEsquerda -= 10;
  }
  if (keyIsDown(DOWN_ARROW)) {
    yRaqueteEsquerda += 10;
  }
  yRaqueteEsquerda = constrain(yRaqueteEsquerda, 0, 310);
}

function movimentaRaqueteDireita () {
  velocidadeYDireita = yBolinha - yRaqueteDireita - raqueteComprimento / 2 - 30
  yRaqueteDireita += velocidadeYDireita
   yRaqueteDireita = constrain(yRaqueteDireita, 0, 310);
}

function verificaColisao (){
  if (esquerdaBolinha < direitaRaquete && superiorBolinha < inferiorRaquete && inferiorBolinha > superiorRaquete){
    velocidadeXBolinha *= -1;
  }
}

function colisaoRaqueteBiblioteca (x, y){
   colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, diametro);
  if (colidiu) {
    velocidadeXBolinha *= -1;
  }
}

function incluiPlacar() {
  fill(255,0,127);
  text(meusPontos, 278, 26);
  text(pontosDoOponente, 321, 26);
}

function marcaPonto() {
  if (xBolinha > 590) {
    meusPontos += 1;
  }
  if(xBolinha <10) {
    pontosDoOponente +=1;
  }
}```
2 respostas

Oi, Natalia

  • Primeiro o curso teve uma péssima escolha no nome de variável
//variável raquete
let raqueteComprimento = 10; // o correto é raqueteLargura
  • A "velocidade" é, na verdade, o quanto temos de alterar a posição de y raquete do oponente para alcançar o y da bolinha

Cenário no início do Jogo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Diferença das posições "y". Tocando no início da raquete
"velocidadeYDireita = yBolinha - yRaqueteDireita"

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Diferença das posições "y" mais a metade da altura. Tocando no meio da raquete
"velocidadeYDireita = yBolinha - (yRaqueteDireita + raqueteAltura/2)"

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Diferença das posições "y" mais a altura. Tocando no fim da raquete
"velocidadeYDireita = yBolinha - (yRaqueteDireita + raqueteAltura)"

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Em breve, irei explicar como fazer o oponente errar!

Como fazer o oponente errar!

Precisamos que a bolinha acerte passe por cima ou por baixo da raquete do oponente

Precisamos de um número para variar a posição y da bolinha acima ou abaixo em relação à raquete do oponente

Número maior, aumenta as possibilidades de erro

Eu decidir que 30 seria o suficiente

//variáveis para gerar erro do oponente
let erroVariacao = 0; // variação em relação a posição yRaqueteOponente
let erroSinal = 1; // valor adicionado a variação
let erroLimite = 30; // limite da variação em relação a posição yRaqueteOponente

function movimentaRaqueteOponente() // incluir na função draw()
{
  deslocamentoYOponente = yBolinha - yRaqueteOponente - erroVariacao ;
  yRaqueteOponente += deslocamentoYOponente;  
  // limitar o valor da variação
  if ( erroVariacao < - erroLimite || erroVariacao > raqueteAltura + erroLimite ) 
      erroSinal *= -1;
  // modifica o valor da variação 
  erroVariacao += erroSinal;   
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade