import pygame
import sys
import random
import time
from pygame.locals import *

# 初始化 Pygame
pygame.init()

# 游戏窗口设置
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("贪吃蛇大冒险")

# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
DARK_GREEN = (0, 150, 0)
RED = (255, 0, 0)
BLUE = (0, 100, 255)
YELLOW = (255, 255, 0)
PURPLE = (180, 0, 180)
GRAY = (100, 100, 100)
LIGHT_GRAY = (200, 200, 200)
DARK_GRAY = (50, 50, 50)
GRASS_GREEN = (60, 180, 75)

# 加载字体
try:
    font_large = pygame.font.Font(None, 48)
    font_medium = pygame.font.Font(None, 36)
    font_small = pygame.font.Font(None, 24)
    font_tiny = pygame.font.Font(None, 20)
except:
    font_large = pygame.font.SysFont(None, 48)
    font_medium = pygame.font.SysFont(None, 36)
    font_small = pygame.font.SysFont(None, 24)
    font_tiny = pygame.font.SysFont(None, 20)

# 音效初始化
try:
    pygame.mixer.init()
    eat_sound = pygame.mixer.Sound(bytearray([random.randint(0, 255) for _ in range(50)]))
    crash_sound = pygame.mixer.Sound(bytearray([random.randint(0, 255) for _ in range(50)]))
    powerup_sound = pygame.mixer.Sound(bytearray([random.randint(0, 255) for _ in range(50)]))
    game_over_sound = pygame.mixer.Sound(bytearray([random.randint(0, 255) for _ in range(50)]))
    victory_sound = pygame.mixer.Sound(bytearray([random.randint(0, 255) for _ in range(50)]))
except:
    class SilentSound:
        def play(self): pass
    eat_sound = SilentSound()
    crash_sound = SilentSound()
    powerup_sound = SilentSound()
    game_over_sound = SilentSound()
    victory_sound = SilentSound()

# 游戏参数
CELL_SIZE = 20
GRID_WIDTH = WIDTH // CELL_SIZE
GRID_HEIGHT = (HEIGHT - 100) // CELL_SIZE  # 留出空间给UI
GAME_AREA_TOP = 100
FPS = 60
INITIAL_SPEED = 10
SPEED_INCREMENT = 0.5

