import pygame
import random
import sys

# 标准初始化，只不使用字体模块即可
pygame.init()

# 窗口基础设置
WIDTH, HEIGHT = 400, 700
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("2D赛车小游戏")

# 颜色定义
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
GRAY = (80, 80, 80)
YELLOW = (255, 220, 0)
BLACK = (0, 0, 0)

# 帧率控制器
clock = pygame.time.Clock()
FPS = 60

# 玩家赛车
player_w = 50
player_h = 100
player_x = WIDTH // 2 - player_w // 2
player_y = HEIGHT - player_h - 30
player_speed = 7

enemy_cars = []
enemy_width = 50
enemy_height = 100
base_enemy_speed = 5

score = 0
line_y = 0
line_speed = 8

def reset_game():
    global player_x, player_y, enemy_cars, score, base_enemy_speed, line_y
    player_x = WIDTH // 2 - player_w // 2
    player_y = HEIGHT - player_h - 30
    enemy_cars.clear()
    score = 0
    base_enemy_speed = 5
    line_y = 0

def draw_road():
    screen.fill(GRAY)
    # 马路边框
    pygame.draw.rect(screen, WHITE, (0, 0, 8, HEIGHT))
    pygame.draw.rect(screen, WHITE, (WIDTH - 8, 0, 8, HEIGHT))
    # 车道虚线
    global line_y
    line_y += line_speed
    if line_y > 150:
        line_y = 0
    for y in range(line_y, HEIGHT, 150):
        pygame.draw.rect(screen, YELLOW, (WIDTH//2 - 3, y, 6, 80))

def create_enemy():
    lane = random.choice([40, 130, 220, 310])
    enemy_cars.append([lane, -enemy_height])

running = True
game_over = False
reset_game()

while running:
    clock.tick(FPS)
    draw_road()

    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if game_over:
                if event.key == pygame.K_r:
                    reset_game()
                    game_over = False
                if event.key == pygame.K_q:
                    running = False

    if not game_over:
        # 方向键移动
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and player_x > 10:
            player_x -= player_speed
        if keys[pygame.K_RIGHT] and player_x < WIDTH - player_w - 10:
            player_x += player_speed
        if keys[pygame.K_UP] and player_y > 0:
            player_y -= player_speed
        if keys[pygame.K_DOWN] and player_y < HEIGHT - player_h:
            player_y += player_speed

        # 生成敌方车辆
        if random.randint(0, 45) == 1:
            create_enemy()

        # 更新敌人位置
        for car in enemy_cars[:]:
            car[1] += base_enemy_speed
            if car[1] > HEIGHT:
                enemy_cars.remove(car)
                score += 10
                base_enemy_speed = 5 + score / 200

        # 碰撞检测
        player_rect = pygame.Rect(player_x, player_y, player_w, player_h)
        for car in enemy_cars:
            enemy_rect = pygame.Rect(car[0], car[1], enemy_width, enemy_height)
            if player_rect.colliderect(enemy_rect):
                game_over = True

        # 绘制车辆
        pygame.draw.rect(screen, GREEN, (player_x, player_y, player_w, player_h))
        for car in enemy_cars:
            pygame.draw.rect(screen, RED, (car[0], car[1], enemy_width, enemy_height))

    else:
        # 游戏结束黑底提示框（纯图形，不用文字）
        pygame.draw.rect(screen, BLACK, (70, 270, 260, 160))

    pygame.display.update()

pygame.quit()
sys.exit()