import tkinter as tk
from tkinter import scrolledtext
import time

class RocketLaunchSimulator:
    def __init__(self, root):
        self.root = root
        self.root.title("🚀 火箭发射控制台模拟")
        self.root.geometry("800x850")
        self.root.resizable(False, False)
        self.root.config(bg="#080c1c")

        self.is_launching = False

        self.create_widgets()

    def create_widgets(self):
        # 标题 + 署名
        title_frame = tk.Frame(self.root, bg="#080c1c")
        title_frame.pack(pady=10)

        title = tk.Label(
            title_frame,
            text="🚀 火箭发射模拟系统",
            font=("黑体", 28, "bold"),
            fg="#00ffcc",
            bg="#080c1c"
        )
        title.pack()

        # 在这里标注你的信息
        sign = tk.Label(
            title_frame,
            text="东台实验中学  817  奚悠然",
            font=("黑体", 16, "bold"),
            fg="#ffff99",
            bg="#080c1c"
        )
        sign.pack(pady=5)

        # 日志区域
        log_frame = tk.LabelFrame(
            self.root,
            text="系统日志",
            fg="#00ffcc",
            bg="#101a3a",
            font=("黑体", 12, "bold")
        )
        log_frame.pack(padx=30, fill=tk.X, pady=5)

        self.log_box = scrolledtext.ScrolledText(
            log_frame, height=9, bg="#000b1f", fg="#00ffcc",
            font=("Consolas", 10)
        )
        self.log_box.pack(fill=tk.X, padx=5, pady=5)
        self.log("系统启动完成，等待发射指令...")

        # 系统检测面板
        check_frame = tk.LabelFrame(
            self.root, text="系统状态", fg="#00ffcc", bg="#101a3a",
            font=("黑体", 12, "bold")
        )
        check_frame.pack(padx=30, fill=tk.X, pady=8)

        self.fuel_lb = tk.Label(check_frame, text="燃料系统：等待检测", fg="yellow", bg="#101a3a")
        self.engine_lb = tk.Label(check_frame, text="引擎系统：等待检测", fg="yellow", bg="#101a3a")
        self.nav_lb = tk.Label(check_frame, text="导航系统：等待检测", fg="yellow", bg="#101a3a")
        self.comm_lb = tk.Label(check_frame, text="通信系统：等待检测", fg="yellow", bg="#101a3a")

        self.fuel_lb.grid(row=0, column=0, padx=20, pady=6)
        self.engine_lb.grid(row=0, column=1, padx=20, pady=6)
        self.nav_lb.grid(row=1, column=0, padx=20, pady=6)
        self.comm_lb.grid(row=1, column=1, padx=20, pady=6)

        # 倒计时
        self.count_lb = tk.Label(
            self.root, text="", font=("Arial", 70, "bold"),
            fg="#ff3333", bg="#080c1c"
        )

        # 按钮
        btn_frame = tk.Frame(self.root, bg="#080c1c")
        btn_frame.pack(pady=10)

        self.start_btn = tk.Button(
            btn_frame, text="开始发射流程", command=self.start_launch,
            bg="#00c48f", fg="white", font=("黑体", 13, "bold"),
            width=18, height=2, relief=tk.GROOVE
        )
        self.start_btn.grid(row=0, column=0, padx=15)

        self.reset_btn = tk.Button(
            btn_frame, text="重置系统", command=self.reset_system,
            bg="#d92a3b", fg="white", font=("黑体", 13, "bold"),
            width=18, height=2, relief=tk.GROOVE
        )
        self.reset_btn.grid(row=0, column=1, padx=15)

        # 发射画布
        self.canvas = tk.Canvas(self.root, width=320, height=400, bg="#080c1c", highlightthickness=0)
        self.canvas.pack(pady=15)

        # 绘制完整火箭
        self.body = self.canvas.create_rectangle(140, 230, 180, 350, fill="#e6e6e6", width=2)
        self.head = self.canvas.create_polygon(140, 230, 180, 230, 160, 190, fill="#ffffff")
        self.flame_main = self.canvas.create_polygon(145, 350, 175, 350, 160, 410, fill="#ff6600")
        self.flame_sub = self.canvas.create_polygon(150, 350, 170, 350, 160, 400, fill="#ffff00")

        self.canvas.itemconfig(self.flame_main, state=tk.HIDDEN)
        self.canvas.itemconfig(self.flame_sub, state=tk.HIDDEN)

    def log(self, msg):
        self.log_box.insert(tk.END, msg + "\n")
        self.log_box.see(tk.END)
        self.root.update()

    def system_check(self):
        self.log("\n===== 全系统自检开始 =====")
        time.sleep(0.7)

        self.fuel_lb.config(text="燃料系统：正常", fg="#00ff99")
        self.log("✅ 燃料系统正常")
        self.root.update()
        time.sleep(0.8)

        self.engine_lb.config(text="引擎系统：正常", fg="#00ff99")
        self.log("✅ 引擎系统正常")
        self.root.update()
        time.sleep(0.8)

        self.nav_lb.config(text="导航系统：正常", fg="#00ff99")
        self.log("✅ 导航系统正常")
        self.root.update()
        time.sleep(0.8)

        self.comm_lb.config(text="通信系统：正常", fg="#00ff99")
        self.log("✅ 通信系统正常")
        self.root.update()
        time.sleep(0.8)

        self.log("===== 所有系统就绪，可以发射 =====")
        time.sleep(1)

    def countdown(self):
        self.count_lb.pack(pady=5)
        for i in range(10, 0, -1):
            self.count_lb.config(text=str(i))
            self.log(f"倒计时：{i} 秒")
            self.root.update()
            time.sleep(1)
        self.count_lb.config(text="发射！")
        self.log("🔥 点火成功！")

    def launch_animation(self):
        self.canvas.itemconfig(self.flame_main, state=tk.NORMAL)
        self.canvas.itemconfig(self.flame_sub, state=tk.NORMAL)
        self.root.update()
        time.sleep(1)

        # 火箭整体升空
        for _ in range(70):
            self.canvas.move(self.body, 0, -5)
            self.canvas.move(self.head, 0, -5)
            self.canvas.move(self.flame_main, 0, -5)
            self.canvas.move(self.flame_sub, 0, -5)
            self.root.update()
            time.sleep(0.03)

        self.log("🚀 火箭已成功升空！发射任务完成！")

    def start_launch(self):
        if self.is_launching:
            return
        self.is_launching = True
        self.start_btn.config(state=tk.DISABLED)

        self.system_check()
        self.countdown()
        self.launch_animation()

        self.is_launching = False

    def reset_system(self):
        self.log_box.delete(1.0, tk.END)
        self.log("🔄 系统已重置")

        self.fuel_lb.config(text="燃料系统：等待检测", fg="yellow")
        self.engine_lb.config(text="引擎系统：等待检测", fg="yellow")
        self.nav_lb.config(text="导航系统：等待检测", fg="yellow")
        self.comm_lb.config(text="通信系统：等待检测", fg="yellow")

        # 火箭复位
        self.canvas.coords(self.body, 140, 230, 180, 350)
        self.canvas.coords(self.head, 140, 230, 180, 230, 160, 190)
        self.canvas.coords(self.flame_main, 145, 350, 175, 350, 160, 410)
        self.canvas.coords(self.flame_sub, 150, 350, 170, 350, 160, 400)

        self.canvas.itemconfig(self.flame_main, state=tk.HIDDEN)
        self.canvas.itemconfig(self.flame_sub, state=tk.HIDDEN)

        self.count_lb.pack_forget()
        self.start_btn.config(state=tk.NORMAL)

if __name__ == "__main__":
    root = tk.Tk()
    app = RocketLaunchSimulator(root)
    root.mainloop()