import tkinter as tk
import random
import math
from tkinter import messagebox

# 可自定义奖品和对应颜色，数量保持一致
prize_list = ["一等奖", "二等奖", "三等奖", "谢谢参与", "优惠券", "再来一次", "安慰奖", "红包"]
color_list = ["#ff4444", "#ffbb33", "#00C851", "#33b5e5", "#aa66cc", "#ff8800", "#0099cc", "#ff6699"]
section_num = len(prize_list)

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

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

        self.angle = 0
        self.is_rotating = False
        self.target_angle = 0  # 最终要转到的总角度
        self.speed = 15

        # 按钮
        btn_frame = tk.Frame(root)
        btn_frame.pack(pady=8)
        self.start_btn = tk.Button(
            btn_frame, text="点击抽奖", command=self.start_rotate,
            font=("微软雅黑", 14), bg="#f44336", fg="white", width=10
        )
        self.start_btn.pack()

        self.draw_wheel()
        self.draw_pointer()

    def draw_wheel(self):
        self.canvas.delete("wheel")
        cx, cy = 250, 250
        radius = 220
        each_deg = 360 / section_num

        for i in range(section_num):
            start_angle = self.angle + i * each_deg
            end_angle = self.angle + (i + 1) * each_deg

            self.canvas.create_arc(
                cx-radius, cy-radius, cx+radius, cy+radius,
                start=start_angle % 360, extent=each_deg,
                fill=color_list[i], outline="black", tags="wheel"
            )
            # 文字位置
            mid_angle = math.radians(start_angle + each_deg / 2)
            text_r = radius * 0.6
            tx = cx + text_r * math.cos(mid_angle)
            ty = cy - text_r * math.sin(mid_angle)
            self.canvas.create_text(tx, ty, text=prize_list[i], font=("微软雅黑", 9, "bold"), fill="white", tags="wheel")

        self.canvas.create_oval(230, 230, 270, 270, fill="#222222", tags="wheel")

    def draw_pointer(self):
        self.canvas.delete("pointer")
        self.canvas.create_polygon(240, 20, 260, 20, 250, 45, fill="red", outline="black", tags="pointer")

    def start_rotate(self):
        if self.is_rotating:
            return
        self.is_rotating = True
        self.start_btn.config(state=tk.DISABLED)
        # 随机多转几圈再加随机角度
        self.target_angle = self.angle + random.randint(5, 9) * 360 + random.randint(0, 360)
        self.speed = 15
        self.loop_rotate()

    def loop_rotate(self):
        if not self.is_rotating:
            return
        diff = self.target_angle - self.angle

        # 分级减速
        if abs(diff) < 80:
            self.speed = 1
        elif abs(diff) < 200:
            self.speed = 3
        elif abs(diff) < 450:
            self.speed = 6

        # 到达终点停止
        if abs(diff) <= self.speed:
            self.angle = self.target_angle
            self.is_rotating = False
            self.start_btn.config(state=tk.NORMAL)

            # 计算中奖区域
            final_mod = self.angle % 360
            each = 360 / section_num
            # 指针在顶部(角度0)，反向计算
            pos = (360 - final_mod) % 360
            index = int(pos // each)
            win = prize_list[index]
            messagebox.showinfo("中奖啦", f"恭喜抽到：{win}")
            return

        # 更新角度重绘
        self.angle += self.speed
        self.draw_wheel()
        self.draw_pointer()
        self.root.after(16, self.loop_rotate)

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