import tkinter as tk
from tkinter import messagebox
import random
import time

# 作物配置
CROPS = {
    "青菜": {"cost": 10, "grow_time": 8, "sell": 30},
    "萝卜": {"cost": 15, "grow_time": 12, "sell": 45},
    "玉米": {"cost": 25, "grow_time": 18, "sell": 70}
}

class FarmGame:
    def __init__(self, root):
        self.root = root
        self.root.title("农家乐种菜游戏")
        self.root.geometry("720x520")

        self.money = 100
        self.selected_seed = None

        # 菜地 4行4列
        self.rows = 4
        self.cols = 4
        self.land = [[None for _ in range(self.cols)] for _ in range(self.rows)]
        # land[r][c] = {"crop":名字, "plant_time":时间, "watered":布尔}

        # 顶部信息栏
        top_frame = tk.Frame(root)
        top_frame.pack(pady=5)
        self.money_label = tk.Label(top_frame, text=f"💰金币：{self.money}", font=("",14))
        self.money_label.pack(side=tk.LEFT, padx=10)

        self.tip_label = tk.Label(top_frame, text="请先选择种子，再点击空地播种", font=("",12), fg="#226622")
        self.tip_label.pack(side=tk.LEFT, padx=20)

        # 种子选择区
        seed_frame = tk.Frame(root)
        seed_frame.pack(pady=5)
        tk.Label(seed_frame, text="选择种子：").pack(side=tk.LEFT)
        for name, info in CROPS.items():
            btn = tk.Button(seed_frame, text=f"{name}(种子{info['cost']}金币)",
                            command=lambda n=name: self.choose_seed(n))
            btn.pack(side=tk.LEFT, padx=4)

        # 操作按钮区
        btn_frame = tk.Frame(root)
        btn_frame.pack(pady=5)
        tk.Button(btn_frame, text="浇水", command=self.water_mode).pack(side=tk.LEFT, padx=5)
        tk.Button(btn_frame, text="收获", command=self.harvest_mode).pack(side=tk.LEFT, padx=5)
        self.action_mode = "seed"  # seed / water / harvest

        # 菜地画布
        self.canvas = tk.Canvas(root, bg="#8b7355", width=640, height=360)
        self.canvas.pack(pady=10)
        self.cell_w = 150
        self.cell_h = 85
        # ========== 修复：删除错误的 bind 这一行 ==========
        # self.canvas.bind("<Button-1>", self.click_land)

        self.draw_land()
        self.game_loop()

    def choose_seed(self, crop_name):
        self.selected_seed = crop_name
        self.action_mode = "seed"
        self.tip_label.config(text=f"已选中【{crop_name}】，点击空地播种")

    def water_mode(self):
        self.action_mode = "water"
        self.tip_label.config(text="浇水模式：点击作物浇水")

    def harvest_mode(self):
        self.action_mode = "harvest"
        self.tip_label.config(text="收获模式：点击成熟作物卖出")

    def draw_land(self):
        self.canvas.delete("all")
        for r in range(self.rows):
            for c in range(self.cols):
                x1 = c * self.cell_w + 8
                y1 = r * self.cell_h + 8
                x2 = x1 + self.cell_w - 10
                y2 = y1 + self.cell_h - 10
                rect_id = self.canvas.create_rectangle(x1,y1,x2,y2, fill="#c2b280", outline="#604830", width=2)
                # 格子点击绑定
                self.canvas.tag_bind(rect_id, "<Button-1>", lambda e,rr=r,cc=c: self.click_cell(rr,cc))

                cell_data = self.land[r][c]
                if cell_data is None:
                    self.canvas.create_text((x1+x2)//2, (y1+y2)//2, text="空地", font=("",11), fill="#444444")
                else:
                    crop = cell_data["crop"]
                    plant_t = cell_data["plant_time"]
                    need_t = CROPS[crop]["grow_time"]
                    now = time.time()
                    past = now - plant_t
                    progress = min(past / need_t, 1.0)

                    if progress >= 1.0:
                        status = "✅成熟"
                        color = "#007700"
                    else:
                        status = f"生长{int(progress*100)}%"
                        color = "#995500"
                    water_txt = "已浇水" if cell_data["watered"] else "待浇水"
                    self.canvas.create_text((x1+x2)//2, y1+18, text=crop, font=("",11), fill=color)
                    self.canvas.create_text((x1+x2)//2, y1+40, text=status, font=("",10))
                    self.canvas.create_text((x1+x2)//2, y1+62, text=water_txt, font=("",9))

    def click_cell(self, r, c):
        cell = self.land[r][c]
        if self.action_mode == "seed":
            if cell is not None:
                self.tip_label.config(text="这块地已经种东西了！")
                return
            if self.selected_seed is None:
                self.tip_label.config(text="先在上方选择种子！")
                return
            cost = CROPS[self.selected_seed]["cost"]
            if self.money < cost:
                self.tip_label.config(text="金币不足！")
                return
            self.money -= cost
            self.land[r][c] = {
                "crop": self.selected_seed,
                "plant_time": time.time(),
                "watered": False
            }
            self.tip_label.config(text=f"种下 {self.selected_seed}！记得浇水")

        elif self.action_mode == "water":
            if cell is None:
                self.tip_label.config(text="空地上不用浇水！")
                return
            if cell["watered"]:
                self.tip_label.config(text="已经浇过水啦！")
                return
            cell["watered"] = True
            self.tip_label.config(text="浇水成功，作物继续生长！")

        elif self.action_mode == "harvest":
            if cell is None:
                self.tip_label.config(text="空地无法收获！")
                return
            crop = cell["crop"]
            need_t = CROPS[crop]["grow_time"]
            past = time.time() - cell["plant_time"]
            if past < need_t:
                self.tip_label.config(text="作物还没成熟！")
                return
            earn = CROPS[crop]["sell"]
            self.money += earn
            self.land[r][c] = None
            self.tip_label.config(text=f"收获成功！获得{earn}金币")

        self.update_ui()

    def update_ui(self):
        self.money_label.config(text=f"💰金币：{self.money}")
        self.draw_land()

    def game_loop(self):
        self.draw_land()
        self.root.after(600, self.game_loop)

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