Paso 6: Detección de colisiones
Lo último que debemos hacer es detectar si la bola golpea la pala o no.
Sabemos que ese jugador perdió el balón cuando la parte inferior de la bola está por encima de la parte superior de la paleta, o la parte superior de la pala está más allá de la parte inferior de la paleta.
Sabemos que la bola nunca golpeará las paletas a menos que la pelota está en la X de la derecha o izquierda, así que sólo tenemos que comprobar las paletas en los dos escenarios.
bool MissedPaddle(u8g_uint_t py)<br>{ u8g_uint_t ballTop = ballY; u8g_uint_t ballBottom = ballY + ballSize - 1; u8g_uint_t paddleTop = py; u8g_uint_t paddleBottom = py + paddleHeight - 1; return ballBottom < paddleTop || ballTop > paddleBottom; }
Cuando alguien pierde una pelota, nosotros mover la pelota hacia el otro lado, reproducir un tono de bolas perdidas e incrementar la puntuación de otro jugador. Cuando la puntuación alcanza puntuación ganadora, es juego sobre :-)
void Player0Missed()<br>{ // When left player missed, move the ball just to the left of rightmost of court ballX = courtWidth - ballSize - 1; ballY = paddle1Y + paddleHalfHeight; // ball will be served at location of player 1's paddle tone(tonePin, missToneFrequency, missToneDuration); delay(1000); score1++; animationSpeed = animationSpeed0; if (score1 == winningScore) gameOver = true; } void Player1Missed()<br>{ // When right player missed, move the ball just to the right of the leftmost of court ballX = 1; ballY = paddle0Y + paddleHalfHeight; // ball will be served at location of player 0's paddle tone(tonePin, missToneFrequency, missToneDuration); delay(1000); score0++; animationSpeed = animationSpeed0; if (score0 == winningScore) gameOver = true; }