import tkinter as tk
from tkinter import ttk
import random
import math

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

        # 转盘奖品配置，可以自己修改
        self.prizes = ["一等奖", "二等奖", "谢谢参与", "三等奖", "谢谢参与", "四等奖", "谢谢参与", "五等奖"]
        self.sector_num = len(self.prizes)
        self.radius = 220

        # 旋转相关变量
        self.angle = 0  # 当前角度
        self.is_spinning = False
        self.speed = 0

        # 创建画布画转盘
        self.canvas = tk.Canvas(root, width=500, height=500, bg="white")
        self.canvas.pack(pady=10)

        # 按钮
        self.btn_start = ttk.Button(root, text="开始抽奖", command=self.start_spin)
        self.btn_start.pack(pady=5)

        # 结果显示标签
        self.result_var = tk.StringVar(value="请点击按钮开始抽奖")
        ttk.Label(root, textvariable=self.result_var, font=("微软雅黑",16)).pack(pady=10)

        self.center_x = 250
        self.center_y = 250
        self.draw_wheel()
        # 画指针
        self.draw_pointer()

    def draw_wheel(self):
        """绘制转盘"""
        self.canvas.delete("wheel")
        colors = ["#ff6b6b","#4ecdc4","#ffe66d","#1a535c","#ff9f1c","#2ec4b6","#e71d36","#7209b7"]
        per_angle = 360 / self.sector_num

        for i in range(self.sector_num):
            start = i * per_angle
            end = start + per_angle
            # 画扇形
            self.canvas.create_arc(
                self.center_x-self.radius, self.center_y-self.radius,
                self.center_x+self.radius, self.center_y+self.radius,
                start=start, extent=per_angle, fill=colors[i%len(colors)], outline="black", tags="wheel"
            )
            # 奖品文字位置
            mid_angle = math.radians(start + per_angle/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.prizes[i], fill="white", font=("微软雅黑",11), tags="wheel")

        # 中间小圆
        self.canvas.create_oval(self.center_x-30,self.center_y-30,self.center_x+30,self.center_y+30,fill="#333",tags="wheel")

    def draw_pointer(self):
        """顶部指针"""
        self.canvas.create_polygon(
            self.center_x, 10,
            self.center_x-15, 40,
            self.center_x+15, 40,
            fill="#ff2222", outline="black", tags="pointer"
        )

    def start_spin(self):
        if self.is_spinning:
            return
        self.is_spinning = True
        self.btn_start.config(state="disabled")
        self.result_var.set("抽奖中...")
        # 初始速度，总旋转圈数 + 随机落点
        self.speed = random.randint(12,20)
        self.animate()

    def animate(self):
        self.angle += self.speed
        self.canvas.delete("wheel")
        # 旋转画布思路：重绘转盘，叠加旋转偏移角度
        per_angle = 360 / self.sector_num
        colors = ["#ff6b6b","#4ecdc4","#ffe66d","#1a535c","#ff9f1c","#2ec4b6","#e71d36","#7209b7"]

        for i in range(self.sector_num):
            start = i * per_angle + self.angle
            end = start + per_angle
            self.canvas.create_arc(
                self.center_x-self.radius, self.center_y-self.radius,
                self.center_x+self.radius, self.center_y+self.radius,
                start=start, extent=per_angle, fill=colors[i%len(colors)], outline="black", tags="wheel"
            )
            mid_angle = math.radians(start + per_angle/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.prizes[i], fill="white", font=("微软雅黑",11), tags="wheel")
        self.canvas.create_oval(self.center_x-30,self.center_y-30,self.center_x+30,self.center_y+30,fill="#333",tags="wheel")

        # 减速逻辑
        self.speed *= 0.97
        if self.speed > 0.3:
            self.root.after(20, self.animate)
        else:
            # 停止，计算中奖结果
            self.get_result()

    def get_result(self):
        self.is_spinning = False
        self.btn_start.config(state="normal")
        total_angle = self.angle % 360
        per_angle = 360 / self.sector_num
        # 指针在顶部(角度90度位置)，计算落到哪个扇区
        index = int((total_angle) // per_angle) % self.sector_num
        prize = self.prizes[index]
        self.result_var.set(f"🎉恭喜您抽到：{prize}")


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