《编程农场》教程 (4):拒绝傻等!用 if-else 和雷达打造极速播种机

欢迎回来,未来的农场大亨!

在上一课中,我们的无人机学会了种胡萝卜。但是,那段代码有一个致命的缺点:太慢了! 无人机每种下一颗种子,都要在原地眼巴巴地看着它长大。这就好比你洗衣服,非要站在洗衣机面前盯着它转完才肯去扫地一样浪费时间。

真正的自动化农场,无人机应该像一台不知疲倦的扫地机器人:掠过地块 -> 发现空地就种 -> 发现熟了就割 -> 没熟就立刻飞走,等下一圈再来看看。

为了实现这种“永不停歇的极速扫荡”,今天我们将解锁两样终极武器:if-else 分支逻辑get_entity_type() 探测雷达

1. 魔法分岔路:if-else 分支语句

在之前的代码里,我们只用了 if(如果)。但现实情况往往是多选一的。

在 Python 编程中,我们可以使用 if-elif-else(如果 - 又如果 - 否则)来让无人机做选择题:

Python

if 今天下雨:
    带伞()
elif 今天出太阳:
    带墨镜()
else:
    什么都不带()
  • if:第一种情况。

  • elif:(else if 的缩写) 如果第一种不满足,那看看满不满足这第二种情况。

  • else:如果上面的全都不满足,就执行兜底的动作。

(⚠️ 缩进提醒:ifelifelse 必须左边对齐,它们肚子里的动作代码要向右缩进!)

2. 无人机的透视眼:get_entity_type()

以前无人机只能用 can_harvest() 知道“能不能割”,但它其实是个睁眼瞎,根本不知道脚下踩的是什么。 现在,我们有了 get_entity_type()(获取实体类型)函数!

当无人机执行这个探测器时,它会扫描脚下,并返回一个结果:

  • 如果脚下是胡萝卜,它会返回 Entities.Carrot

  • 如果脚下是杂草,它会返回 Entities.Grass

  • 【最重要的一点】:如果脚下什么都没有(光秃秃的土地),它会返回一个极其特殊的词:None(意思是“空 / 虚无”)。

3. 实战:组装极速全图播种收割机!

现在,我们要彻底抛弃 while not can_harvest(): pass(原地傻等)的落后逻辑。 我们要给无人机下达这样一套极速扫荡指令

  1. 先看能不能割:如果有熟了的东西(杂草或胡萝卜),直接一刀收割!

  2. 再看是不是空地:如果地上空空如也(None),马上翻土、种下胡萝卜种子!

  3. 立刻走人:不管刚才做了什么,搞完立刻移动到下一格,绝不回头看!

我们将这套逻辑放进双层 for 循环(遍历全图),并在最外面套上一个 while True:(永远一圈接一圈地转)。

清空你的面板,输入这段农场工业革命级别的代码:

Python

size = get_world_size()

# 最外层加上 while True,让无人机一圈一圈永远扫荡下去!
while True:
    
    # 遍历每一列 (X轴)
    for x in range(size):
        # 遍历这一列的每一格 (Y轴)
        for y in range(size):
            
            # 第一步:不管三七二十一,熟了就割!
            if can_harvest():
                harvest()
                
            # 第二步:拿出雷达扫一下,地上是空的吗?
            if get_entity_type() == None:
                # 是空的!赶紧翻土播种
                if get_ground_type() == Grounds.Grassland:
                    till()
                plant(Entities.Carrot)
                
            # 第三步:干脆利落,直接飞向下一格!
            move(North)
            
        # 这一列扫完了,向右换一列
        move(East)

🧠 代码运行时的壮观画面:

当你点击运行时,你会看到无人机像一道闪电!

  • 第一圈:它会把全图的杂草瞬间清空,然后飞速在每一个格子上翻土、种下胡萝卜种子。

  • 第二圈、第三圈:它经过时,胡萝卜还在生长(既不能收割,也不是 None空地)。无人机的判断全部不成立,于是它直接 move(North) 飞过,丝滑无比。

  • 第 N 圈:最早种下的胡萝卜熟了!无人机飞过时触发了 can_harvest(),瞬间收割,紧接着触发下面的空地判断,瞬间又补种上一颗新种子!

结语: 太帅了!你已经成功把《编程农场》从一个“放置等收菜”的游戏,变成了一个“代码驱动的高速流水线”。依靠这个极速扫荡脚本,你的胡萝卜数量会像坐火箭一样飙升。

但等等,随着胡萝卜的爆仓,你马上就要解锁更高级的植物了(比如树木 Tree 或者向日葵 Sunflower)。而且,有时候我们只需要种够 100 个胡萝卜就想让机器停下来。