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

[Dúvida] Projeto com erros

Boa noite,

Meu ping pong não esta marcando a pontuação corretamente. Ele começa marcando a pontuação corretamente mas entre um ponto e outro, ele contabiliza 2 ou ate mais pontos de uma vez. Alguém poderia me ajudar?

https://scratch.mit.edu/projects/783045544

4 respostas

Olá, Jullian, tudo bem?

Essa pontuação a mais no seu jogo é devido à bolinha ficar presa na raquete. Para solucionar esse problema, uma das possibilidades é de que sempre quando for computado o gol, a bolinha voltar ao centro, isso evita que a bolinha fique entre a raquete gerando vários pontos.

Neste caso, basta que você adicione um bloco de movimento “mude x para 0”.

Como na imagem abaixo:

Captura de tela do Scratch. Nela há dois bolocos de código responsável pela pontuação. No primeiro há um bloco de evento "Quando a bandeira verde for clicada". Em seguida há um bloco de controle "sempre 'seta indicando repeticao'. Dentro desse bloco há um bloco de controle "espere até que -bloco de operador-posicao x <-228". Depois um bloco de variável, adicione 1 a PontosdoOponente. Em seguida, bloco de som 'toque o som ponto'. Por fim, bloco de movimento, 'mude x para 0'.Fecha o primeiro trecho de código. No segundo bloco há um bloco de evento "Quando a bandeira verde for clicada". Em seguida há um bloco de controle "sempre 'seta indicando repeticao'. Dentro desse bloco há um bloco de controle "espere até que -bloco de operador-posicao x >228". Depois um bloco de variável, adicione 1 a meusPontos. Em seguida, bloco de som 'toque o som ponto'. Por fim, bloco de movimento, 'mude x para 0'

Coloquei a posição x igual a 0, que é o centro do canvas, mas você também pode deslocar a bolinha para uma posição x um pouco mais a frente da raquete.

Abaixo deixo o remix do seu código com as alterações.

Espero ter ajudado.

Fico à disposição caso surja dúvidas.

Abraços e bons estudos!

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

Eu vi o remix e de fato é uma boa sugestão. Mas eu vi no remix também que em alguns momentos ele deixa de, tanto contabilizar os pontos quanto de sair o som ao bater a bolinha na borda. Isso e um bug aleatório ou é algo que eu também posso corrigir na codificação?

solução!

Olá, Jullian, tudo ok?

Obrigada pelo retorno.

Excelente observação!

Note que o momento em que a bolinha não marca ponto, é quando ela bate exatamente na quina da raquete.

Isso acontece, pois no mundo ideal o nosso if das verificações só acontece uma vez por raquetada. Mas entrando bem na quina a bola consegue ficar em um espaço bem pequeno onde ela ativa esse if várias vezes, fazendo aquele zig-zag e aquele barulho chato.

Além de, aparentemente, bugar a colisão do Scratch impedindo a gente de computar os pontos e fazer o som da bolinha.

Podemos resolver isso dando um “empurrão” quase imperceptível na bola sempre que ocorrer a raquetada.

Segue o código abaixo:

Captura de tela do Scratch. Há um bloco de evento ‘Quando a bandeira verde for clicada. Em seguida, há um bloco de controle “sempre, seta indicando repetição”. Dentro desse bloco de controle sempre há dois blocos de controle, ‘se então’. O primeiro bloco de controle há a condição ‘se tocando em raquete 1’ então bloco de movimento ‘mude x para -210.’, em seguida, bloco de movimento ‘aponte a direção*-1’, bloco de som ‘toque o som raquetada até o fim’.O segundo bloco de controle há a condição ‘se tocando em raquete 2’ então bloco de movimento ‘mude x para -210.’, em seguida, bloco de movimento ‘aponte a direção*-1’, bloco de som ‘toque o som raquetada até o fim’.’

Primeiro eu separei a verificação do toque para cada raquete, depois fiz com que a bola fosse para uma posição logo a frente da raquete, evitando assim que a colisão aconteça várias vezes por raquetada!

A solução acima também resolve o problema do som.

Além dessas alterações, coloquei a posição x da pontuação para -225 e 225. Para assim ficar mais assertivo. Como na imagem abaixo:

Captura de tela do Scratch. Nela há dois bolocos de código responsável pela pontuação. No primeiro há um bloco de evento "Quando a bandeira verde for clicada". Em seguida há um bloco de controle "sempre 'seta indicando repeticao'. Dentro desse bloco há um bloco de controle "espere até que -bloco de operador-posicao x <-225". Depois um bloco de variável, adicione 1 a PontosdoOponente. Em seguida, bloco de som 'toque o som ponto'. Por fim, bloco de movimento, 'mude x para 0'.Fecha o primeiro trecho de código. No segundo bloco há um bloco de evento "Quando a bandeira verde for clicada". Em seguida há um bloco de controle "sempre 'seta indicando repeticao'. Dentro desse bloco há um bloco de controle "espere até que -bloco de operador-posicao x >225". Depois um bloco de variável, adicione 1 a meusPontos. Em seguida, bloco de som 'toque o som ponto'. Por fim, bloco de movimento, 'mude x para 0'

Espero ter ajudado.

Caso surja dúvidas, estou à disposição.

Abraços.

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

Boa tarde Monalisa,

Eu fiz os ajustes de acordo com o seu remix e deu certo. Obrigado pela ajuda!!!