1
resposta

Pong Vai dar namoro javascript, Como colocar um final?

Olá, finalizei meu pong com tematica do programa vai dar namoro via javascript, porem eu queria conseguir adicionar mais algumas coisas, como um final por exemplo, ao chegar em 10 pontos, o jogo acabar, e o som parar.

Tambem queria reproduzir um audio ao vencer e outro ao perder, porem colocando .play, ele toca sem parar no fim, totalmente bugado.

E mesmo vendo as varias soluções de inimigo invencivel, chega em um momento que sou obrigado a dar um ponto ao oponente, para poder pontuar novamente, mesmo mexendo muito nos numeros, não consegui um resultado totalmente satisfatorio, é jogavel, mas não do jeito que deveria.

Jogo e toda a programação no link abaixo https://editor.p5js.org/julioancel/sketches/86G_1jJ5C

Tentei por um audio e mensagem final baseado no codigo de outro colega ( https://cursos.alura.com.br/forum/topico-quebrei-o-jogo-210715 )

function fimDeJogo(){
  if (MeusPontos > 9){

    fill (255,20,147);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Ele gosta!!!", 300, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
    Vitoria.play();
    Trilha.stop();
  }
 if (PontosOponente > 9){
    fill (255,20,147);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Ai mamae! :c", 300, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
    Derrota.play();
    Trilha.stop();
 }

}

ativei esse codigo no draw, mas rola o bug de audio que falei no inicio.

Mas fora esses pequenos detalhes, essa foi minha primeira experiencia com programação na vida, e gostei muito, agora seguirei para os outros módulos, mas gostaria de dar essa polida final no jogo, se alguem tiver alguma ideia, agradeço.

1 resposta

Oi Julio, tudo certo? espero que sim

Desde já agradeço a paciência em aguardar por uma resposta.

Já queria deixar os meus parabéns, facilmente uns dos “pongs” mais divertidos e criativos que já observei aqui no fórum, muito bom mesmo!

Julio quanto a essa polida vamos lá.

Existe várias formas de se chegar a um resultado, algumas mais simples, outras mais densas. Deixo abaixo um modo no qual você pode alcançar o objetivo de sanar o problema do som.

Vamos iniciar duas variáveis lá na parte de cima do código juntamente com outras variáveis já iniciadas no seu game, elas ficarão responsáveis por limitar o while.

// ControlaSom
   let Som1 = 0;
   let Som2 = 0;

depois usar dentro dos while que fica dentro da função fimDeJogo, vejamos a seguir:

function fimDeJogo(){
  if (MeusPontos > 9){

    fill (255,20,147);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Ele gosta!!!", 300, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0;
     Trilha.stop();
     while(Som1 < 1)
      {
        Vitoria.play()
        Som1 ++;
      }
  }
 if (PontosOponente > 9){
    fill (255,20,147);
    textSize (25);
    textStyle(BOLD);
    textFont('Verdana');
    text ("Ai mamae! :c", 300, 200);
    xBolinha = 300;
    yBolinha = 200;
    velocidadeXBolinha = 0;
    velocidadeYBolinha = 0; 
    Trilha.stop();
    while(Som2 < 1)
      {
        Derrota.play()
        Som2 ++;
      }
 }

}

O bug do áudio estava sendo gerado porque quando os pontos do jogador se tornaram maior que 9 no seu caso, o play tocava enquanto era maior que 9 ou seja sempre, dependendo da potência da sua máquina mais vezes vai ser processado até podendo travar o PC, o while vai rodar uma só vez atribuir um valor a condição que faz "entrar" e nunca mais ser repetido, porque a condição do while já não será mais verdadeira.


Agora partindo para o oponente “Gustavo Kuerten (Guga)” rsrs, podemos randomizar aquelas jogadas que ele vai defender ou não, fazendo com o oponente não seja desfavorecido por estar ganhando.

Deste modo Temos:

Primeiramente vamos criar uma função que randomiza dois valores.

function GeraNumAleatorio(min, max) {
  return Math.random() * (max - min) + min;
}

Para saber mais sobre esse gerador de número aleatório deixo aqui o link.

Depois vem a parte mais complexa:

  function MovimentaRaqueteOponente()
{
  velocidadeYOponente = yBolinha - yRaqueteOponente - wRaquete /2 - dOponenteBolinha;
  yRaqueteOponente += velocidadeYOponente;

  while(Sorte < 1){

    dOponenteBolinha = GeraNumAleatorio(70,100);
    Sorte = 1
  }
    if(xBolinha - raio < xRaquete + wRaquete
    & yBolinha - raio < yRaquete + hRaquete
    & yBolinha + raio > yRaquete){
       Sorte = 0;
       }
  }

Percebe-se que criei uma variável chamada Sorte, logo depois inicializei no topo do código com o valor 0, assim let Sorte = 0;, o valor inicial é 0 e será sorteado um número entre 70 e 100 dentro do while, ou seja, hora ele pode defender hora ele “deixa passar”, o if muda o valor de sorte toda vez que você defende a bolinha, usando a lógica da função function VerificaColisao(), deste modo o número gerado muda a todo momento. Neste caso só modifiquei a função já criada em teu game function MovimentaRaqueteOponente()

Deixo aqui o link da cópia do seu game para facilitar o seu entendimento.

Espero que de alguma forma eu tenha conseguido te ajudar a “polir” seu game, uma grande abraço.

Continue assim, você é muito criativo e buscou a todo momento aprender mais e se desafiar, meus parabéns!!!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