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

Movimento Raquete do Oponente

Problema no movimento da raquete do oponente, quando subtraio por até 50 a raquete do oponente defende todas as bolas, se uso um valor maior que 50 a raquete do oponente não defende nada ou muito pouco. Podem me ajudar a identificar onde estou errando no código?

Meu código

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

// variáveis da raquete do Jogador
let xRaqueteJogador = 5;
let yRaqueteJogador = 150;

// variáveis da raquete do Oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;

// dimensões da raquete
let larguraRaquete = 10;
let alturaRaquete = 50;

//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;


// Habilidade do Oponente
let habilidadeOponente = 50;

// velocidade da Raquete do Oponente
let velocidadeYOponente;

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

// variável auxiliar da função verificaColisaoRaquete
let colidiu = false;

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 raquete(x,y){
  rect(x, y, larguraRaquete, alturaRaquete);
}
function movimentaRaqueteJogador(){
  if(keyIsDown(UP_ARROW)){
    yRaqueteJogador -= 10;
  }
  if(keyIsDown(DOWN_ARROW)){
    yRaqueteJogador += 10;
  }
}

//function verificaColisaoRaqueteJogador(x,y) {
//    if (xBolinha - raio < xRaqueteJogador + larguraRaquete
//        && yBolinha - raio < yRaqueteJogador + alturaRaquete
//        && yBolinha + raio > yRaqueteJogador) {
//        velocidadeXBolinha *= -1;
//    }
//}


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

function movimentaRaqueteOponente(){
velocidadeYOponente =  yBolinha -yRaqueteOponente - larguraRaquete / 2 - habilidadeOponente;
   yRaqueteOponente +=velocidadeYOponente

}

function incluirPlacar(){
  fill(255)
  text(meusPontos,278,26);
  text(pontosDoOponente,321,26); 
}

function marcarPonto(){
  if(xBolinha < 10){
    pontosDoOponente+=1
  }
  if(xBolinha > 590){
    meusPontos+=1
  }
}


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  raquete(xRaqueteJogador, yRaqueteJogador);
  movimentaRaqueteJogador();
  raquete(xRaqueteOponente, yRaqueteOponente);
  //verificaColisaoRaqueteJogador();
  verificaColisaoRaquete(xRaqueteJogador, yRaqueteJogador) ;
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente) ;
  incluirPlacar();
  marcarPonto();
}
2 respostas
solução!

Boa noite Fellipe, tudo bem?

Aparentemente o seu codigo está funcional, de acordo com o exercício proposto "atividade Faça como eu fiz na aula".

Podemos notar que no sintoma comentado -> "quando subtraio por até 50 a raquete do oponente defende todas as bolas, se uso um valor maior que 50 a raquete do oponente não defende nada ou muito pouco", o mesmo pode estar relacionado aos valores utilizados nas variáveis "alturaRaquete", "habilidadeOponente".

Ex:

1-Ações: Valor da altura da Raquete = habilidadeOponente -> Sintoma: Raquete do Oponente possui baixa habilidade de defesa

let alturaRaquete = 50;
let habilidadeOponente = 50;

2-Ações: Aumento da altura da Raquete, ou dimuição da habilidadeOponente -> Sintoma: Raquete do Oponente melhora a habilidade de defesa.

let alturaRaquete = 50;
let habilidadeOponente = 40;

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

Muito Obrigado !