在自然界中,有些植物种在一起可以互相促进生长,这叫“伴生种植”。在我们的农场里,草、灌木、树和胡萝卜也有自己的“交友偏好”。满足它们的偏好,产量就能获得5倍以上的爆发式增长

一、 核心概念:倾听植物的需求

为了知道植物想要什么邻居,我们需要使用一个全新的函数:get_companion()

当无人机停在一株植物上时调用这个函数,就像在问它:“你想要谁做你的邻居?想让它住在哪里?”

  • 如果有需求: 它会返回一个元组 (Tuple),包含想要的“植物种类”和“目标坐标”。例如:(Entities.Carrot, (3, 5))

  • 如果没有需求: 它会返回 None

🌍 农场是一个“折叠宇宙” (边界折返)

植物要求的邻居位置,一定在它周围 3 步以内。但如果植物长在农场边缘(比如坐标 (0, 0)),它的邻居坐标可能会出现在农场的另一端(比如 (8, 8))。这是因为农场的边界是相连的,从左边走出去会从右边绕回来。我们在编程时不需要自己计算复杂的折返,无人机会自动认路。

二、 Python 知识点:元组解包 (Tuple Unpacking)

在代码中,我们遇到了这样一行神奇的语法:

p_type, (t_x, t_y) = companion_data

get_companion() 返回的数据就像一个“套娃盲盒”:大盒子里装着一个植物种类和一个装有坐标的小盒子。 上面的这行代码,叫做元组解包。它能一次性把盒子拆开,精准地把 Entities.Carrot 赋值给变量 p_type(植物种类),把 35 分别赋值给 t_xt_y(目标 X 和 Y 坐标)。这让我们的代码非常干净利落!

三、 课堂代码精讲:自动跑腿种植机器人

这节课的示例代码,展示了一个非常典型的“扫描-跑腿-返回”的工作流。我们来看看它是如何运转的:

import tool
set_execution_speed(8)       # 调高运行速度
set_world_size(9)            # 设定农场大小
tool.prepare_all_soil()      # 提前翻好所有的土地
size = get_world_size()

while True:
    # 嵌套循环:让无人机挨个巡视每一个地块
    for x in range(size):
        for y in range(size):
            
            # 1. 铺设基础环境:如果地是空的,先种草来触发伴生需求
            if get_entity_type() == None:
                plant(Entities.Grass)
                
            # 2. 倾听需求:获取当前植物的伴生数据
            companion_data = get_companion()
            
            # 3. 跑腿服务:如果植物有需求,就去帮忙种下伴生植物
            if companion_data != None:
                p_type, (t_x, t_y) = companion_data # 解包数据
                tool.move_to(t_x, t_y)              # 移动到目标坐标
                plant(p_type)                       # 种下植物想要的邻居
                tool.move_to(x, y)                  # 【关键】跑腿完毕,返回原处继续巡视
                
            # 4. 日常维护:浇水并检查是否可以收割
            tool.auto_water()
            if can_harvest():
                harvest()

🔍 逻辑剖析:为什么能一直运转?

  1. 打底策略: 代码巧妙地利用了 Entities.Grass(草)。当无人机发现空地时,就先种下草。因为草也有伴生需求,这就启动了整个生态链。

  2. 不迷路策略: 在执行跑腿任务(移动到 t_x, t_y)后,代码立刻使用 tool.move_to(x, y) 强制无人机返回出发点。如果不加这一句,无人机就会在农场里乱跑,打乱 for 循环原本规划好的巡视路线。

📝 课后思考题: 观察我们现在的“跑腿逻辑”,无人机每次满足一株植物的需求,都要来回跑一趟。如果你有多架无人机(结合上一节课的 spawn_drone),你能想到什么办法让大家分工合作,减少单架无人机来回跑腿的时间吗?