import tkinter as tk
import math
import random

class LuckyWheel:
    def __init__(self, root):
        self.root = root
        self.root.title("幸运大转盘抽奖")
        self.root.geometry("550x650")

        # 严格按照你截图顺时针顺序！！【一等奖起始，顺时针排布】
        self.items = [
            "一等奖",
            "谢谢参与",
            "幸运奖",
            "谢谢参与",
            "二等奖",
            "谢谢参与",
            "三等奖",
            "谢谢参与"
        ]
        self.colors = [
            "#ff3333",   # 一等奖 红
            "#f0f0f0",   # 谢谢参与
            "#33b5e5",   # 幸运奖 蓝
            "#f0f0f0",
            "#00c851",   # 二等奖 绿
            "#f0f0f0",
            "#ffbb33",   # 三等奖 黄
            "#f0f0f0"
        ]
        self.item_num = len(self.items)
        self.each_angle = 360 / self.item_num  # 45度一格

        self.canvas = tk.Canvas(root, width=500, height=500, bg='white')
        self.canvas.pack(pady=10)

        self.frame_btn = tk.Frame(root)
        self.frame_btn.pack()
        self.start_btn = tk.Button(self.frame_btn, text="开始抽奖", width=12, height=2,
                                   font=("黑体", 14), command=self.start_rotate)
        self.start_btn.grid(row=0, column=0, padx=10)
        self.stop_btn = tk.Button(self.frame_btn, text="停止抽奖", width=12, height=2,
                                  font=("黑体", 14), command=self.stop_rotate, state=tk.DISABLED)
        self.stop_btn.grid(row=0, column=1, padx=10)

        self.result_label = tk.Label(root, text="等待抽奖...", font=("黑体", 16), fg="#d81e06")
        self.result_label.pack(pady=15)

        self.angle = 0
        self.speed = 0
        self.is_rotating = False
        self.after_id = None

        self.draw_wheel()
        self.draw_pointer()

    def draw_wheel(self):
        self.canvas.delete("wheel")
        cx, cy = 250, 250
        r = 220
        for i in range(self.item_num):
            # -90度：让第0块【一等奖】初始对准顶部指针
            start = math.radians(self.angle + i * self.each_angle - 90)
            end = math.radians(self.angle + (i + 1) * self.each_angle - 90)
            x1 = cx + r * math.cos(start)
            y1 = cy + r * math.sin(start)
            x2 = cx + r * math.cos(end)
            y2 = cy + r * math.sin(end)
            self.canvas.create_polygon(cx, cy, x1, y1, x2, y2,
                                      fill=self.colors[i], outline="black", tags="wheel")

            mid_rad = math.radians(self.angle + i * self.each_angle + self.each_angle / 2 - 90)
            text_r = r * 0.65
            tx = cx + text_r * math.cos(mid_rad)
            ty = cy + text_r * math.sin(mid_rad)
            self.canvas.create_text(tx, ty, text=self.items[i], font=("黑体",11), tags="wheel")
        self.canvas.create_oval(cx-25, cy-25, cx+25, cy+25, fill="#222222", tags="wheel")

    def draw_pointer(self):
        self.canvas.delete("pointer")
        self.canvas.create_polygon(250, 30, 235, 60, 265, 60, fill="#ff2222", tags="pointer")

    def start_rotate(self):
        if self.is_rotating:
            return
        self.is_rotating = True
        self.speed = random.randint(12, 18)
        self.start_btn.config(state=tk.DISABLED)
        self.stop_btn.config(state=tk.NORMAL)
        self.result_label.config(text="抽奖进行中...")
        self.animate()

    def stop_rotate(self):
        if not self.is_rotating:
            return
        def slow_down():
            self.speed -= 0.15
            if self.speed <= 0:
                self.speed = 0
                self.is_rotating = False
                self.start_btn.config(state=tk.NORMAL)
                self.stop_btn.config(state=tk.DISABLED)

                # =====================【最终正确判定公式！！】=====================
                rot = self.angle % 360
                # 关键：转盘顺时针转rot度，反向计算指针落在转盘原始角度
                pointer_origin_angle = (360 - rot) % 360
                idx = int(pointer_origin_angle // self.each_angle)
                prize = self.items[idx]
                self.result_label.config(text=f"🎉 恭喜中奖：{prize}")
                return
            self.angle += self.speed
            self.draw_wheel()
            self.root.after(15, slow_down)
        slow_down()

    def animate(self):
        if not self.is_rotating or self.speed <= 0:
            return
        self.angle += self.speed
        self.draw_wheel()
        self.after_id = self.root.after(15, self.animate)

if __name__ == "__main__":
    window = tk.Tk()
    app = LuckyWheel(window)
    window.mainloop()