import pygame
import random

# 初始化
pygame.init()

# 屏幕设置
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("2D 极速赛车")

# 颜色定义
ROAD_COLOR = (50, 50, 50)
WHITE = (255, 255, 255)
YELLOW = (255, 255, 0)

# 游戏参数
FPS = 60
car_speed = 7
enemy_speed = 5
lane_width = 80  # 车道宽度

# 加载资源 (如果没有图片，则绘制矩形)


def get_image(color):
    img = pygame.Surface((50, 90))
    img.fill(color)
    return img


try:
    player_img = pygame.image.load("car.png")
    enemy_img = pygame.image.load("enemy.png")
except:
    player_img = get_image((0, 150, 255))  # 蓝色备用
    enemy_img = get_image((255, 50, 50))  # 红色备用


def draw_road(offset):
    """绘制流动的公路线"""
    screen.fill(ROAD_COLOR)
    # 绘制路边的白线
    pygame.draw.rect(screen, WHITE, (50, 0, 10, SCREEN_HEIGHT))
    pygame.draw.rect(screen, WHITE, (SCREEN_WIDTH-60, 0, 10, SCREEN_HEIGHT))

    # 绘制中间虚线
    for y in range(-100, SCREEN_HEIGHT, 100):
        pygame.draw.rect(screen, YELLOW, (SCREEN_WIDTH //
                         2 - 5, y + offset, 10, 50))


def main():
    clock = pygame.time.Clock()
    player_x = SCREEN_WIDTH // 2 - 25
    player_y = SCREEN_HEIGHT - 120

    enemy_x = random.randint(60, SCREEN_WIDTH - 110)
    enemy_y = -100

    score = 0
    road_offset = 0
    running = True

    while running:
        # 1. 绘制背景
        road_offset += enemy_speed
        if road_offset > 100:
            road_offset = 0
        draw_road(road_offset)

        # 2. 事件处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        # 3. 玩家移动
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and player_x > 60:
            player_x -= car_speed
        if keys[pygame.K_RIGHT] and player_x < SCREEN_WIDTH - 110:
            player_x += car_speed

        # 4. 敌人移动逻辑
        enemy_y += enemy_speed
        if enemy_y > SCREEN_HEIGHT:
            enemy_y = -100
            enemy_x = random.randint(60, SCREEN_WIDTH - 110)
            score += 1

        # 5. 碰撞检测
        player_rect = pygame.Rect(player_x, player_y, 50, 90)
        enemy_rect = pygame.Rect(enemy_x, enemy_y, 50, 90)

        if player_rect.colliderect(enemy_rect):
            print(f"撞车了！最终得分: {score}")
            running = False

        # 6. 渲染物体
        screen.blit(player_img, (player_x, player_y))
        screen.blit(enemy_img, (enemy_x, enemy_y))

        # 7. 显示分数
        font = pygame.font.SysFont("Arial", 30)
        score_text = font.render(f"Score: {score}", True, WHITE)
        screen.blit(score_text, (10, 10))

        pygame.display.flip()
        clock.tick(FPS)

    pygame.quit()


if __name__ == "__main__":
    main()
