2
respostas

Solução diferente para movimento da raquete do oponente

Boa tarde a todos!

Fiquei encucado com o movimento da raquete do oponente durante um bom tempo, e analisei algumas opções que o pessoal fez por aqui. Fiquei incomodado que a raquete ficaria com maior ou menor chance de erro dependendo de quantos pontos foram feitos, e tentei uma opção que fosse mais "aleatória".

Declarei a variável:

let chanceDeErrar = 0;

Depois deixei a função semelhante a do professor:

function movimentaRaqueteOponente() {
  velocidadeRaqueteOponente = yBolinha - yRaqueteOponente - raqueteAltura / 2 - 30 - chanceDeErrar;
  yRaqueteOponente += velocidadeRaqueteOponente; 

Mas, na hora que os pontos são feitos, optei por adicionei um valor de aleatoriedade:

function marcaPonto (){
  if (xBolinha > 590) {
    meusPontos += 1;
    ponto.play();
    chanceDeErrar = parseInt(Math.random()* (70 - (-50)) + (-50));
  }
  if (xBolinha < 10) {
    pontosDoOponente += 1;
    ponto.play();
    chanceDeErrar = parseInt(Math.random()* (70 - (-50)) + (-50));
  }
}

Pesquisei na internet e esse Math.random basicamente entregaria um valor entre 70 e -50 (eu acho, kkkkk) para ser adicionado ao cálculo da posição da raquete do adversário. A princípio eu vi que ela a bolinha sempre errava para valor baixo, então adicionei até -50 na expectativa de que a bolinha suba, mas seria bom ir testando valores.

O que acham? Ficou bom? Só fica feio porque toda vez que faz ponto, a raquete dá um tranco. E não resolve o problema do bug da bolinha agarrando. Acho que a solução mais bonita mesmo seria resetar a bolinha e a posição das raquetes, adicionando esse valor aleatório à conta do y da raquete, toda vez que fizesse ponto. Mas isso eu ainda não consegui.

2 respostas

Fiz outras modificações depois de ler as ideias do pessoal por aqui e tentei simplificar.

function movimentaRaqueteOponente() {
  yRaqueteOponente = (yBolinha - raqueteAltura / 2) + chanceDeErrar
}

Fiz o movimento da raquete do oponente seguir o meio da bolinha e adicionei a variável chanceDeErrar. E as modificações vem nessas funções:

function marcaPonto (){
  if (xBolinha > 590) {
    meusPontos += 1;
    ponto.play();
    calculaChanceDeErrar();
  }
  if (xBolinha < 10) {
    pontosDoOponente += 1;
    ponto.play();
    calculaChanceDeErrar();
  }
}

function calculaChanceDeErrar() {
  if (meusPontos === pontosDoOponente) {
    chanceDeErrar = random(75, -75)    
  } if (meusPontos > pontosDoOponente) {
    chanceDeErrar = random(65, -65)
  } if (meusPontos < pontosDoOponente) {
    chanceDeErrar = random (85, -85)

Olá, Thomaz! Tudo certo?

Nossa, parabéns pelas soluções fantásticas! Vou compartilhar com outros alunos aqui da plataforma e certamente vai ajudar muito!

Obrigada mesmo e parabéns novamente!

Um abraço e bons estudos!