《编程农场》教程 (3):农业升级!开垦耕地与种植胡萝卜
欢迎回来,农场主!
在前两课中,你的无人机已经学会了如何像推土机一样,全自动地在农场里巡逻并收割干草。靠着这些干草,你应该已经解锁了游戏里的第一个真正意义上的“农作物”——胡萝卜(Carrots)!
干草是野生的,但胡萝卜需要精心培育。今天,我们将学习如何真正地“种地”,这需要用到两个全新的指令:till() 和 plant()。
1. 翻土:使用 till() 开垦耕地
在现实世界中,你不能直接把种子撒在长满杂草的硬泥地上,无人机也一样。 如果你直接在草地(Grassland)上尝试种胡萝卜,游戏会无情地报错。
因此,种地的第一步是翻土。 游戏为我们提供了一个新函数:till()(原意为耕作、犁地)。
只要无人机停在普通的草地上,执行 till(),脚下的方块就会变成深色的耕地(Soil)。
2. 播种:使用 plant() 种下希望
土地准备好后,就可以播种了。 我们使用 plant() 函数来进行种植。但是,农场里以后会有向日葵、南瓜、仙人掌等各种作物,无人机怎么知道你要种什么呢?
我们需要给 plant() 函数传递一个参数(Argument),告诉它具体的作物种类:
Python
plant(Entities.Carrot)Entities:意思是“实体/物品大全”。Carrot:意思是胡萝卜。 (⚠️ 排坑提示:注意Entities的E和Carrot的C都必须大写!中间用一个英文句号.连接,这在编程里叫做“调用对象的属性”。)
3. 实战:写一个“单格胡萝卜永动机”
现在,让我们把翻土、播种和收割结合起来。 很多新手会凭直觉写出这样的代码:
Python
# 错误示范:植物还没长大呢!
while True:
till()
plant(Entities.Carrot)
harvest() # 刚种下就收割,会直接把种子铲掉!
千万别这么写! 胡萝卜不是瞬间长大的。如果你刚种下就立刻执行 harvest(),无人机会直接把还没发芽的种子给毁掉,导致你颗粒无收!
我们需要让无人机**“耐心等待”**。 回忆一下我们在第一课学到的 can_harvest()(检查是否可以收割)。我们可以用它来做个“死等”的循环:
Python
# 正确示范:单格胡萝卜永动机
while True:
# 1. 翻土
till()
# 2. 种胡萝卜
plant(Entities.Carrot)
# 3. 核心:耐心等待它长大!
while not can_harvest():
pass
# 4. 长熟了,收割!
harvest()
🧠 代码拆解:什么是 pass?
注意看上面代码里的这一段:
Python
while not can_harvest():
pass
not:是编程里的“反义词”。not can_harvest()的意思就是“还没熟”。pass:这是 Python 语言里的一个特殊单词,意思是"什么都不做,直接跳过”。 连起来的意思就是:“只要胡萝卜还没熟,无人机就什么都不做,在原地傻等,直到它熟了为止,才会跳出这个循环往下走。”
4. 结合移动:铺满整片农场!
现在,把我们在第二课学到的 for 循环和 move() 结合进来,我们就可以让无人机在整片农场上种满胡萝卜了:
Python
size = get_world_size()
for x in range(size):
for y in range(size):
# 翻土、种植
till()
plant(Entities.Carrot)
# 原地等待这颗胡萝卜成熟
while not can_harvest():
pass
# 收割并走向下一格
harvest()
move(North)
# 换行
move(East)
把这段代码输入到游戏里,你会看到无人机走到一个格子上,翻土、播种,然后静静地停在半空中等待,等胡萝卜“嘭”地一下长出来,它一刀收割,然后立刻飞向下一格。
结语: 恭喜你!你已经掌握了《编程农场》中最核心的种植循环(翻土 -> 种植 -> 等待 -> 收割)。你的胡萝卜库存将会开始稳步上升!
但是,你可能会发现一个问题: 无人机每种一棵胡萝卜,都要在原地傻傻地等它长大,这太浪费时间了!真正的农业大亨应该是“一边走一边种,种满全图后再回来统一收割”。