def play_game(best_score):
    pygame.time.wait(200)
    pygame.mixer.music.load('GameSounds/happy-cave.ogg')
    pygame.mixer.music.play(-1)

    snake = Snake(head=(200, 200), mid=(210, 200), tail=(220,200), head_color=(255, 102, 0), body_color=(255, 153, 3))

    apple = Apple()

    my_direction = LEFT
    score = 0
    dead_line = False

    while True:
        clock.tick(snake.get_speed())
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.display.quit()
                pygame.quit()
                exit()

            if event.type == KEYDOWN:
                if (event.key == K_UP or event.key == K_KP8 or event.key == K_e) and my_direction != DOWN:
                    my_direction = UP
                    break
                elif (event.key == K_DOWN or event.key == K_KP2 or event.key == K_d) and my_direction != UP:
                    my_direction = DOWN
                    break
                elif (event.key == K_LEFT or event.key == K_KP4 or event.key == K_s) and my_direction != RIGHT:
                    my_direction = LEFT
                    break
                elif (event.key == K_RIGHT or event.key == K_KP6 or event.key == K_f) and my_direction != LEFT:
                    my_direction = RIGHT
                    break

        if collision(snake.get_snake()[0], apple.get_apple_pos()):
            pygame.mixer.Sound.play(pygame.mixer.Sound("GameSounds/carrot.ogg"))
            apple.create()
            snake.increase_size()
            score += 1

        snake.update_location(my_direction)

        snake_head = snake.get_snake()[0]
        if list(filter(lambda part: collision(snake_head, part), snake.get_snake()[1:])):
            dead_line = True
        
        if ((snake_head[0] == 600 or snake_head[1] == 600) or (snake_head[0] == 0 or snake_head[1] == 0)):
            dead_line = True

        screen.fill((51, 204, 51))

        apple_pos = apple.get_apple_pos()
        pygame.draw.circle(screen, apple.get_color(), (apple_pos[0]+5, apple_pos[1]+5), 5)

        score_font = Fonts('Score: {}'.format(score), 'freesansbold.ttf', 22, (600 - 110, 10))
        score_font.print_font(screen)

        b_score_font = Fonts('Best-Score: {}'.format(best_score), 'freesansbold.ttf', 22, (120, 10))
        b_score_font.print_font(screen)
        
        snake.print_snake(screen)
        
        if dead_line:
            if score > best_score:
                with open(os.path.join(dir_name, 'best_score.txt'), 'w') as r:
                    r.write(str(score))
            pygame.mixer.music.stop()
            break

        pygame.display.update()

    
    game_over = Fonts("Game Over", "Pixeled.ttf", 50, (600 // 2, 20), (255, 26, 26))
    game_over.print_font(screen)
    pygame.display.update()
    pygame.mixer.Sound.play(pygame.mixer.Sound("GameSounds/game-over.ogg"))
    pygame.time.wait(2000)