import pygame
import math
import sys

# 初始化pygame
pygame.init()

# 窗口设置
WIDTH, HEIGHT = 900, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("2D赛车游戏")
clock = pygame.time.Clock()
FPS = 60

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

# 赛车类
class Car:
    def __init__(self):
        self.x = WIDTH // 2
        self.y = HEIGHT // 2
        self.angle = 0  # 角度 弧度
        self.speed = 0
        self.max_speed = 7
        self.acceleration = 0.18
        self.friction = 0.06
        self.turn_speed = 0.035
        self.car_width = 22
        self.car_height = 44

    def update(self, keys):
        # 加速减速
        if keys[pygame.K_UP]:
            self.speed += self.acceleration
        if keys[pygame.K_DOWN]:
            self.speed -= self.acceleration

        # 摩擦力
        if not keys[pygame.K_UP] and not keys[pygame.K_DOWN]:
            if self.speed > 0:
                self.speed -= self.friction
            elif self.speed < 0:
                self.speed += self.friction

        # 限速
        self.speed = max(-self.max_speed/2, min(self.max_speed, self.speed))

        # 转向，只有车辆有速度才能转弯
        if abs(self.speed) > 0.1:
            turn_dir = 1 if self.speed > 0 else -1
            if keys[pygame.K_LEFT]:
                self.angle += self.turn_speed * turn_dir
            if keys[pygame.K_RIGHT]:
                self.angle -= self.turn_speed * turn_dir

        # 位置更新
        self.x += math.cos(self.angle) * self.speed
        self.y -= math.sin(self.angle) * self.speed

        # 边界碰撞（屏幕围墙）
        if self.x < 30:
            self.x = 30
            self.speed *= -0.4
        if self.x > WIDTH - 30:
            self.x = WIDTH - 30
            self.speed *= -0.4
        if self.y < 30:
            self.y = 30
            self.speed *= -0.4
        if self.y > HEIGHT - 30:
            self.y = HEIGHT - 30
            self.speed *= -0.4

    def draw(self):
        # 创建赛车表面，旋转绘制
        car_surface = pygame.Surface((self.car_width, self.car_height), pygame.SRCALPHA)
        pygame.draw.rect(car_surface, RED, (0, 0, self.car_width, self.car_height))
        pygame.draw.rect(car_surface, YELLOW, (4, 2, self.car_width-8, 10))
        rotated = pygame.transform.rotate(car_surface, math.degrees(self.angle))
        rect = rotated.get_rect(center=(self.x, self.y))
        screen.blit(rotated, rect)

# 绘制赛道简易背景
def draw_track():
    screen.fill(GREEN)
    # 赛道外圈
    pygame.draw.rect(screen, GRAY, (40, 40, WIDTH-80, HEIGHT-80))
    # 草地内圈
    pygame.draw.rect(screen, GREEN, (80, 80, WIDTH-160, HEIGHT-160))
    # 赛道分隔白线
    for i in range(10):
        x = 100 + i * 70
        pygame.draw.rect(screen, WHITE, (x, HEIGHT//2-3, 35, 6))

# ==========【修复重点】使用默认字体，不调用中文字体名！==========
# 无法显示中文！如果需要中文后续再加方案
font = pygame.font.Font(None, 22)
car = Car()

# 游戏主循环
running = True
while running:
    clock.tick(FPS)
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    car.update(keys)

    # 渲染画面
    draw_track()
    car.draw()

    # 绘制UI文字（改成英文，避免乱码）
    speed_text = font.render(f"Speed: {abs(car.speed):.1f}", True, WHITE)
    control_text = font.render("UP/DOWN accelerate | LEFT/RIGHT turn", True, WHITE)
    screen.blit(speed_text, (15, 15))
    screen.blit(control_text, (15, 45))

    pygame.display.flip()

pygame.quit()
sys.exit()