下载 App
开发日志 05|收获,让机器人读懂作物状态
这篇日志,我想把上一回的“判断”,用到一件更让人期待的事情上:收获自己种下的胡萝卜。
上一篇里,机器人已经可以根据土壤湿度决定要不要浇水。现在换一个问题:机器人经过一块田,怎样知道这里的作物能不能收了?
看着胡萝卜一点点长大,我们很容易产生“赶紧收起来”的念头。不过,田里有作物,并不代表作物已经成熟。如果只让机器人沿路执行收获,遇到还在生长的胡萝卜,游戏就会提示“作物尚未成熟”。
于是,这次我继续沿用单行农场,准备三块胡萝卜田。为了方便观察,演示里的初始生长进度设为 100%、50%、100%:两边已经成熟,中间还在生长。

图1|Maker实机演示:两边的胡萝卜已经成熟,右侧积木判断“已成熟=成立”后再执行收获。
这段程序的规则是:如果脚下的作物已经成熟,就收获;否则,继续去看下一块地。
和上一回相比,循环、判断、移动这些积木仍然熟悉,改变的是机器人要观察的内容。上次读取土壤湿度,再和一个数字比较;这次读取“已成熟”,检查这个回答是否为“成立”。
我希望玩家慢慢发现,学会一段程序以后,还能换一个条件,把它用在新的事情上。同样的“如果”,既能决定要不要浇水,也能决定要不要收获。
做了 7年儿童图形化编程教学,我很希望看到孩子遇到新问题时,愿意试着用刚才学到的方法解决。能想到“换个条件就可以试试”,说明他开始理解积木之间的关系。
所以,今天仍然只看这一排土地。先确定起点和方向,再逐格检查成熟状态。运行前可以猜一猜:哪些胡萝卜会留下,哪些会被收走?运行后再对照地块,看看自己的理解是否正确。

图2|完成巡查后的Maker实机画面:两边变回空耕地,中间的胡萝卜仍在生长,机器人货舱里装着4份收成。
这次巡查从 X=-1 出发,检查三块作物,最后停在 X=2 的草地上。两块成熟地各收获2份胡萝卜,中间那块则留在田里继续生长。
收获还有一个我想讲清楚的细节:收成先装进机器人的货舱。
地块上的胡萝卜被收走以后,土地仍然是耕地,可以安排下一次播种。货舱里的胡萝卜则需要运到交接箱或仓库,再执行入库。这样,田地、机器人和仓储设施之间,就有了一条能看得见的运输路线。
这一篇先把“成熟才收获”理解清楚。等农场扩大,玩家自然会遇到新问题:货舱满了怎么办?要不要收完一排再入库?能不能安排另一个机器人负责搬运?
我想把这些问题留在游戏里,让玩家从自己的农场需要出发,一点点改进程序。
种植、浇水、收获,单独看都是很简单的动作;加上状态检测和判断,它们就开始彼此联系。同一条路,面对不同状态的作物,机器人会做出不同的行动。
这也是我理解的“涌现”可以生长的起点:玩家掌握几条清楚的规则,再用自己的安排,把小小的一排作物变成一套持续运转的农场。






