Depois de implementar o código e jogar um pouco (copiando ao pé da letra o gabarito), percebi que em algumas raras circunstâncias a bolinha consegue acertar um "ponto cego" e passar para detrás da raquete, às vezes ricocheteando entre a raquete e a borda do canvas várias vezes. Alguma sugestão de onde está o "ponto cego" da lógica?
Ah, implementei um if para evitar que a raquete saia do canvas:
function movimentaMinhaRaquete() {
// primeiro verifica se a raquete está dentro do canvas:
if(yRaquete > 0 &&
yRaquete + alturaRaquete < 400) {
// se true move para cima:
if (keyIsDown(UP_ARROW)) {
yRaquete -= 10;
};
// ou para baixo:
if (keyIsDown(DOWN_ARROW)) {
yRaquete += 10;
};
}
// o que fazer se o jogador tentar ultrapassar o limite do canvas (quando a primeira condição acima passa a ser falsa e trava a raquete):
if(yRaquete <= 0) {
yRaquete += 1; }
if(yRaquete + alturaRaquete >= 400) {
yRaquete -= 1; }
}
Gostaria de sugerir, ainda, que fosse enfatizado um pouco mais a necessidade de clicar no canvas para poder jogar. Perdi uns bons minutos quebrando a cabeça até lembrar desse detalhe, revirando meu código de ponta cabeça para descobrir por que a raquete não mexia.