1
resposta

[Sugestão] Raquete do oponente de forma realmente aleatória

Olá pessoal, fiquei horas buscando uma forma de deixar a movimentação do oponente realmente aleatória, busquei soluções já existentes aqui no fórum mais tudo que eu achava com a função random() deixava a raquete do oponente muito muito doida, pois o valor da variável alterava tão rápido quanto a movimentação, deixando a raquete doidinha, foi então que pensei que a raquete só deveria mudar esse valor quando tocasse na raquete, então coloquei a solução do random na função de colisão e aí sim deu certo, porem para chegar nessa conclusão a primeira coisa foi corrigir o movimento da raquete do oponente, pois o que passa na aula não faz sentido nenhum, eles usam o comprimento da raquete quando, na verdade, devem usar a altura da raquete ainda subtraem 30 que não faz sentido, pois se a bolinha é para bater no meio subtrair 30 irá fazer a bolinha bater um pouco acima do meio da raquete, enfim não faz sentido, acho que já fazem errado para gente buscar uma solução, corrigindo isso o código ficou conforme abaixo assim a bolinha sempre ira bater no meio da raquete do oponente.

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

Aí chegando nessa conclusão eu só precisava definir quantos píxeis a bolinha precisaria subtrair ou somar da variável velocidade para que ela batesse fora da raquete, então cheguei no valor 59 para cima no eixo y da raquete ou 59 para baixo no eixo y da raquete, ou seja, subtrair 59 ou somar 59 na velocidade faria com que a bolinha batesse fora da raquete do oponente, pois no meio falta 50 para cima ou 50 para baixo, mais ou 8 de raio da bolinha e mais 1 para ela sair, "foi assim que cheguei no resultado de 59", porem devido o limitador da raquete dentro da tela quando a bolinha tivesse nas bordas inferiores ou superiores esse valor deveria ser maior, mas isso não importou tanto, pois o fator do aleatório que eu queria, ocorreu, então foi só aumentar esse valor de aleatório de 59 para +100 ou -100 que ficaria ainda mais dinâmico, o código para que isso ocorre-se ficou conforme abaixo;

function movimentaRaqueteOponente()
{
  velocidadeYOponente = yBolinha - yRaqueteOponente  - raqueteAltura / 2 - chanceDeErrar;
  yRaqueteOponente += velocidadeYOponente
   yRaqueteOponente = constrain(yRaqueteOponente, 0, 300);
}
function verificaColisaoRaqueteBiblioteca(x,y) 
{
    colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
    if (colidiu) 
    {
        velocidadeXBolinha *= -1;
        raquetada.play();
        chanceDeErrar = int(random(-100,100));
    }
}

**E só complementando para acabar com o erro da bolinha ficar batendo atrás da raquete, coloquei a função inicio para que toda vez que se faz um ponto, ela reinicie do meio, e também coloquei posições aleatórias nesse retorno para que ficasse mais dinâmico **

function inicio()
{
    xBolinha = 300; 
    yBolinha = random([50,100,150,200,250,300,350]);
}
function marcaPontos()
{
  if (xBolinha > 593)
    {
      meusPontos += 1;
      ponto.play();
      inicio();
    }
  if (xBolinha < 7)
    {
      oponentePontos += 1;
      ponto.play();
      inicio();
    }
}

Para quem quiser ver todo o código segue o link

1 resposta

Opa Victor, tudo certo?

Que incrível! Meus sinceros parabéns pelo seu projeto, parabéns pela iniciativa de desenvolver um projeto e praticar seus conhecimentos e ir além do que foi ensinado no curso. É muito importante colocar em prática o que se aprende e se desafiar a criar algo novo, gostei muito de como achou a solução para os problemas que enfrentou, de forma criativa e organizada, seu código ficou show, continue assim

Lembre-se de que é normal pedir ajuda. Se você está enfrentando um desafio, considere postar sua dúvida ou problema aqui no fórum da Alura, estamos de braços abertos para te ajudar no que pudermos!

Tenha um bom dia e bons estudos.