0

I have made a python snake game using pygame in which I wanted to show game over screen when the snake hits itself but instead it resets the snake.

So, please help me to add game over image when snake collide with itself and also add key "P" to restart the game and key "ESC" to exit the game, as same that I have done to

def check_fail(self):

    if not 0 <= self.snake.body[0].x < cell_number or not 0 <= self.snake.body[0].y < cell_number:
        self.play_wall_crash_sound()
        self.game_over()
        Game_Over()
        pygame.mixer.music.unpause()

Any other suggestions are always welcome.

# Game over text
def Game_Over():

    game_over = True
    while game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    game_over = False
                elif event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    quit()

        pygame.mixer.music.pause()
        clock.tick(10)
        screen.blit(game_over_bg, (0, 0))
        pygame.display.update()


# Main game code
class MAIN:

    def __init__(self):
        self.play_background_music()
        self.snake = SNAKE()
        self.fruit = FRUIT()
    
    # Update all
    def update(self):
        self.snake.move_snake()
        self.check_collision()
        self.check_fail()

    # Draw elements
    def draw_elements(self):
        self.draw_grass()
        self.fruit.draw_fruit()
        self.snake.draw_snake()
        self.draw_score()

    # Check if snake collide the fruit
    def check_collision(self):
        if self.fruit.pos == self.snake.body[0]:
            self.fruit.randomize()
            self.snake.add_block()
            self.snake.play_crunch_sound()

        for block in self.snake.body[1:]:
            if block == self.fruit.pos:
                self.fruit.randomize()

    # Check if snake collide wall and itself and then game over
    def check_fail(self):
        if not 0 <= self.snake.body[0].x < cell_number or not 0 <= self.snake.body[0].y < cell_number:
            self.play_wall_crash_sound()
            self.game_over()
            Game_Over()
            pygame.mixer.music.unpause()

        for block in self.snake.body[1:]:
            if block == self.snake.body[0]:
                self.game_over()

    # Reseting the snake after game over
        def game_over(self):
        self.snake.reset()
Pranav Hosangadi
  • 23,755
  • 7
  • 44
  • 70

1 Answers1

0

Are you following a tutorial? Search SO or Youtube for "snake game" - guaranteed to find something that'll point you in the right direction. There are too many portions missing from what you've posted to make a guess. Tabbing is off:

# Reseting the snake after game over
def game_over(self):
    self.snake.reset()

There's not much more to say than that, because you haven't given us a minimal, Reproducible Example. As far as printing "Game Over" text goes, try:

How to display text in pygame?

pygame - How to display text with font & color?

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
Doyousketch2
  • 2,060
  • 1
  • 11
  • 11