class Snake:
    """贪吃蛇类"""
    def __init__(self):
        self.reset()
        
    def reset(self):
        """重置蛇的状态"""
        # 蛇初始位置在屏幕中央
        start_x = GRID_WIDTH // 2
        start_y = GRID_HEIGHT // 2
        
        # 初始蛇身长度3节
        self.body = [
            (start_x, start_y),      # 蛇头
            (start_x - 1, start_y),  # 蛇身
            (start_x - 2, start_y)   # 蛇尾
        ]
        self.direction = (1, 0)  # 初始向右移动
        self.next_direction = (1, 0)
        self.grow_pending = 2  # 初始长度已经是3
        self.color = GREEN
        self.head_color = DARK_GREEN
        self.speed = INITIAL_SPEED
        self.move_counter = 0
        self.is_alive = True
        self.score = 0
        self.foods_eaten = 0
        self.special_foods_eaten = 0
        self.length_record = 3
        self.blink_timer = 0
        self.invincible = False
        self.invincible_timer = 0
        
    def update(self, keys):
        """更新蛇的状态"""
        if not self.is_alive:
            return
            
        # 更新无敌状态
        if self.invincible:
            self.invincible_timer -= 1
            if self.invincible_timer <= 0:
                self.invincible = False
        
        # 处理方向输入
        if keys[K_UP] or keys[K_w]:
            if self.direction != (0, 1):  # 不能直接反向
                self.next_direction = (0, -1)
        elif keys[K_DOWN] or keys[K_s]:
            if self.direction != (0, -1):
                self.next_direction = (0, 1)
        elif keys[K_LEFT] or keys[K_a]:
            if self.direction != (1, 0):
                self.next_direction = (-1, 0)
        elif keys[K_RIGHT] or keys[K_d]:
            if self.direction != (-1, 0):
                self.next_direction = (1, 0)
        
        # 移动计数器
        self.move_counter += 1
        if self.move_counter >= 60 // self.speed:  # 根据速度控制移动频率
            self.move_counter = 0
            self.move()
    
    def move(self):
        """移动蛇"""
        # 更新方向
        self.direction = self.next_direction
        
        # 计算新头部位置
        head_x, head_y = self.body[0]
        dx, dy = self.direction
        new_head = (head_x + dx, head_y + dy)
        
        # 检查是否撞墙
        if (new_head[0] < 0 or new_head[0] >= GRID_WIDTH or 
            new_head[1] < 0 or new_head[1] >= GRID_HEIGHT):
            if not self.invincible:
                self.die()
                return
        
        # 检查是否撞到自己
        if new_head in self.body[1:]:
            if not self.invincible:
                self.die()
                return
        
        # 添加新头部
        self.body.insert(0, new_head)
        
        # 如果需要增长
        if self.grow_pending > 0:
            self.grow_pending -= 1
        else:
            # 移除尾部
            self.body.pop()
        
        # 更新长度记录
        if len(self.body) > self.length_record:
            self.length_record = len(self.body)
    
    def grow(self, amount=1):
        """蛇增长"""
        self.grow_pending += amount
    
    def die(self):
        """蛇死亡"""
        self.is_alive = False
        self.blink_timer = 60
        crash_sound.play()
    
    def eat_food(self, food_type="normal"):
        """吃食物"""
        if food_type == "normal":
            self.score += 10
            self.foods_eaten += 1
            self.grow(1)
            eat_sound.play()
            
            # 每吃5个普通食物增加速度
            if self.foods_eaten % 5 == 0:
                self.speed += SPEED_INCREMENT
        elif food_type == "special":
            self.score += 50
            self.special_foods_eaten += 1
            self.grow(3)
            powerup_sound.play()
            
            # 特殊食物给予无敌效果
            self.invincible = True
            self.invincible_timer = 180  # 3秒无敌
    
    def get_head_rect(self):
        """获取蛇头的矩形"""
        head_x, head_y = self.body[0]
        x = head_x * CELL_SIZE
        y = GAME_AREA_TOP + head_y * CELL_SIZE
        return pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
    
    def get_body_rects(self):
        """获取所有蛇身段的矩形"""
        rects = []
        for segment in self.body:
            x, y = segment
            rect_x = x * CELL_SIZE
            rect_y = GAME_AREA_TOP + y * CELL_SIZE
            rects.append(pygame.Rect(rect_x, rect_y, CELL_SIZE, CELL_SIZE))
        return rects
    
    def draw(self, screen):
        """绘制蛇"""
        if not self.is_alive and (self.blink_timer // 10) % 2 == 0:
            return  # 死亡时闪烁效果
            
        body_rects = self.get_body_rects()
        
        # 绘制蛇身
        for i, rect in enumerate(body_rects):
            if i == 0:  # 蛇头
                color = self.head_color
                if self.invincible and (self.invincible_timer // 10) % 2 == 0:
                    color = YELLOW  # 无敌时闪烁
            else:  # 蛇身
                # 渐变颜色效果
                color_ratio = i / len(body_rects)
                r = int(GREEN[0] * (1 - color_ratio) + DARK_GREEN[0] * color_ratio)
                g = int(GREEN[1] * (1 - color_ratio) + DARK_GREEN[1] * color_ratio)
                b = int(GREEN[2] * (1 - color_ratio) + DARK_GREEN[2] * color_ratio)
                color = (r, g, b)
            
            pygame.draw.rect(screen, color, rect)
            pygame.draw.rect(screen, BLACK, rect, 1)  # 边框
            
            # 蛇头绘制眼睛
            if i == 0:
                eye_size = CELL_SIZE // 5
                
                # 根据方向确定眼睛位置
                dx, dy = self.direction
                
                if dx == 1:  # 向右
                    left_eye = (rect.x + CELL_SIZE - eye_size - 2, rect.y + eye_size)
                    right_eye = (rect.x + CELL_SIZE - eye_size - 2, rect.y + CELL_SIZE - eye_size - 2)
                elif dx == -1:  # 向左
                    left_eye = (rect.x + eye_size, rect.y + eye_size)
                    right_eye = (rect.x + eye_size, rect.y + CELL_SIZE - eye_size - 2)
                elif dy == 1:  # 向下
                    left_eye = (rect.x + eye_size, rect.y + CELL_SIZE - eye_size - 2)
                    right_eye = (rect.x + CELL_SIZE - eye_size - 2, rect.y + CELL_SIZE - eye_size - 2)
                else:  # 向上
                    left_eye = (rect.x + eye_size, rect.y + eye_size)
                    right_eye = (rect.x + CELL_SIZE - eye_size - 2, rect.y + eye_size)
                
                pygame.draw.circle(screen, WHITE, left_eye, eye_size)
                pygame.draw.circle(screen, WHITE, right_eye, eye_size)
                
                # 瞳孔
                pupil_size = eye_size // 2
                pygame.draw.circle(screen, BLACK, left_eye, pupil_size)
                pygame.draw.circle(screen, BLACK, right_eye, pupil_size)
        
        # 绘制移动方向指示器
        if self.is_alive:
            head_rect = body_rects[0]
            dx, dy = self.direction
            
            # 在头部前方绘制方向箭头
            arrow_size = CELL_SIZE // 3
            if dx == 1:  # 向右
                points = [
                    (head_rect.x + CELL_SIZE, head_rect.y + CELL_SIZE//2),
                    (head_rect.x + CELL_SIZE + arrow_size, head_rect.y + CELL_SIZE//2 - arrow_size),
                    (head_rect.x + CELL_SIZE + arrow_size, head_rect.y + CELL_SIZE//2 + arrow_size)
                ]
            elif dx == -1:  # 向左
                points = [
                    (head_rect.x, head_rect.y + CELL_SIZE//2),
                    (head_rect.x - arrow_size, head_rect.y + CELL_SIZE//2 - arrow_size),
                    (head_rect.x - arrow_size, head_rect.y + CELL_SIZE//2 + arrow_size)
                ]
            elif dy == 1:  # 向下
                points = [
                    (head_rect.x + CELL_SIZE//2, head_rect.y + CELL_SIZE),
                    (head_rect.x + CELL_SIZE//2 - arrow_size, head_rect.y + CELL_SIZE + arrow_size),
                    (head_rect.x + CELL_SIZE//2 + arrow_size, head_rect.y + CELL_SIZE + arrow_size)
                ]
            else:  # 向上
                points = [
                    (head_rect.x + CELL_SIZE//2, head_rect.y),
                    (head_rect.x + CELL_SIZE//2 - arrow_size, head_rect.y - arrow_size),
                    (head_rect.x + CELL_SIZE//2 + arrow_size, head_rect.y - arrow_size)
                ]
            
            pygame.draw.polygon(screen, YELLOW, points)

class Food:
    """食物类"""
    def __init__(self, food_type="normal"):
        self.type = food_type
        self.size = CELL_SIZE - 4
        
        if food_type == "normal":
            self.color = RED
            self.value = 10
            self.symbol = "●"
            self.blink = False
        else:  # special
            self.color = YELLOW
            self.value = 50
            self.symbol = "★"
            self.blink = True
            
        self.respawn()
        self.blink_timer = 0
        self.rotation = 0
        
    def respawn(self, snake_body=None):
        """重新生成食物位置"""
        if snake_body is None:
            snake_body = []
            
        # 尝试找到不重叠的位置
        max_attempts = 100
        for _ in range(max_attempts):
            self.x = random.randint(0, GRID_WIDTH - 1)
            self.y = random.randint(0, GRID_HEIGHT - 1)
            
            if (self.x, self.y) not in snake_body:
                return True
        
        # 如果找不到不重叠的位置，使用第一个可用位置
        for x in range(GRID_WIDTH):
            for y in range(GRID_HEIGHT):
                if (x, y) not in snake_body:
                    self.x, self.y = x, y
                    return True
        
        return False  # 没有可用位置
    
    def update(self):
        """更新食物状态"""
        self.blink_timer += 1
        self.rotation = (self.rotation + 2) % 360
        
    def draw(self, screen):
        """绘制食物"""
        x = self.x * CELL_SIZE + CELL_SIZE // 2
        y = GAME_AREA_TOP + self.y * CELL_SIZE + CELL_SIZE // 2
        
        # 闪烁效果
        if self.blink and (self.blink_timer // 15) % 2 == 0:
            return
            
        # 绘制食物主体
        pygame.draw.circle(screen, self.color, (x, y), self.size//2)
        
        # 绘制边框
        border_color = WHITE if self.type == "normal" else ORANGE
        pygame.draw.circle(screen, border_color, (x, y), self.size//2, 2)
        
        # 特殊食物的旋转效果
        if self.type == "special":
            for i in range(4):
                angle = (self.rotation + i * 90) * 3.14159 / 180
                px = x + int((self.size//2 + 3) * pygame.math.Vector2(1, 0).rotate(angle).x)
                py = y + int((self.size//2 + 3) * pygame.math.Vector2(1, 0).rotate(angle).y)
                pygame.draw.circle(screen, YELLOW, (px, py), 3)
        
        # 绘制食物符号
        symbol_font = pygame.font.Font(None, 20)
        symbol_text = symbol_font.render(self.symbol, True, BLACK)
        text_rect = symbol_text.get_rect(center=(x, y))
        screen.blit(symbol_text, text_rect)
    
    def get_rect(self):
        """获取食物的矩形"""
        x = self.x * CELL_SIZE
        y = GAME_AREA_TOP + self.y * CELL_SIZE
        return pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)
    
    def is_colliding(self, snake_head_rect):
        """检查是否与蛇头碰撞"""
        food_rect = self.get_rect()
        return food_rect.colliderect(snake_head_rect)

class Obstacle:
    """障碍物类"""
    def __init__(self, x, y, obstacle_type="wall"):
        self.x = x
        self.y = y
        self.type = obstacle_type
        self.color = GRAY
        
    def draw(self, screen):
        """绘制障碍物"""
        x = self.x * CELL_SIZE
        y = GAME_AREA_TOP + self.y * CELL_SIZE
        
        pygame.draw.rect(screen, self.color, (x, y, CELL_SIZE, CELL_SIZE))
        pygame.draw.rect(screen, DARK_GRAY, (x, y, CELL_SIZE, CELL_SIZE), 2)
        
        # 绘制障碍物图案
        if self.type == "wall":
            # 砖墙图案
            for i in range(3):
                pygame.draw.line(screen, DARK_GRAY, 
                               (x, y + i*CELL_SIZE//3), 
                               (x + CELL_SIZE, y + i*CELL_SIZE//3), 1)
                pygame.draw.line(screen, DARK_GRAY, 
                               (x + i*CELL_SIZE//3, y), 
                               (x + i*CELL_SIZE//3, y + CELL_SIZE), 1)
    
    def get_rect(self):
        """获取障碍物的矩形"""
        x = self.x * CELL_SIZE
        y = GAME_AREA_TOP + self.y * CELL_SIZE
        return pygame.Rect(x, y, CELL_SIZE, CELL_SIZE)

class Game:
    """游戏主类"""
    def __init__(self):
        self.snake = None
        self.foods = []
        self.obstacles = []
        self.level = 1
        self.score = 0
        self.high_score = 0
        self.game_state = "start"  # start, playing, paused, game_over, victory
        self.food_timer = 0
        self.special_food_timer = 0
        self.level_target = 10
        self.obstacle_count = 0
        
        self.init_game()
    
    def init_game(self):
        """初始化游戏"""
        self.snake = Snake()
        self.foods = []
        self.obstacles = []
        self.food_timer = 0
        self.special_food_timer = 0
        self.score = 0
        self.level = 1
        self.level_target = 10
        self.obstacle_count = 0
        
        # 生成初始食物
        self.generate_food("normal")
        
        # 生成初始障碍物
        self.generate_obstacles()
    
    def generate_food(self, food_type="normal"):
        """生成食物"""
        new_food = Food(food_type)
        if new_food.respawn(self.snake.body):
            self.foods.append(new_food)
            return True
        return False
    
    def generate_obstacles(self):
        """生成障碍物"""
        # 清除旧障碍物
        self.obstacles = []
        
        # 根据等级生成障碍物数量
        self.obstacle_count = min((self.level - 1) * 2, 10)
        
        for _ in range(self.obstacle_count):
            max_attempts = 100
            placed = False
            
            for _ in range(max_attempts):
                x = random.randint(0, GRID_WIDTH - 1)
                y = random.randint(0, GRID_HEIGHT - 1)
                
                # 检查位置是否有效
                if (x, y) not in self.snake.body and not any(f.x == x and f.y == y for f in self.foods):
                    # 检查是否靠近蛇头
                    head_x, head_y = self.snake.body[0]
                    if abs(x - head_x) + abs(y - head_y) > 5:  # 距离蛇头至少5格
                        self.obstacles.append(Obstacle(x, y))
                        placed = True
                        break
            
            if not placed:
                break  # 无法放置更多障碍物
    
    def update(self):
        """更新游戏状态"""
        if self.game_state != "playing":
            return
        
        # 更新蛇
        keys = pygame.key.get_pressed()
        self.snake.update(keys)
        
        if not self.snake.is_alive:
            self.game_state = "game_over"
            game_over_sound.play()
            if self.score > self.high_score:
                self.high_score = self.score
            return
        
        # 更新分数
        self.score = self.snake.score
        
        # 检查是否完成等级
        if self.snake.foods_eaten >= self.level_target:
            if self.level >= 5:
                self.game_state = "victory"
                victory_sound.play()
            else:
                self.level += 1
                self.level_target = 10 + (self.level - 1) * 5
                self.snake.speed += SPEED_INCREMENT
                self.generate_obstacles()
        
        # 更新食物
        self.food_timer += 1
        self.special_food_timer += 1
        
        # 定期生成新食物
        if self.food_timer >= 300:  # 5秒生成一个普通食物
            self.food_timer = 0
            if len([f for f in self.foods if f.type == "normal"]) < 3:  # 最多3个普通食物
                self.generate_food("normal")
        
        # 定期生成特殊食物
        if self.special_food_timer >= 600:  # 10秒生成一个特殊食物
            self.special_food_timer = 0
            if len([f for f in self.foods if f.type == "special"]) < 1:  # 最多1个特殊食物
                self.generate_food("special")
        
        # 更新所有食物
        for food in self.foods:
            food.update()
            
            # 检查是否吃到食物
            if food.is_colliding(self.snake.get_head_rect()):
                self.snake.eat_food(food.type)
                self.foods.remove(food)
                
                # 立即生成新食物
                if food.type == "normal":
                    self.generate_food("normal")
        
        # 检查是否撞到障碍物
        if not self.snake.invincible:
            for obstacle in self.obstacles:
                if obstacle.get_rect().colliderect(self.snake.get_head_rect()):
                    self.snake.die()
                    break
    
    def draw(self, screen):
        """绘制游戏"""
        # 绘制背景
        screen.fill(BLACK)
        
        # 绘制游戏区域背景
        game_area_rect = pygame.Rect(0, GAME_AREA_TOP, WIDTH, HEIGHT - GAME_AREA_TOP)
        pygame.draw.rect(screen, (20, 20, 20), game_area_rect)
        
        # 绘制网格线
        for x in range(0, WIDTH, CELL_SIZE):
            pygame.draw.line(screen, (40, 40, 40), (x, GAME_AREA_TOP), (x, HEIGHT), 1)
        for y in range(GAME_AREA_TOP, HEIGHT, CELL_SIZE):
            pygame.draw.line(screen, (40, 40, 40), (0, y), (WIDTH, y), 1)
        
        # 绘制障碍物
        for obstacle in self.obstacles:
            obstacle.draw(screen)
        
        # 绘制食物
        for food in self.foods:
            food.draw(screen)
        
        # 绘制蛇
        self.snake.draw(screen)
        
        # 绘制HUD
        self.draw_hud(screen)
        
        # 绘制游戏状态界面
        if self.game_state == "start":
            self.draw_start_screen(screen)
        elif self.game_state == "paused":
            self.draw_pause_screen(screen)
        elif self.game_state == "game_over":
            self.draw_game_over_screen(screen)
        elif self.game_state == "victory":
            self.draw_victory_screen(screen)
    
    def draw_hud(self, screen):
        """绘制游戏信息界面"""
        # 绘制分数
        score_text = font_medium.render(f"分数: {self.score}", True, WHITE)
        screen.blit(score_text, (20, 20))
        
        # 绘制最高分
        high_score_text = font_medium.render(f"最高分: {self.high_score}", True, YELLOW)
        screen.blit(high_score_text, (20, 60))
        
        # 绘制等级
        level_text = font_medium.render(f"等级: {self.level}", True, WHITE)
        screen.blit(level_text, (WIDTH - 150, 20))
        
        # 绘制进度
        progress_text = font_medium.render(f"进度: {self.snake.foods_eaten}/{self.level_target}", True, WHITE)
        screen.blit(progress_text, (WIDTH - 150, 60))
        
        # 绘制蛇长度
        length_text = font_medium.render(f"长度: {len(self.snake.body)}", True, GREEN)
        screen.blit(length_text, (WIDTH // 2 - 50, 20))
        
        # 绘制速度
        speed_text = font_medium.render(f"速度: {self.snake.speed:.1f}", True, BLUE)
        screen.blit(speed_text, (WIDTH // 2 - 50, 60))
        
        # 绘制控制提示
        controls = [
            "控制: ↑↓←→ 或 WASD 移动",
            "P: 暂停 ESC: 菜单"
        ]
        
        for i, control in enumerate(controls):
            control_text = font_small.render(control, True, LIGHT_GRAY)
            screen.blit(control_text, (WIDTH - 200, HEIGHT - 60 + i * 25))
        
        # 绘制游戏元素说明
        elements = [
            "● 普通食物: 10分，增长1节",
            "★ 特殊食物: 50分，增长3节，无敌3秒",
            "■ 障碍物: 碰到会死亡"
        ]
        
        for i, element in enumerate(elements):
            element_text = font_tiny.render(element, True, LIGHT_GRAY)
            screen.blit(element_text, (20, HEIGHT - 80 + i * 20))
    
    def draw_start_screen(self, screen):
        """绘制开始画面"""
        overlay = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
        overlay.fill((0, 0, 0, 200))
        screen.blit(overlay, (0, 0))
        
        # 标题
        title_text = font_large.render("贪吃蛇大冒险", True, GREEN)
        screen.blit(title_text, (WIDTH//2 - 120, HEIGHT//2 - 150))
        
        # 绘制示例蛇
        snake_example = [(GRID_WIDTH//2 + i, GRID_HEIGHT//2) for i in range(-2, 3)]
        for i, (x, y) in enumerate(snake_example):
            rect_x = x * CELL_SIZE
            rect_y = GAME_AREA_TOP + y * CELL_SIZE
            
            if i == 2:  # 蛇头
                color = DARK_GREEN
            else:
                color = GREEN
                
            pygame.draw.rect(screen, color, (rect_x, rect_y, CELL_SIZE, CELL_SIZE))
            pygame.draw.rect(screen, BLACK, (rect_x, rect_y, CELL_SIZE, CELL_SIZE), 1)
        
        # 游戏说明
        instructions = [
            "游戏目标: 控制贪吃蛇吃食物，避开障碍物，完成5个等级",
            "",
            "游戏规则:",
            "1. 使用方向键或WASD控制蛇移动",
            "2. 吃红色食物(●)增加1节长度和10分",
            "3. 吃黄色食物(★)增加3节长度和50分，获得3秒无敌",
            "4. 碰到墙壁、自己或障碍物会死亡",
            "5. 每个等级需要吃一定数量的食物才能通过",
            "6. 每通过一个等级，速度会增加，障碍物会更多",
            "",
            "等级系统:",
            "等级1: 需要吃10个食物，无障碍物",
            "等级2: 需要吃15个食物，2个障碍物",
            "等级3: 需要吃20个食物，4个障碍物",
            "等级4: 需要吃25个食物，6个障碍物",
            "等级5: 需要吃30个食物，8个障碍物",
            "",
            "提示: 合理规划路线，利用特殊食物的无敌效果!"
        ]
        
        for i, instruction in enumerate(instructions):
            color = YELLOW if i == 0 else WHITE
            instruction_text = font_tiny.render(instruction, True, color)
            screen.blit(instruction_text, (WIDTH//2 - 300, HEIGHT//2 - 100 + i * 20))
        
        # 开始游戏提示
        start_text = font_medium.render("按空格键开始游戏", True, GREEN)
        screen.blit(start_text, (WIDTH//2 - 100, HEIGHT - 100))
    
    def draw_pause_screen(self, screen):
        """绘制暂停画面"""
        overlay = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
        overlay.fill((0, 0, 0, 150))
        screen.blit(overlay, (0, 0))
        
        pause_text = font_large.render("游戏暂停", True, YELLOW)
        screen.blit(pause_text, (WIDTH//2 - 100, HEIGHT//2 - 50))
        
        continue_text = font_medium.render("按P键继续游戏", True, WHITE)
        screen.blit(continue_text, (WIDTH//2 - 100, HEIGHT//2 + 20))
        
        menu_text = font_medium.render("按ESC键返回主菜单", True, WHITE)
        screen.blit(menu_text, (WIDTH//2 - 120, HEIGHT//2 + 60))
    
    def draw_game_over_screen(self, screen):
        """绘制游戏结束画面"""
        overlay = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
        overlay.fill((0, 0, 0, 200))
        screen.blit(overlay, (0, 0))
        
        # 游戏结束文字
        game_over_text = font_large.render("游戏结束!", True, RED)
        screen.blit(game_over_text, (WIDTH//2 - 100, HEIGHT//2 - 100))
        
        # 统计信息
        stats = [
            f"最终分数: {self.score}",
            f"最高分数: {self.high_score}",
            f"达到等级: {self.level}",
            f"蛇最长长度: {self.snake.length_record}",
            f"吃食物总数: {self.snake.foods_eaten}",
            f"吃特殊食物: {self.snake.special_foods_eaten}"
        ]
        
        for i, stat in enumerate(stats):
            stat_text = font_medium.render(stat, True, WHITE)
            screen.blit(stat_text, (WIDTH//2 - 150, HEIGHT//2 - 50 + i * 40))
        
        # 重新开始提示
        restart_text = font_medium.render("按R键重新开始", True, GREEN)
        screen.blit(restart_text, (WIDTH//2 - 80, HEIGHT//2 + 150))
        
        menu_text = font_medium.render("按ESC键返回主菜单", True, YELLOW)
        screen.blit(menu_text, (WIDTH//2 - 100, HEIGHT//2 + 200))
    
    def draw_victory_screen(self, screen):
        """绘制胜利画面"""
        overlay = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
        overlay.fill((0, 0, 0, 200))
        screen.blit(overlay, (0, 0))
        
        # 胜利文字
        victory_text = font_large.render("恭喜通关!", True, YELLOW)
        screen.blit(victory_text, (WIDTH//2 - 100, HEIGHT//2 - 150))
        
        complete_text = font_medium.render("你成功完成了所有5个等级!", True, GREEN)
        screen.blit(complete_text, (WIDTH//2 - 150, HEIGHT//2 - 100))
        
        # 最终统计
        stats = [
            f"最终分数: {self.score}",
            f"最高分数: {self.high_score}",
            f"蛇最长长度: {self.snake.length_record}",
            f"总吃食物数: {self.snake.foods_eaten}",
            f"特殊食物数: {self.snake.special_foods_eaten}",
            f"通关时间: 游戏时间"  # 可以添加计时器
        ]
        
        for i, stat in enumerate(stats):
            stat_text = font_medium.render(stat, True, WHITE)
            screen.blit(stat_text, (WIDTH//2 - 150, HEIGHT//2 - 50 + i * 40))
        
        # 重新开始提示
        restart_text = font_medium.render("按R键重新开始游戏", True, GREEN)
        screen.blit(restart_text, (WIDTH//2 - 100, HEIGHT//2 + 150))
        
        menu_text = font_medium.render("按ESC键返回主菜单", True, YELLOW)
        screen.blit(menu_text, (WIDTH//2 - 100, HEIGHT//2 + 200))
    
    def restart_game(self):
        """重新开始游戏"""
        self.init_game()
        self.game_state = "playing"

def main():
    """主游戏函数"""
    clock = pygame.time.Clock()
    game = Game()
    
    # 主游戏循环
    running = True
    while running:
        clock.tick(FPS)
        
        # 处理事件
        for event in pygame.event.get():
            if event.type == QUIT:
                running = False
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    if game.game_state in ["playing", "paused", "game_over", "victory"]:
                        if game.game_state == "playing":
                            game.game_state = "paused"
                        else:
                            game.game_state = "start"
                    else:
                        running = False
                elif event.key == K_SPACE:
                    if game.game_state == "start":
                        game.game_state = "playing"
                elif event.key == K_p:
                    if game.game_state == "playing":
                        game.game_state = "paused"
                    elif game.game_state == "paused":
                        game.game_state = "playing"
                elif event.key == K_r:
                    if game.game_state in ["game_over", "victory"]:
                        game.restart_game()
        
        # 更新游戏状态
        if game.game_state == "playing":
            game.update()
        
        # 绘制游戏
        game.draw(screen)
        
        pygame.display.flip()
    
    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()