import pygame
import random
import sys

# ---------------------- 初始化设置 ----------------------
pygame.init()

# 窗口大小
WIDTH = 480
HEIGHT = 700
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("滑雪模拟器")

# 颜色定义
WHITE = (255, 255, 255)
GREEN = (34, 139, 34)
RED = (200, 0, 0)
GRAY = (180, 180, 180)
BLACK = (0, 0, 0)

# 滑雪者参数
skier_width = 40
skier_height = 60
skier_x = WIDTH // 2 - skier_width // 2
skier_y = HEIGHT - 120
skier_speed = 7

# 障碍物树木列表
trees = []
tree_width = 35
tree_height = 50
tree_speed = 5
spawn_timer = 0
spawn_interval = 45

score = 0
clock = pygame.time.Clock()
fps = 60

game_over = False

# ---------------------- 生成树木函数 ----------------------
def create_tree():
    x = random.randint(0, WIDTH - tree_width)
    y = -tree_height
    trees.append([x, y])

# ---------------------- 主循环 ----------------------
running = True
while running:
    screen.fill(WHITE)  # 白色雪地背景

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 游戏结束后按空格重开
        if event.type == pygame.KEYDOWN and game_over:
            if event.key == pygame.K_SPACE:
                # 重置所有游戏参数
                skier_x = WIDTH // 2 - skier_width // 2
                skier_y = HEIGHT - 120
                trees.clear()
                score = 0
                game_over = False

    if not game_over:
        # 按键控制左右移动
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            skier_x -= skier_speed
        if keys[pygame.K_RIGHT]:
            skier_x += skier_speed

        # 边界限制，不能滑出屏幕
        skier_x = max(0, min(WIDTH - skier_width, skier_x))

        # 生成树木障碍物
        spawn_timer += 1
        if spawn_timer >= spawn_interval:
            create_tree()
            spawn_timer = 0

        # 更新树木位置
        for tree in trees[:]:
            tree[1] += tree_speed
            if tree[1] > HEIGHT:
                trees.remove(tree)
                score += 10

        # 碰撞检测
        skier_rect = pygame.Rect(skier_x, skier_y, skier_width, skier_height)
        for tree in trees:
            tree_rect = pygame.Rect(tree[0], tree[1], tree_width, tree_height)
            if skier_rect.colliderect(tree_rect):
                game_over = True

    # ---------------------- 绘制元素 ----------------------
    # 画滑雪者（红色方块代表，你可以替换成图片）
    pygame.draw.rect(screen, RED, (skier_x, skier_y, skier_width, skier_height))

    # 画树木（绿色方块）
    for t in trees:
        pygame.draw.rect(screen, GREEN, (t[0], t[1], tree_width, tree_height))

    # 绘制分数

    # 游戏结束画面
    if game_over:
        over_text = font.render("游戏结束! 空格重新开始", True, RED)
        screen.blit(over_text, (50, HEIGHT//2))

    pygame.display.flip()
    clock.tick(fps)

pygame.quit()
sys.exit()
