import tkinter as tk
import random
import math

class LuckyWheel:
    def __init__(self, root):
        self.root = root
        self.root.title("转盘抽奖")
        self.root.geometry("520x620")
        self.root.resizable(False, False)

        # 抽奖选项，可以自己修改奖品
        self.prize_list = [
            "一等奖",
            "谢谢参与",
            "三等奖",
            "谢谢参与",
            "二等奖",
            "谢谢参与",
            "幸运奖",
            "谢谢参与"
        ]
        self.color_list = ["#ff6b6b","#feca57","#48dbfb","#ff9ff3","#54a0ff","#5f27cd","#00d2d3","#ff9f43"]
        self.sector_num = len(self.prize_list)
        self.each_angle = 360 / self.sector_num

        self.angle = 0          # 当前转盘角度
        self.speed = 0          # 旋转速度
        self.is_spinning = False

        # 画布绘制转盘
        self.canvas = tk.Canvas(root, width=500, height=500, bg='white')
        self.canvas.pack(pady=10)
        self.center_x = 250
        self.center_y = 250
        self.radius = 220

        # 按钮
        self.btn_start = tk.Button(root, text="开始抽奖", font=("微软雅黑",14),
                                   width=12, height=2, command=self.start_spin)
        self.btn_start.pack()

        # 中奖文字
        self.result_text = tk.StringVar(value="等待抽奖")
        tk.Label(root, textvariable=self.result_text, font=("微软雅黑",16,"bold"),fg="#d63031").pack(pady=15)

        self.draw_wheel()

    def draw_wheel(self):
        self.canvas.delete("all")
        # 绘制每一块扇形
        for i in range(self.sector_num):
            start = self.angle + i * self.each_angle
            end = start + self.each_angle
            self.draw_sector(start, end, self.color_list[i])
            # 绘制文字
            mid_angle = math.radians((start + end)/2)
            text_r = self.radius * 0.65
            tx = self.center_x + text_r * math.cos(mid_angle)
            ty = self.center_y - text_r * math.sin(mid_angle)
            self.canvas.create_text(tx, ty, text=self.prize_list[i], font=("微软雅黑",10), fill="#222222")
        # 指针
        self.canvas.create_polygon(
            self.center_x, self.center_y - self.radius + 15,
            self.center_x -15, self.center_y - self.radius +45,
            self.center_x +15, self.center_y - self.radius +45,
            fill="#e74c3c"
        )
        # 外圈圆环
        self.canvas.create_oval(self.center_x-self.radius, self.center_y-self.radius,
                                self.center_x+self.radius, self.center_y+self.radius, outline="#222", width=3)

    def draw_sector(self, start_deg, end_deg, fill_color):
        points = [(self.center_x, self.center_y)]
        for deg in range(int(start_deg), int(end_deg)+1):
            rad = math.radians(deg)
            x = self.center_x + self.radius * math.cos(rad)
            y = self.center_y - self.radius * math.sin(rad)
            points.append((x,y))
        self.canvas.create_polygon(points, fill=fill_color, outline="white", width=2)

    def start_spin(self):
        if self.is_spinning:
            return
        self.is_spinning = True
        self.speed = random.randint(8,14)
        self.result_text.set("抽奖进行中...")
        self.rotate_loop()

    def rotate_loop(self):
        if not self.is_spinning:
            return
        self.angle += self.speed
        self.draw_wheel()

        # 减速
        self.speed *= 0.985
        if self.speed < 0.3:
            self.is_spinning = False
            self.get_result()
            return
        self.root.after(15, self.rotate_loop)

    def get_result(self):
        # 根据最终角度计算指针指向哪个扇形
        total_angle = self.angle % 360
        # 指针在顶部(270度方向)
        pointer_angle = 270
        diff = (pointer_angle - total_angle) % 360
        idx = int(diff // self.each_angle)
        prize = self.prize_list[idx]
        self.result_text.set(f"🎉恭喜抽到：{prize}")

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