巨型农场与多无人机协作

在本次课程中,我们解锁了极其强大的“巨型农场”功能,从控制单架无人机,正式迈入多无人机协同工作的新阶段!通过编写程序,我们可以让无人机“兵分多路”,极大提高农场的运作效率。

一、 核心概念与新指令

在多无人机模式下,我们需要掌握以下三个核心函数:

函数命令

作用说明

spawn_drone(function)

在当前位置生成一架新无人机,并让它开始执行括号内的 function 函数。

max_drones()

获取农场上可同时存在的无人机数量上限

num_drones()

获取当前农场上实际存在的无人机数量。

💡 无人机的“三大定律”

  1. 平行宇宙(各自独立): 每架无人机都运行自己独立的程序,互不干扰,且不会互相碰撞

  2. 众生平等(没有主从之分): 没有所谓的“主”无人机。任何无人机都可以生成新无人机,并且都计入总数上限。

  3. 功成身退: 当无人机完成了你分配给它的函数任务(或程序终止时),它就会自动消失。

二、 课堂代码精讲:自动化胡萝卜矩阵

在课堂上,我们结合了外部引入的工具库(import tool),编写了一段非常高效的多无人机播种代码。我们来拆解它的运作逻辑:

import tool

# 任务函数:单个无人机的工作流程(负责一整列的种植)
def harvest_column():
    for _ in range(get_world_size()):
        tool.auto_water()    # 智能浇水
        tool.auto_till()     # 翻土
        tool.auto_harvest()  # 收割现有作物
        plant(Entities.Carrot) # 种下胡萝卜
        move(North)          # 向上移动一格

# 调度循环:第一架无人机的任务(负责生成其他无人机)
while True:
    if spawn_drone(harvest_column): # 如果成功生成了一架新无人机
        move(East)                  # 本机就向东移动一格,准备生成下一架

🔍 逻辑剖析

  • “播种机”与“调度员”: 这段代码巧妙地让第一架无人机变成了“调度员”。它不断向东(East)移动,每走一步就释放一架新无人机。

  • 垂直作业: 被释放出来的新无人机,成为了“播种机”。它们会执行 harvest_column 函数,一路向北(North)边走边干活,直到处理完这一整列。

  • 极限保护: if spawn_drone(...) 这句判断非常关键。如果生成的无人机数量达到了上限,spawn_drone 会返回 None(相当于 False),此时调度员就不会再向东移动,从而避免了程序报错。

三、 幕后功臣:Tool 工具库的模块化思维

在主程序中,代码显得非常简洁,这是因为我们把复杂的细节隐藏在了 tool.py 中。这种将重复工作打包成独立函数的方法,叫做模块化编程(封装)

回顾一下我们自己编写的强力工具:

1. 智能浇水 (auto_water)

我们加入了水位判断逻辑,让水资源利用率最大化:

def auto_water():
    # 智能浇水逻辑:保持地块湿润以获得5倍加速
    # 只有当有水罐 且 水位低于 0.75 时才使用
    if num_items(Items.Water) > 0:
        if get_water() < 0.75:
            use_item(Items.Water)

2. 智能翻土 (auto_till) 与 智能收割 (auto_harvest)

通过提前判断地形和植物状态,避免了无人机执行无效动作或报错:

def auto_till():
    if get_ground_type() == Grounds.Grassland:
        till()

def auto_harvest():
    if can_harvest():
        harvest()

3. 精准导航 (move_to)

利用 while 循环,无论无人机当前在哪,都能精准移动到我们指定的 (target_x, target_y) 坐标。这是全图自动化的基础。

📝 课后思考题:

观察 tool.py 中的 sway()prepare_all_soil() 函数,它们都使用了一种名为“S 形走位”的算法(通过 i % 2 == 0 判断)。想一想,与每次都回到起点重新开始相比,“S 形走位”为单架无人机节省了多少移动时间?