import pygame
import random
import sys
import time

# 初始化
pygame.init()

# 屏幕设置
WIDTH = 500
HEIGHT = 700
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("🚗 趣味驾驶小游戏")

# 颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (50, 50, 50)
RED = (255, 80, 80)
BLUE = (80, 120, 255)
YELLOW = (255, 230, 0)
GREEN = (0, 220, 100)

# 道路设置
ROAD_WIDTH = 380
LANE1 = WIDTH//2 - ROAD_WIDTH//2 + 20
LANE2 = WIDTH//2 - 40
LANE3 = WIDTH//2 + 20
LANES = [LANE1, LANE2, LANE3]

# 字体（保证中文正常显示）
def get_font(size):
    return pygame.font.SysFont(["simhei", "microsoft yahei", "arial"], size)

# 玩家汽车
class Player:
    def __init__(self):
        self.x = LANE2
        self.y = HEIGHT - 120
        self.w = 50
        self.h = 90
        self.speed = 7

    def draw(self):
        pygame.draw.rect(screen, BLUE, (self.x, self.y, self.w, self.h))
        pygame.draw.rect(screen, (0,50,150), (self.x+10, self.y+10, 30, 60))

    def move_left(self):
        if self.x != LANE1:
            self.x = LANE1

    def move_right(self):
        if self.x != LANE3:
            self.x = LANE3

# 敌人汽车
class Enemy:
    def __init__(self):
        self.x = random.choice(LANES)
        self.y = random.randint(-300, -80)
        self.w = 50
        self.h = 90
        self.speed = random.randint(5, 9)

    def draw(self):
        pygame.draw.rect(screen, RED, (self.x, self.y, self.w, self.h))
        pygame.draw.rect(screen, (150,0,0), (self.x+10, self.y+10, 30, 60))

    def update(self):
        self.y += self.speed
        if self.y > HEIGHT:
            self.y = random.randint(-400, -100)
            self.x = random.choice(LANES)
            self.speed = random.randint(5, 9)

# 绘制道路
def draw_road():
    pygame.draw.rect(screen, GRAY, (WIDTH//2 - ROAD_WIDTH//2, 0, ROAD_WIDTH, HEIGHT))
    for i in range(0, HEIGHT, 60):
        pygame.draw.rect(screen, WHITE, (WIDTH//2 - 3, i, 6, 30))

# 主游戏
def game():
    player = Player()
    enemies = [Enemy() for _ in range(3)]
    clock = pygame.time.Clock()
    score = 0
    game_over = False

    while True:
        screen.fill(BLACK)
        draw_road()
        clock.tick(60)

        # 事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    player.move_left()
                if event.key == pygame.K_RIGHT:
                    player.move_right()

        if not game_over:
            # 更新敌人
            for e in enemies:
                e.update()
                e.draw()

            # 绘制玩家
            player.draw()

            # 碰撞检测
            p_rect = pygame.Rect(player.x, player.y, player.w, player.h)
            for e in enemies:
                e_rect = pygame.Rect(e.x, e.y, e.w, e.h)
                if p_rect.colliderect(e_rect):
                    game_over = True

            # 计分
            score += 1
            score_text = get_font(36).render(f"分数: {score}", True, YELLOW)
            screen.blit(score_text, (20, 20))

        else:
            # 游戏结束界面
            over1 = get_font(60).render("游戏结束", True, RED)
            over2 = get_font(32).render(f"最终分数: {score}", True, WHITE)
            over3 = get_font(28).render("按空格键重新开始", True, GREEN)

            screen.blit(over1, (WIDTH//2 - over1.get_width()//2, HEIGHT//2 - 80))
            screen.blit(over2, (WIDTH//2 - over2.get_width()//2, HEIGHT//2))
            screen.blit(over3, (WIDTH//2 - over3.get_width()//2, HEIGHT//2 + 60))

            # 重新开始
            keys = pygame.key.get_pressed()
            if keys[pygame.K_SPACE]:
                game()

        pygame.display.update()

if __name__ == "__main__":
    game()