《编程农场》教程 (11):打造你的“瑞士军刀”!构建通用工具箱 tool.py

欢迎回来,农场首席架构师!

随着农场越来越大,我们要写的代码也越来越长。如果在每个文件里都要重新写一遍“怎么走到某个坐标”、“怎么浇水”、“怎么翻土”,代码不仅会变得极其臃肿,而且一旦写错一个缩进,排查起来会让人崩溃。

在真正的软件工程中,大神们会把这些“脏活累活”统一打包进一个**工具箱(Toolbox)**里。今天,我们就来建立一个名为 tool.py 的专属模块,把它打造成你的瑞士军刀!

核心模块 1:导航与移动系统

要在农场里随心所欲地穿梭,我们需要绝对精准的定位系统。

# ==========================================
# 模块:导航与移动
# ==========================================

def move_to(target_x, target_y):
    """
    精确制导移动:自动飞向指定的 (x, y) 坐标。
    【优化】:加入了 % size 取模运算。这样即使你输入了超出地图大小的坐标,
    无人机也不会死循环,而是会利用地图的“折返机制”自动计算最短路径。
    """
    size = get_world_size()
    tx = target_x % size
    ty = target_y % size
    
    while get_pos_x() < tx: move(East)
    while get_pos_x() > tx: move(West)
    while get_pos_y() < ty: move(North)
    while get_pos_y() > ty: move(South)

def sway():
    """
    S 形全图扫描算法(蛇形走位)。
    相比于普通的逐行扫描,S 形走位在换行时不需要飞回最左边,极大地节约了移动时间!
    """
    size = get_world_size()
    for i in range(size):
        for j in range(size):
            # 偶数列正着走,奇数列倒着走
            if i % 2 == 0:
                y = j
            else:
                y = size - 1 - j
            move_to(i, y)

核心模块 2:农业自动化基础

把最繁琐的资源消耗动作加上“智能判断”,避免浪费背包里的物资。

# ==========================================
# 模块:智能农业操作
# ==========================================

def auto_till():
    """智能翻土:只有当脚下是普通草地时才翻土,避免报错。"""
    if get_ground_type() == Grounds.Grassland:
        till()

def auto_water():
    """
    智能浇水逻辑:保持地块湿润以获得 5 倍生长加速。
    只有当背包里有水罐,且当前水分低于 0.75 时才浇水,绝不浪费一滴水!
    """
    if num_items(Items.Water) > 0:
        if get_water() < 0.75:
            use_item(Items.Water)

def prepare_all_soil():
    """
    拓荒者指令:使用 S 形走位扫荡全图。
    遇到成熟作物就收割,遇到草地就翻土,为你准备一块完美干净的纯耕地农场。
    """
    size = get_world_size()
    for i in range(size):
        for j in range(size):
            if i % 2 == 0:
                y = j
            else:
                y = size - 1 - j
                
            move_to(i, y)
            
            # 顺手收割清理场地
            if can_harvest():
                harvest()
            auto_till()

核心模块 3:【新增】进阶实用动作

这些是我为你额外补充的进阶函数,它们在应对南瓜、向日葵等高级作物时极其好用。

# ==========================================
# 模块:高级复合动作 (老师强烈推荐)
# ==========================================

def smart_plant(entity_type):
    """
    一键傻瓜式种植。
    不用再每次都写 if-else 判断了,只要把种子名字传进来,它会自动帮你清理、翻土并种下。
    用法示例:tool.smart_plant(Entities.Carrot)
    """
    if get_entity_type() != entity_type:
        # 如果当前格子上不是我们要种的东西,直接铲平重种!
        if can_harvest():
            harvest()
        auto_till()
        plant(entity_type)

def wait_until_mature():
    """
    死等协议。
    强制无人机停在当前格子上等待作物成熟,并且在等待期间会自动浇水催熟。
    用法:种下胡萝卜后,直接调用 tool.wait_until_mature()
    """
    while not can_harvest():
        auto_water() # 等待期间别闲着,顺手把水补满
        
def safe_harvest():
    """
    安全收割。
    闭着眼睛调用也不会报错的收割函数。
    """
    if can_harvest():
        harvest()

如何在其他文件中使用你的“工具箱”?

把上面所有的代码保存在一个叫做 tool 的文件里。 然后,在你的主程序文件(比如 main)的最开头,写上这一句:

import tool

# 现在,你可以直接召唤你的工具箱了!
tool.prepare_all_soil()

# 种一颗胡萝卜并等它长大
tool.move_to(0, 0)
tool.smart_plant(Entities.Carrot)
tool.wait_until_mature()
tool.safe_harvest()

你看,你的主程序变得多么干净、整洁!逻辑清晰得就像是一篇说明文。