《编程农场》教程 (2):农场扩张!掌握 move() 移动与 for 循环遍历网格

欢迎回来,见习农夫!

在上一课中,我们制造了一台会“永远原地收割”的永动机。但是,当你解锁了**“扩张”**之后,你的农场变大了!它不再是孤零零的一个地块,而变成了一片广阔的土地。

一直停在原地的无人机只能眼巴巴地看着旁边的草长高。所以今天,我们要为无人机安装“导航系统”,让它在农场里飞起来!

1. 动起来:认识move() 函数与四个方向

为了让无人机移动,游戏引入了一个全新的函数:move()。 同时,还配发了四个方向常量(注意首字母必须大写!):

  • North:向上(北)

  • East:向右(东)

  • South:向下(南)

  • West:向左(西)

比如,move(North) 这个指令,就会让无人机向上移动 1 格。

🌍 农场的魔法边缘(折返机制)

《编程农场》的地图有一个非常神奇的物理特性——它是无缝连接的! 这就好比经典的《吃豆人》游戏:如果无人机一直向上飞,当它越过农场最上面的边缘时,它不会撞墙爆炸,而是会瞬间从农场最下方的边缘钻出来,继续向上飞!

试试下面这段代码:

Python

while True:
    move(North)

你会看到无人机像坐上了无限循环的高速电梯,一直往上飞,永远不会停。

2. 告别无限:你好,for 循环!

在上一课中,我们用了 while True: 来做无限循环。但在扩张后的农场里,如果我们要精确地扫荡每一块地,仅靠漫无目的的瞎飞是不行的。

我们需要无人机做固定次数的动作。这时候,就需要请出编程界的另一位大佬:for 循环。

在《编程农场》中,它通常长这样:

Python

# 让无人机做 5 次后空翻
for i in range(5):
    do_a_flip()
  • range(n):它就像一个计数器,表示一个从 0 到 n-1 的数字范围,总共包含 n 个元素。

  • for i in range(5)::翻译成白话文就是:“接下来的缩进代码,给我老老实实地重复执行 5 次!”

3. 动态适应:聪明的 get_world_size()

随着游戏推进,你的农场会从 3x3 扩张到 4x4、5x5 甚至更大。 如果你在代码里写死 for i in range(3):,等农场变成 4x4 时,无人机就会漏掉最外面那一圈的地。

为了让我们的代码永远不会因为农场扩张而失效,游戏提供了一个神器:get_world_size() 函数。 它会智能读取当前农场的边长。如果是 3x3,它就等于 3;如果是 10x10,它就等于 10。

让我们把它们结合起来,写一段能完美收割“一整列”草的代码:

Python

for i in range(get_world_size()):
    if can_harvest():
        harvest()
    move(North)

运行这段代码,无论你的农场有多高,无人机都会从下到上,一边收割一边移动,完美清理完第一列的每一个格子!

4. 终极实战:遍历整个二维网格!

现在,我们能收割一整列了。但农场是一个二维的正方形网格,怎么才能让无人机像扫地机器人一样,不留死角地扫过每一寸土地呢?

答案是:循环嵌套(在 for 循环里面,再塞一个 for 循环)

想象一下你平时是怎么拖地的:先从下往上拖完一列 ➡️ 然后往右横移一步 ➡️ 再从下往上拖完下一列

把它翻译成代码,就是我们今天的毕业级脚本

Python

# 先把农场的大小存起来,免得每次都去量
size = get_world_size()

# 外层循环:控制我们要扫多少“列” (X轴)
for x in range(size):
    
    # 内层循环:控制我们在这一列里向上走多少“格” (Y轴)
    for y in range(size):
        if can_harvest():
            harvest()
        move(North)  # 边收割边往上走
        
    # 当上面这个内层循环结束时,说明一整列已经走完了!
    # 此时,无人机向右移动一格,准备开始扫荡下一列
    move(East)

代码解析(注意缩进!):

  1. 无人机进入内层循环,不断执行 harvest()move(North),直到爬到最顶端,完成了一列的收割。

  2. 内层循环结束,退回到外层循环的缩进级别,执行 move(East)。无人机向右跨出一步。

  3. 接着又重新开始新一轮的内层循环,再次从下往上爬。

  4. 由于地图的“折返机制”,当它一直往上爬时,天然就会回到最下面;当它扫完最后一列向右走时,天然就会回到第一列的起点。

把这段代码复制进游戏运行,欣赏你的无人机像打印机一样,整齐划一地推平整座农场吧!