import pygame
import random
import sys

# 初始化Pygame
pygame.init()

# ===================== 游戏基础设置 =====================
WIDTH, HEIGHT = 800, 400  # 窗口大小
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Python 简易跑酷游戏")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# 时钟（控制帧率）
clock = pygame.time.Clock()
FPS = 60

# ===================== 玩家（小人）设置 =====================
player_size = 40
player_x = 80
player_y = HEIGHT - player_size - 20
player_y_velocity = 0
jump_force = -15  # 跳跃力度
gravity = 0.8     # 重力
is_jump = False

# ===================== 障碍物设置 =====================
obstacle_width = 30
obstacle_height = 50
obstacle_x = WIDTH
obstacle_y = HEIGHT - obstacle_height - 20
obstacle_speed = 8

# ===================== 分数与游戏状态 =====================
score = 0
game_over = False
font = pygame.font.SysFont(None, 55)

# 显示分数
def show_score():
    score_text = font.render(f"分数: {score}", True, BLACK)
    screen.blit(score_text, (10, 10))

# 显示游戏结束
def show_game_over():
    over_text = font.render("游戏结束！按 R 重新开始", True, RED)
    screen.blit(over_text, (WIDTH//2 - 220, HEIGHT//2 - 30))

# 重置游戏
def reset_game():
    global player_y, player_y_velocity, is_jump
    global obstacle_x, obstacle_speed, score, game_over
    player_y = HEIGHT - player_size - 20
    player_y_velocity = 0
    is_jump = False
    obstacle_x = WIDTH
    obstacle_speed = 8
    score = 0
    game_over = False

# ===================== 主游戏循环 =====================
while True:
    screen.fill(WHITE)  # 白色背景

    # 事件监听
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        
        # 空格键跳跃 / R键重启
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and not game_over and not is_jump:
                player_y_velocity = jump_force
                is_jump = True
            if event.key == pygame.K_r and game_over:
                reset_game()

    if not game_over:
        # ===================== 玩家重力与跳跃 =====================
        player_y += player_y_velocity
        player_y_velocity += gravity

        # 落地检测
        if player_y >= HEIGHT - player_size - 20:
            player_y = HEIGHT - player_size - 20
            player_y_velocity = 0
            is_jump = False

        # ===================== 障碍物移动 =====================
        obstacle_x -= obstacle_speed
        if obstacle_x < -obstacle_width:
            obstacle_x = WIDTH
            score += 1  # 躲过一个 +1分
            # 难度递增：速度越来越快
            obstacle_speed += 0.3

        # ===================== 碰撞检测 =====================
        player_rect = pygame.Rect(player_x, player_y, player_size, player_size)
        obstacle_rect = pygame.Rect(obstacle_x, obstacle_y, obstacle_width, obstacle_height)
        if player_rect.colliderect(obstacle_rect):
            game_over = True

    # ===================== 绘制元素 =====================
    # 玩家（蓝色方块）
    pygame.draw.rect(screen, BLUE, (player_x, player_y, player_size, player_size))
    # 障碍物（红色方块）
    pygame.draw.rect(screen, RED, (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
    # 地面
    pygame.draw.rect(screen, GREEN, (0, HEIGHT - 20, WIDTH, 20))

    # 显示文字
    show_score()
    if game_over:
        show_game_over()

    # 更新画面
    pygame.display.update()
    clock.tick(FPS)