在自然界中,有些植物种在一起可以互相促进生长,这叫“伴生种植”。在我们的农场里,草、灌木、树和胡萝卜也有自己的“交友偏好”。满足它们的偏好,产量就能获得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(植物种类),把 3 和 5 分别赋值给 t_x 和 t_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()
🔍 逻辑剖析:为什么能一直运转?
打底策略: 代码巧妙地利用了
Entities.Grass(草)。当无人机发现空地时,就先种下草。因为草也有伴生需求,这就启动了整个生态链。不迷路策略: 在执行跑腿任务(移动到
t_x, t_y)后,代码立刻使用tool.move_to(x, y)强制无人机返回出发点。如果不加这一句,无人机就会在农场里乱跑,打乱for循环原本规划好的巡视路线。
📝 课后思考题: 观察我们现在的“跑腿逻辑”,无人机每次满足一株植物的需求,都要来回跑一趟。如果你有多架无人机(结合上一节课的
spawn_drone),你能想到什么办法让大家分工合作,减少单架无人机来回跑腿的时间吗?