import tkinter as tk
import random

class RockPaperScissors:
    def __init__(self):
        self.window = tk.Tk()
        self.window.title("石头剪刀布")
        self.window.geometry("400x500")
        self.window.resizable(False, False)
        
        # 游戏变量
        self.player_score = 0
        self.computer_score = 0
        self.draws = 0
        self.rounds = 0
        
        # 创建界面
        self.create_widgets()
    
    def create_widgets(self):
        """创建界面组件"""
        
        # 标题
        title_label = tk.Label(
            self.window,
            text="✊ 石头剪刀布 ✌️",
            font=("Arial", 20, "bold"),
            fg="#333333"
        )
        title_label.pack(pady=20)
        
        # 分数显示
        score_frame = tk.Frame(self.window)
        score_frame.pack(pady=10)
        
        self.score_label = tk.Label(
            score_frame,
            text="你：0  -  电脑：0  -  平局：0",
            font=("Arial", 14)
        )
        self.score_label.pack()
        
        # 结果显示区域
        result_frame = tk.Frame(
            self.window,
            bg="#F0F0F0",
            relief="solid",
            bd=2
        )
        result_frame.pack(pady=20, padx=30, fill="both")
        
        # 玩家出拳显示
        player_frame = tk.Frame(result_frame, bg="#F0F0F0")
        player_frame.pack(pady=10)
        
        tk.Label(
            player_frame,
            text="你出了：",
            font=("Arial", 12),
            bg="#F0F0F0"
        ).pack(side="left")
        
        self.player_choice_label = tk.Label(
            player_frame,
            text="❓",
            font=("Arial", 30),
            bg="#F0F0F0"
        )
        self.player_choice_label.pack(side="left", padx=10)
        
        # VS
        tk.Label(
            result_frame,
            text="VS",
            font=("Arial", 16, "bold"),
            fg="#FF4444",
            bg="#F0F0F0"
        ).pack()
        
        # 电脑出拳显示
        computer_frame = tk.Frame(result_frame, bg="#F0F0F0")
        computer_frame.pack(pady=10)
        
        tk.Label(
            computer_frame,
            text="电脑出了：",
            font=("Arial", 12),
            bg="#F0F0F0"
        ).pack(side="left")
        
        self.computer_choice_label = tk.Label(
            computer_frame,
            text="❓",
            font=("Arial", 30),
            bg="#F0F0F0"
        )
        self.computer_choice_label.pack(side="left", padx=10)
        
        # 胜负结果
        self.result_label = tk.Label(
            self.window,
            text="",
            font=("Arial", 16, "bold"),
            fg="#333333"
        )
        self.result_label.pack(pady=10)
        
        # 出拳按钮
        button_frame = tk.Frame(self.window)
        button_frame.pack(pady=20)
        
        # 石头按钮
        stone_btn = tk.Button(
            button_frame,
            text="✊ 石头",
            font=("Arial", 14),
            width=8,
            height=2,
            command=lambda: self.play("石头"),
            bg="#FF6B6B",
            fg="white",
            activebackground="#FF4444"
        )
        stone_btn.pack(side="left", padx=5)
        
        # 剪刀按钮
        scissors_btn = tk.Button(
            button_frame,
            text="✌️ 剪刀",
            font=("Arial", 14),
            width=8,
            height=2,
            command=lambda: self.play("剪刀"),
            bg="#4ECDC4",
            fg="white",
            activebackground="#45B7AA"
        )
        scissors_btn.pack(side="left", padx=5)
        
        # 布按钮
        paper_btn = tk.Button(
            button_frame,
            text="🖐️ 布",
            font=("Arial", 14),
            width=8,
            height=2,
            command=lambda: self.play("布"),
            bg="#45B7D1",
            fg="white",
            activebackground="#3A9DBF"
        )
        paper_btn.pack(side="left", padx=5)
        
        # 重置按钮
        reset_btn = tk.Button(
            self.window,
            text="🔄 重新开始",
            font=("Arial", 12),
            command=self.reset_game,
            bg="#95A5A6",
            fg="white",
            activebackground="#7F8C8D"
        )
        reset_btn.pack(pady=10)
        
        # 回合数显示
        self.round_label = tk.Label(
            self.window,
            text="第 0 回合",
            font=("Arial", 10),
            fg="#999999"
        )
        self.round_label.pack()
    
    def get_computer_choice(self):
        """电脑随机出拳"""
        choices = ["石头", "剪刀", "布"]
        return random.choice(choices)
    
    def determine_winner(self, player, computer):
        """判断胜负"""
        if player == computer:
            return "draw"
        
        wins = {"石头": "剪刀", "剪刀": "布", "布": "石头"}
        return "player" if wins[player] == computer else "computer"
    
    def play(self, player_choice):
        """进行一回合游戏"""
        self.rounds += 1
        self.round_label.config(text=f"第 {self.rounds} 回合")
        
        # 电脑出拳
        computer_choice = self.get_computer_choice()
        
        # 更新显示
        emoji_map = {"石头": "✊", "剪刀": "✌️", "布": "🖐️"}
        self.player_choice_label.config(text=emoji_map[player_choice])
        self.computer_choice_label.config(text=emoji_map[computer_choice])
        
        # 判断胜负
        result = self.determine_winner(player_choice, computer_choice)
        
        # 更新分数和结果显示
        if result == "player":
            self.player_score += 1
            self.result_label.config(
                text="🎉 你赢了！",
                fg="#4ECDC4"
            )
        elif result == "computer":
            self.computer_score += 1
            self.result_label.config(
                text="😢 电脑赢了！",
                fg="#FF6B6B"
            )
        else:
            self.draws += 1
            self.result_label.config(
                text="🤝 平局！",
                fg="#F39C12"
            )
        
        # 更新分数显示
        self.score_label.config(
            text=f"你：{self.player_score}  -  电脑：{self.computer_score}  -  平局：{self.draws}"
        )
    
    def reset_game(self):
        """重置游戏"""
        self.player_score = 0
        self.computer_score = 0
        self.draws = 0
        self.rounds = 0
        
        # 重置显示
        self.player_choice_label.config(text="❓")
        self.computer_choice_label.config(text="❓")
        self.result_label.config(text="")
        self.score_label.config(text="你：0  -  电脑：0  -  平局：0")
        self.round_label.config(text="第 0 回合")
    
    def run(self):
        """运行游戏"""
        self.window.mainloop()

# 运行游戏
if __name__ == "__main__":
    game = RockPaperScissors()
    game.run()