import tkinter as tk
from tkinter import ttk, messagebox
import random
import threading
import time
import math

class CrocodileBathRace:
    def __init__(self, root):
        self.root = root
        self.root.title("🐊 小鳄鱼爱洗澡 · 龟兔赛跑 🐇")
        self.root.geometry("800x650")
        self.root.resizable(False, False)
        self.root.configure(bg="#1a2a3a")
        
        # 赛道参数
        self.TRACK_LENGTH = 800
        self.FINISH_LINE = 770
        
        # 游戏状态
        self.is_running = False
        self.croc_pos = 30
        self.rabbit_pos = 30
        self.croc_speed = 0
        self.rabbit_speed = 0
        self.step_count = 0
        
        # 小鳄鱼特殊状态
        self.water_drops = 0          # 收集的水滴数
        self.max_water_drops = 5      # 最多收集5滴
        self.croc_bonus = 0           # 额外加速
        self.is_bathing = False       # 是否在洗澡动画
        
        # 兔子特殊状态
        self.rabbit_sleep_count = 0   # 连续睡觉次数
        self.rabbit_tired = False     # 是否疲劳
        
        self.setup_ui()
        
    def setup_ui(self):
        """创建界面"""
        main_frame = tk.Frame(self.root, bg="#1a2a3a")
        main_frame.pack(fill=tk.BOTH, expand=True, padx=15, pady=15)
        
        # 标题
        title = tk.Label(
            main_frame,
            text="🐊 小鳄鱼爱洗澡 🚿  vs  🐇 兔子",
            font=("Arial", 22, "bold"),
            fg="#ffd700",
            bg="#1a2a3a"
        )
        title.pack(pady=(0, 10))
        
        # 副标题
        sub_title = tk.Label(
            main_frame,
            text="小鳄鱼需要收集水滴💧才能加速！",
            font=("Arial", 12),
            fg="#87ceeb",
            bg="#1a2a3a"
        )
        sub_title.pack(pady=(0, 10))
        
        # 赛道
        self.canvas = tk.Canvas(
            main_frame,
            width=820,
            height=280,
            bg="#2d4a5a",
            highlightthickness=3,
            highlightbackground="#4a7a8a"
        )
        self.canvas.pack(pady=10)
        
        self.draw_track()
        
        # 状态显示区
        status_frame = tk.Frame(main_frame, bg="#1a2a3a")
        status_frame.pack(fill=tk.X, pady=10)
        
        # 小鳄鱼状态
        croc_info = tk.Frame(status_frame, bg="#1a2a3a")
        croc_info.pack(side=tk.LEFT, padx=20)
        
        self.croc_label = tk.Label(
            croc_info,
            text="🐊 小鳄鱼: 0%",
            font=("Arial", 14, "bold"),
            fg="#4caf50",
            bg="#1a2a3a"
        )
        self.croc_label.pack()
        
        self.water_label = tk.Label(
            croc_info,
            text="💧 水滴: 0/5",
            font=("Arial", 12),
            fg="#87ceeb",
            bg="#1a2a3a"
        )
        self.water_label.pack()
        
        # 中间信息
        center_info = tk.Frame(status_frame, bg="#1a2a3a")
        center_info.pack(side=tk.LEFT, expand=True)
        
        self.step_label = tk.Label(
            center_info,
            text="步数: 0",
            font=("Arial", 14, "bold"),
            fg="#ffffff",
            bg="#1a2a3a"
        )
        self.step_label.pack()
        
        self.status_label = tk.Label(
            center_info,
            text="🏁 准备开始",
            font=("Arial", 12),
            fg="#ffd700",
            bg="#1a2a3a"
        )
        self.status_label.pack()
        
        # 兔子状态
        rabbit_info = tk.Frame(status_frame, bg="#1a2a3a")
        rabbit_info.pack(side=tk.RIGHT, padx=20)
        
        self.rabbit_label = tk.Label(
            rabbit_info,
            text="🐇 兔子: 0%",
            font=("Arial", 14, "bold"),
            fg="#ff6b6b",
            bg="#1a2a3a"
        )
        self.rabbit_label.pack()
        
        self.rabbit_status_label = tk.Label(
            rabbit_info,
            text="⚡ 状态: 正常",
            font=("Arial", 12),
            fg="#ff6b6b",
            bg="#1a2a3a"
        )
        self.rabbit_status_label.pack()
        
        # 控制面板
        control_frame = tk.Frame(main_frame, bg="#1a2a3a")
        control_frame.pack(pady=10)
        
        self.start_btn = tk.Button(
            control_frame,
            text="🏃 开始比赛",
            font=("Arial", 14, "bold"),
            bg="#4caf50",
            fg="white",
            padx=25,
            pady=8,
            cursor="hand2",
            command=self.start_race
        )
        self.start_btn.pack(side=tk.LEFT, padx=10)
        
        self.reset_btn = tk.Button(
            control_frame,
            text="🔄 重置",
            font=("Arial", 14, "bold"),
            bg="#ff9800",
            fg="white",
            padx=25,
            pady=8,
            cursor="hand2",
            command=self.reset_race,
            state=tk.DISABLED
        )
        self.reset_btn.pack(side=tk.LEFT, padx=10)
        
        self.collect_btn = tk.Button(
            control_frame,
            text="💧 收集水滴",
            font=("Arial", 14, "bold"),
            bg="#2196f3",
            fg="white",
            padx=25,
            pady=8,
            cursor="hand2",
            command=self.collect_water,
            state=tk.DISABLED
        )
        self.collect_btn.pack(side=tk.LEFT, padx=10)
        
        # 速度控制
        speed_frame = tk.Frame(main_frame, bg="#1a2a3a")
        speed_frame.pack(pady=5)
        
        tk.Label(
            speed_frame,
            text="⏱️ 速度:",
            font=("Arial", 11),
            fg="#ffffff",
            bg="#1a2a3a"
        ).pack(side=tk.LEFT, padx=5)
        
        self.speed_var = tk.DoubleVar(value=0.5)
        self.speed_scale = ttk.Scale(
            speed_frame,
            from_=0.1,
            to=1.0,
            orient=tk.HORIZONTAL,
            variable=self.speed_var,
            length=150
        )
        self.speed_scale.pack(side=tk.LEFT, padx=5)
        
        tk.Label(
            speed_frame,
            text="慢 ← → 快",
            font=("Arial", 9),
            fg="#aaa",
            bg="#1a2a3a"
        ).pack(side=tk.LEFT, padx=5)
        
        # 游戏规则提示
        rules_frame = tk.Frame(main_frame, bg="#1a2a3a")
        rules_frame.pack(pady=5)
        
        rules_text = """
        📖 规则: 
        • 点击「收集水滴」💧 让小鳄鱼洗澡加速（最多5滴）
        • 每滴水滴增加移动速度 +2
        • 兔子有30%概率睡觉，但兔子会越跑越累！
        • 小鳄鱼虽然慢，但稳定前进+水滴加成
        """
        
        tk.Label(
            rules_frame,
            text=rules_text,
            font=("Arial", 9),
            fg="#aaa",
            bg="#1a2a3a",
            justify=tk.LEFT
        ).pack()
        
        # 日志
        self.log_text = tk.Text(
            main_frame,
            height=4,
            font=("Consolas", 9),
            bg="#0d1b2a",
            fg="#d4d4d4",
            state=tk.DISABLED
        )
        self.log_text.pack(pady=5, fill=tk.X)
        
    def draw_track(self):
        """绘制赛道"""
        # 绘制跑道背景
        self.canvas.create_rectangle(
            20, 60, 800, 260,
            fill="#2a4a5a",
            outline="#4a7a8a",
            width=2
        )
        
        # 赛道装饰 - 草地
        for x in range(20, 810, 40):
            self.canvas.create_line(
                x, 80, x+20, 80,
                fill="#3a6a4a",
                width=2
            )
            self.canvas.create_line(
                x, 240, x+20, 240,
                fill="#3a6a4a",
                width=2
            )
        
        # 起点线
        self.canvas.create_line(
            30, 50, 30, 270,
            fill="#ffd700",
            width=3,
            dash=(5, 5)
        )
        self.canvas.create_text(
            30, 40,
            text="🚩 起点",
            fill="#ffd700",
            font=("Arial", 10, "bold")
        )
        
        # 终点线（彩虹色）
        colors = ['#ff0000', '#ff8800', '#ffff00', '#00ff00', '#0088ff', '#8800ff']
        for i, color in enumerate(colors):
            x = 770 + i * 5
            self.canvas.create_rectangle(
                x, 60, x+5, 260,
                fill=color,
                outline=""
            )
        
        self.canvas.create_text(
            770, 45,
            text="🏁 终点",
            fill="#ffd700",
            font=("Arial", 12, "bold")
        )
        
        # 创建角色
        self.croc = self.canvas.create_text(
            30, 120,
            text="🐊",
            font=("Arial", 50),
            tags="croc"
        )
        
        self.bath_bubble = self.canvas.create_text(
            70, 100,
            text="",
            font=("Arial", 20),
            tags="bubble"
        )
        
        self.rabbit = self.canvas.create_text(
            30, 200,
            text="🐇",
            font=("Arial", 50),
            tags="rabbit"
        )
        
        # 水滴计数器显示在赛道上
        self.water_display = self.canvas.create_text(
            750, 30,
            text="💧 0",
            fill="#87ceeb",
            font=("Arial", 16, "bold"),
            tags="water_display"
        )
        
        # 状态指示器
        self.croc_speed_indicator = self.canvas.create_text(
            50, 270,
            text="",
            fill="#4caf50",
            font=("Arial", 10),
            tags="croc_speed"
        )
        
        self.rabbit_speed_indicator = self.canvas.create_text(
            50, 290,
            text="",
            fill="#ff6b6b",
            font=("Arial", 10),
            tags="rabbit_speed"
        )
        
    def log_message(self, msg):
        """添加日志"""
        self.log_text.config(state=tk.NORMAL)
        self.log_text.insert(tk.END, msg + "\n")
        self.log_text.see(tk.END)
        if self.log_text.index('end-1c') != '1.0':
            lines = int(self.log_text.index('end-1c').split('.')[0])
            if lines > 20:
                self.log_text.delete(1.0, 2.0)
        self.log_text.config(state=tk.DISABLED)
        
    def collect_water(self):
        """小鳄鱼收集水滴（玩家交互）"""
        if not self.is_running:
            messagebox.showinfo("提示", "请先开始比赛！")
            return
        
        if self.water_drops >= self.max_water_drops:
            self.log_message("💧 水滴已满！小鳄鱼已经洗得干干净净了！")
            return
        
        self.water_drops += 1
        self.croc_bonus = self.water_drops * 2  # 每滴水 +2 速度
        
        # 更新显示
        self.water_label.config(text=f"💧 水滴: {self.water_drops}/{self.max_water_drops}")
        self.canvas.itemconfig(self.water_display, text=f"💧 {self.water_drops}")
        
        # 洗澡动画：冒泡泡
        self.canvas.itemconfig(self.bath_bubble, text="🫧" * self.water_drops)
        self.root.after(1000, lambda: self.canvas.itemconfig(self.bath_bubble, text=""))
        
        self.log_message(f"🛁 小鳄鱼收集了水滴！速度加成 +{self.croc_bonus} (共{self.water_drops}滴)")
        
        # 如果集满，特殊提示
        if self.water_drops == self.max_water_drops:
            self.log_message("🌟 小鳄鱼洗得香喷喷！速度全开！🚀")
            messagebox.showinfo("🎉", "小鳄鱼洗完澡了！\n速度达到最大！")
    
    def update_positions(self):
        """更新位置显示"""
        # 更新小鳄鱼
        self.canvas.coords(self.croc, self.croc_pos, 120)
        self.canvas.coords(self.croc_speed_indicator, self.croc_pos, 270)
        
        if self.croc_speed > 0:
            self.canvas.itemconfig(
                self.croc_speed_indicator,
                text=f"🐊 +{self.croc_speed}",
                fill="#4caf50"
            )
        
        # 更新兔子
        self.canvas.coords(self.rabbit, self.rabbit_pos, 200)
        self.canvas.coords(self.rabbit_speed_indicator, self.rabbit_pos, 290)
        
        if self.rabbit_speed == 0:
            self.canvas.itemconfig(
                self.rabbit_speed_indicator,
                text="💤 睡觉",
                fill="#ff6b6b"
            )
        else:
            self.canvas.itemconfig(
                self.rabbit_speed_indicator,
                text=f"🐇 +{self.rabbit_speed}",
                fill="#ff6b6b"
            )
        
        # 计算进度
        croc_percent = int((self.croc_pos - 30) / (self.FINISH_LINE - 30) * 100)
        rabbit_percent = int((self.rabbit_pos - 30) / (self.FINISH_LINE - 30) * 100)
        croc_percent = min(croc_percent, 100)
        rabbit_percent = min(rabbit_percent, 100)
        
        # 更新标签
        self.croc_label.config(text=f"🐊 小鳄鱼: {croc_percent}%")
        self.rabbit_label.config(text=f"🐇 兔子: {rabbit_percent}%")
        self.step_label.config(text=f"步数: {self.step_count}")
        
        self.root.update()
        
    def race_loop(self):
        """比赛主循环"""
        while self.is_running:
            self.step_count += 1
            
            # ===== 小鳄鱼移动 =====
            # 基础速度 1~2 + 水滴加成
            base_croc_speed = random.randint(1, 2)
            self.croc_speed = base_croc_speed + self.croc_bonus
            self.croc_pos = min(
                self.croc_pos + self.croc_speed * 4,
                self.FINISH_LINE
            )
            
            # ===== 兔子移动 =====
            # 兔子有30%概率睡觉
            if random.random() < 0.3:
                self.rabbit_speed = 0
                self.rabbit_sleep_count += 1
                self.rabbit_status_label.config(text="💤 状态: 睡觉中", fg="#ff6b6b")
                self.log_message(f"💤 第{self.step_count}步: 兔子睡着了！(第{self.rabbit_sleep_count}次)")
            else:
                # 兔子速度递减（越跑越累）
                fatigue = min(self.rabbit_sleep_count * 0.5, 3)  # 最多减3
                base_rabbit_speed = random.randint(1, 6)
                self.rabbit_speed = max(1, int(base_rabbit_speed - fatigue))
                self.rabbit_pos = min(
                    self.rabbit_pos + self.rabbit_speed * 4,
                    self.FINISH_LINE
                )
                self.rabbit_status_label.config(text="⚡ 状态: 奔跑中", fg="#4caf50")
                self.log_message(f"🏃 第{self.step_count}步: 兔子跑了 {self.rabbit_speed} 格")
            
            # 更新界面
            self.root.after(0, self.update_positions)
            
            # 检查是否到达终点
            if self.croc_pos >= self.FINISH_LINE or self.rabbit_pos >= self.FINISH_LINE:
                self.is_running = False
                self.root.after(0, self.show_result)
                break
            
            # 控制速度
            time.sleep(self.speed_var.get() * 0.3)
        
        self.root.after(0, self.enable_buttons)
    
    def start_race(self):
        """开始比赛"""
        if self.is_running:
            return
        
        self.reset_race()
        
        self.log_text.config(state=tk.NORMAL)
        self.log_text.delete(1.0, tk.END)
        self.log_text.config(state=tk.DISABLED)
        
        self.is_running = True
        self.step_count = 0
        self.rabbit_sleep_count = 0
        
        self.start_btn.config(state=tk.DISABLED)
        self.reset_btn.config(state=tk.DISABLED)
        self.collect_btn.config(state=tk.NORMAL)
        self.speed_scale.config(state=tk.DISABLED)
        
        self.log_message("🏁 比赛开始！")
        self.log_message("🐊 小鳄鱼需要收集水滴💧才能加速！")
        self.log_message("🐇 兔子跑得快但容易累...")
        self.log_message("💡 点击『收集水滴』按钮给小鳄鱼洗澡！")
        
        self.race_thread = threading.Thread(target=self.race_loop, daemon=True)
        self.race_thread.start()
    
    def enable_buttons(self):
        """启用按钮"""
        self.start_btn.config(state=tk.NORMAL)
        self.reset_btn.config(state=tk.NORMAL)
        self.collect_btn.config(state=tk.DISABLED)
        self.speed_scale.config(state=tk.NORMAL)
    
    def show_result(self):
        """显示结果"""
        # 检查谁赢了（精确比较）
        croc_finished = self.croc_pos >= self.FINISH_LINE
        rabbit_finished = self.rabbit_pos >= self.FINISH_LINE
        
        if croc_finished and rabbit_finished:
            winner = "🤝 双方同时到达！精彩平局！"
            icon = "🤝"
        elif croc_finished:
            winner = "🐊 小鳄鱼赢了！洗完澡果然厉害！🚿"
            icon = "🐊"
        else:
            winner = "🐇 兔子赢了！虽然睡了很多觉，但实力犹在！"
            icon = "🐇"
        
        # 统计信息
        stats = f"""
        📊 比赛统计:
        • 总步数: {self.step_count}
        • 小鳄鱼水滴: {self.water_drops} 滴 (速度加成 +{self.croc_bonus})
        • 兔子睡觉次数: {self.rabbit_sleep_count} 次
        """
        
        self.log_message("=" * 40)
        self.log_message(f"🏆 {winner}")
        self.log_message(stats)
        
        # 弹窗显示详细结果
        result_msg = f"{icon}\n\n{winner}\n\n{stats}"
        messagebox.showinfo("🏆 比赛结果", result_msg)
    
    def reset_race(self):
        """重置"""
        self.is_running = False
        
        self.croc_pos = 30
        self.rabbit_pos = 30
        self.croc_speed = 0
        self.rabbit_speed = 0
        self.step_count = 0
        self.water_drops = 0
        self.croc_bonus = 0
        self.rabbit_sleep_count = 0
        
        self.update_positions()
        
        self.canvas.itemconfig(self.croc_speed_indicator, text="")
        self.canvas.itemconfig(self.rabbit_speed_indicator, text="")
        self.canvas.itemconfig(self.bath_bubble, text="")
        self.canvas.itemconfig(self.water_display, text="💧 0")
        
        self.water_label.config(text="💧 水滴: 0/5")
        self.rabbit_status_label.config(text="⚡ 状态: 正常", fg="#ff6b6b")
        self.status_label.config(text="🔄 已重置")
        
        self.start_btn.config(state=tk.NORMAL)
        self.reset_btn.config(state=tk.DISABLED)
        self.collect_btn.config(state=tk.DISABLED)
        self.speed_scale.config(state=tk.NORMAL)
        
        self.log_text.config(state=tk.NORMAL)
        self.log_text.delete(1.0, tk.END)
        self.log_text.insert(tk.END, "🔄 已重置，点击『开始比赛』重新开跑！\n")
        self.log_text.insert(tk.END, "💡 比赛开始后，记得点击『收集水滴』给小鳄鱼洗澡！\n")
        self.log_text.config(state=tk.DISABLED)

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