import tkinter as tk
import random
import time
import math

# 游戏单词库（可随意加）
WORD_LIST = [
    "python", "program", "computer", "keyboard", "study",
    "happy", "friend", "family", "success", "future",
    "梦想", "坚持", "努力", "快乐", "成长", "勇敢",
    "自由", "热爱", "学习", "技术", "奋斗", "阳光"
]

class FunTypingGame:
    def __init__(self, root):
        self.root = root
        self.root.title("🎮 趣味打字打怪游戏")
        self.root.geometry("900x600")
        self.root.resizable(False, False)
        self.root.config(bg="#1a1a2e")

        # 游戏核心变量
        self.falling_words = []
        self.word_labels = []
        self.score = 0
        self.lives = 5
        self.level = 1
        self.speed = 200
        self.game_running = True

        # 顶部状态栏
        self.top_frame = tk.Frame(root, bg="#0f3460", height=50)
        self.top_frame.pack(fill=tk.X, padx=10, pady=5)

        self.score_label = tk.Label(self.top_frame, text=f"💯 分数: {self.score}", 
                                  font=("黑体", 14), bg="#0f3460", fg="white")
        self.score_label.pack(side=tk.LEFT, padx=10)

        self.life_label = tk.Label(self.top_frame, text=f"❤️ 生命: {self.lives}", 
                                  font=("黑体", 14), bg="#0f3460", fg="white")
        self.life_label.pack(side=tk.LEFT, padx=10)

        self.level_label = tk.Label(self.top_frame, text=f"⭐ 等级: {self.level}", 
                                  font=("黑体", 14), bg="#0f3460", fg="white")
        self.level_label.pack(side=tk.LEFT, padx=10)

        # 游戏区域
        self.game_frame = tk.Frame(root, bg="#1a1a2e")
        self.game_frame.pack(fill=tk.BOTH, expand=True, padx=10)

        # 输入框
        self.input_entry = tk.Entry(root, font=("黑体", 18), justify=tk.CENTER, bg="#f0f0f0")
        self.input_entry.pack(fill=tk.X, padx=20, pady=15)
        self.input_entry.bind("<Return>", self.check_word)
        self.input_entry.focus()

        # 开始生成单词
        self.spawn_word()
        self.update_words()

    # 生成新单词
    def spawn_word(self):
        if not self.game_running:
            return
        
        word = random.choice(WORD_LIST)
        x_pos = random.randint(50, 800)
        
        label = tk.Label(self.game_frame, text=word, font=("黑体", 16), 
                        bg="#1a1a2e", fg="#00ffcc")
        label.place(x=x_pos, y=20)
        
        self.falling_words.append({"word": word, "label": label, "y": 20})
        
        # 等级越高，刷新越快
        delay = max(1200 - self.level * 100, 400)
        self.root.after(delay, self.spawn_word)

    # 单词下落动画
    def update_words(self):
        if not self.game_running:
            return
        
        for i in range(len(self.falling_words)-1, -1, -1):
            data = self.falling_words[i]
            data["y"] += self.level + 1
            
            # 超出屏幕底部
            if data["y"] > 500:
                self.lives -= 1
                self.life_label.config(text=f"❤️ 生命: {self.lives}")
                data["label"].destroy()
                self.falling_words.pop(i)
                
                # 游戏结束
                if self.lives <= 0:
                    self.game_over()
                    return
            else:
                data["label"].place(y=data["y"])
        
        self.root.after(self.speed, self.update_words)

    # 检查输入是否正确
    def check_word(self, event):
        user_input = self.input_entry.get().strip()
        self.input_entry.delete(0, tk.END)

        for i in range(len(self.falling_words)):
            if self.falling_words[i]["word"] == user_input:
                # 加分特效
                self.score += 10
                self.score_label.config(text=f"💯 分数: {self.score}")
                
                # 消灭单词
                self.falling_words[i]["label"].config(fg="#ff2e63", text="💥 BOOM!")
                self.root.after(300, self.falling_words[i]["label"].destroy)
                self.falling_words.pop(i)
                
                # 升级检测
                if self.score % 100 == 0:
                    self.level_up()
                return

    # 升级
    def level_up(self):
        self.level += 1
        self.level_label.config(text=f"⭐ 等级: {self.level}")

    # 游戏结束
    def game_over(self):
        self.game_running = False
        for data in self.falling_words:
            data["label"].destroy()
        
        game_over_label = tk.Label(self.game_frame, 
                                 text=f"🎮 游戏结束\n\n最终分数: {self.score}\n等级: {self.level}",
                                 font=("黑体", 24), bg="#1a1a2e", fg="#ff2e63")
        game_over_label.place(relx=0.5, rely=0.4, anchor=tk.CENTER)

        restart_btn = tk.Button(self.game_frame, text="🔄 重新开始", 
                               font=("黑体", 16), command=self.restart_game,
                               bg="#00ffcc", fg="black")
        restart_btn.place(relx=0.5, rely=0.6, anchor=tk.CENTER)

    # 重新开始
    def restart_game(self):
        self.root.destroy()
        new_root = tk.Tk()
        FunTypingGame(new_root)
        new_root.mainloop()

if __name__ == "__main__":
    root = tk.Tk()
    game = FunTypingGame(root)
    root.mainloop()