《编程农场》教程 (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:如果上面的全都不满足,就执行兜底的动作。
(⚠️ 缩进提醒:if、elif、else 必须左边对齐,它们肚子里的动作代码要向右缩进!)
2. 无人机的透视眼:get_entity_type()
以前无人机只能用 can_harvest() 知道“能不能割”,但它其实是个睁眼瞎,根本不知道脚下踩的是什么。 现在,我们有了 get_entity_type()(获取实体类型)函数!
当无人机执行这个探测器时,它会扫描脚下,并返回一个结果:
如果脚下是胡萝卜,它会返回
Entities.Carrot如果脚下是杂草,它会返回
Entities.Grass【最重要的一点】:如果脚下什么都没有(光秃秃的土地),它会返回一个极其特殊的词:
None(意思是“空 / 虚无”)。
3. 实战:组装极速全图播种收割机!
现在,我们要彻底抛弃 while not can_harvest(): pass(原地傻等)的落后逻辑。 我们要给无人机下达这样一套极速扫荡指令:
先看能不能割:如果有熟了的东西(杂草或胡萝卜),直接一刀收割!
再看是不是空地:如果地上空空如也(
None),马上翻土、种下胡萝卜种子!立刻走人:不管刚才做了什么,搞完立刻移动到下一格,绝不回头看!
我们将这套逻辑放进双层 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 个胡萝卜就想让机器停下来。