import turtle
import time

# ============ 画布初始化（黑色背景）============
screen = turtle.Screen()
screen.setup(900, 600)
screen.title("三棱镜色散")
screen.bgcolor("black")        # ✅ 背景改为黑色
screen.tracer(0)

t = turtle.Turtle()
t.hideturtle()
t.speed(0)
t.penup()


# ============ 绘制光屏 ============
def draw_screen():
    t.penup()
    t.goto(760 - 450, 90 - 300)
    t.pendown()
    t.color("#bbbbbb", "#555555")   # 边框亮灰、填充深灰（黑底下更清楚）
    t.begin_fill()
    for _ in range(2):
        t.forward(40)
        t.left(90)
        t.forward(420)
        t.left(90)
    t.end_fill()


# ============ 绘制棱镜 ============
def draw_prism():
    t.penup()
    t.goto(450 - 450, 180 - 300)    # 顶点
    t.pendown()
    t.color("#8ecae6", "#add8e6")   # 边框亮蓝，填充浅蓝
    t.begin_fill()
    t.goto(350 - 450, 360 - 300)    # 左下
    t.goto(550 - 450, 360 - 300)    # 右下
    t.goto(450 - 450, 180 - 300)    # 回顶点
    t.end_fill()


# ============ 绘制白光 ============
def draw_white_light():
    # 外部白光
    t.penup()
    t.goto(70 - 450, 300 - 300)
    t.pendown()
    t.color("white")                # 黑底下白光很亮
    t.pensize(5)
    t.goto(383 - 450, 300 - 300)
    # 棱镜内部光路
    t.color("#dddddd")
    t.pensize(4)
    t.goto(515 - 450, 290 - 300)
    t.pensize(1)


# ============ 七色光数据 ============
colors = [
    ("红", "#ff4d4d", 470),         # 黑底上稍微提亮
    ("橙", "#ffa64d", 410),
    ("黄", "#ffe066", 350),
    ("绿", "#4dff88", 290),
    ("蓝", "#4da6ff", 230),
    ("靛", "#6b8cff", 170),
    ("紫", "#b366ff", 110),
]


# ============ 单条光线 ============
def draw_ray(color_name, color_code, end_y):
    t.penup()
    t.goto(515 - 450, 290 - 300)
    t.pendown()
    t.color(color_code)
    t.pensize(3)
    t.goto(755 - 450, end_y - 300)
    t.pensize(1)

    # 写颜色名
    t.penup()
    t.goto(740 - 450, end_y - 300)
    t.color(color_code)
    t.write(color_name, align="right",
            font=("Microsoft YaHei", 16, "bold"))


# ============ 最终文字（黑底上用浅色字）============
def draw_text():
    t.penup()
    t.goto(0, -210)
    t.color("#ffffff")              # ✅ 黑底用白字
    t.write("白光不是单色光，它由七种光色混合而成",
            align="center", font=("Microsoft YaHei", 20, "bold"))
    t.goto(0, -250)
    t.write("这种现象叫——光的色散",
            align="center", font=("Microsoft YaHei", 20, "bold"))


# ============ 主流程 ============
def main():
    draw_screen()
    draw_prism()
    draw_white_light()
    screen.update()

    time.sleep(0.5)

    for name, code, y in colors:
        draw_ray(name, code, y)
        screen.update()
        time.sleep(0.35)

    time.sleep(0.3)
    draw_text()
    screen.update()

    turtle.done()


if __name__ == "__main__":
    main()