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

[Dúvida] Dúvida da função movimentarRaqueteOponente

Olá, tudo bem?

Eu não consegui entender ao certo a lógica da função que movimenta a raquete do oponente de acordo com o eixo y da bolinha, onde qual seria a razão de subtrairmos o yRaqueteOponente:

function movimentaRaqueteOponente() {
    velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
    yRaqueteOponente += velocidadeYOponente;
}

Não seria necessário somente atribuir a variável velocidadeYOponente o yBolinha - raqueteComprimento / 2 - 30? Porque, realizando esse cálculo, a raquete do oponente estará devidamente alinhada ao centro desta com relação a bolinha, com uma margem de - 30, que seria para termos uma chance de ganhar o jogo. Não consegui assimilar o motivo de subtrair também pelo yRaqueteOponente.

Por sinal, estas duas linhas da função poderiam ser em uma única linha, pelo que entendi, onde já seria atribuído diretamente ao yRaqueteOponente o eixo y da bolinha, sendo alinhado ao centro da raquete ao subtrair por alturaComprimento / 2 e subtraindo -30 como uma "margem" de ganho:

function movimentaRaqueteOponente() {
    yRaqueteOponente = yBolinha - (alturaComprimento / 2) - 30;
}
2 respostas
solução!

Oi, tudo bem por aí?

Seus questionamentos são muito pertinentes!

Sobre sua primeira dúvida, em relação à subtração de yRaqueteOponente. O código ficaria assim:

function movimentaOponente(){
  velocidadeYOponente = yBolinha - raqueteComprimento / 2 - 30 ;
  yRaqueteOponente += velocidadeYOponente   
}

E esse seria o resultado:

gif do jogo pong. quando o jogo inicia, a raquete do oponente aparece por pouquíssimas frações de segundo se movimentando para baixo, sai da tela e não aparece mais. a bolinha está se movendo normalmente e a raquete do jogador está parada

Percebe que a raquete do oponente desaparece super rapidamente da tela assim que o jogo se inicia?

Isso acontece pois a variável velocidadeYOponente está sendo constantemente incrementada à yRaqueteOponente. Quando o conteúdo da velocidade é apenas yBolinha - raqueteComprimento / 2, esse valor vai faltar em dinamismo. Digamos que yBolinha está com o valor 150. A velocidade, então, será 115 (- raqueteComprimento / 2 - 30), e yRaqueteOponente será o próprio valor inicial (150) constantemente sendo acrescido de 115. Por isso a raquete ultrapassa os limites da tela e seu y não para de crescer.

Subtrair yRaqueteOponente é o que trás o dinamismo para esse movimento. Vamos lá: Se yBolinha estiver com o valor 150, o resultado do cálculo atribuído à velocidadeYOponente será -35 (considerando a posição inicial da raquete, que é 150, também). Com isso, yRaqueteOponente se altera diminuindo 35 pixels em sua posição, e essa mesma mudança de valor já faz com que todo o cálculo se altere. Pode parecer estranho termos um valor negativo, já que isso seria acima do limite da nossa tela, não é? Mas na verdade esse valor só fará com que a raquete se mova para cima. Isso altera o valor de yRaqueteOponente, que altera o valor de velocidadeYOponente, e essas variáveis estarão sempre em influência mútua.

Acontece que temos muitas formas possíveis de chegar a um mesmo resultado dentro da programação, e sua segunda sugestão funciona perfeitamente! Parece que seu conhecimento de matemática e lógica tornou a função mais simples e tão eficaz quanto. Ao desprezar velocidadeYOponente e atribuir o cálculo diretamente à yRaqueteOponente, o movimento ficou dinâmico da forma que precisamos. Parabéns!

Caso você queira saber mais sobre a construção da movimentação da raquete do oponente feita pelo instrutor, deixo aqui um tópico em que explico detalhadamente sobre essa função:

E para te inspirar ainda mais, aqui está um tópico da monitora Andrieli com a forma desenvolvida por ela para deixar o movimento da raquete bem mais legal. Assim é possível perceber a diversidade de formas possíveis para construir o jogo:

Espero ter esclarecido sua dúvida. Estou à disposição.

Forte abraço!

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

Larissa, muitíssimo obrigado pela explicação completa demais!