Collision detection
The last thing that is absolutely vital for the gameplay is the collision detection, which ends the game when the bird collides with either the floor, the ceiling, or a pipe.
Checking whether we've met floor or ceiling is as simple as comparing bird.y
to a ground level or screen height (taking into account the height of the bird itself in the second comparison). In KivyBirdApp
, we have the following code
def test_game_over(self): if self.bird.y < 90 or \ self.bird.y > self.root.height - 50: return True return False
It's a bit more complex when looking for a collision with pipes, but not substantially so. We can subdivide this next check in two: first, we test for a horizontal collision using Kivy's built-in collide_widget()
method, and then check whether vertical coordinates are within limits imposed by the lower_len
and upper_len
attributes of a pipe we're flying into.
Hence, the revised version of the KivyBirdApp.test_game_over()
method...