同学们,欢迎回到编程农场!在上一节课中,我们学会了让无人机走直线和简单的循环。但真实的农场是一个二维的网格空间,今天我们将学习如何指挥无人机像“扫描仪”一样扫过整个农场,并利用数学的魔法来优化植物的生长速度。
🥕 任务一:开垦农场,种植胡萝卜
我们要种胡萝卜了!但在种胡萝卜之前,有一条重要的农业规则:胡萝卜不能种在草地上,必须先松土。
1. 新的指令:翻土与种植
till():翻土指令。调用它,脚下的草地 (Grounds.Grassland) 就会变成适合种植的泥土 (Grounds.Soil)。如果再调用一次,泥土又会变回草地。plant(Entities.Carrot):种下胡萝卜。注意,种胡萝卜会消耗我们库存里的“干草”和“木材”哦!
2. 核心概念:嵌套循环 (Nested Loops)
如何让无人机走遍农场的每一个角落(比如 $32 \times 32$ 的网格)?这时候我们需要用两个 for 循环套在一起,这叫做“嵌套循环”。
运行逻辑: 想象你在看书,从左到右看完一行(内层循环),然后再换到下一行继续(外层循环)。
👨💻 实战代码:全自动胡萝卜播种机
size = get_world_size() # 获取农场的大小
# 外层循环:控制无人机向东(右)移动的列数
for i in range(size):
# 内层循环:控制无人机在每一列中向北(上)移动的格数
for j in range(size):
# 1. 翻土
if get_ground_type() == Grounds.Grassland:
till()
# 2. 种胡萝卜
plant(Entities.Carrot)
# 3. 向上走一格
move(North)
# 一列种完后,向右平移一列,准备种下一列
move(East)
🌳 任务二:种树的智慧与“奇偶校验”
现在,我们要种树 (Entities.Tree) 来获取木材。每棵树能产出 5 份木材,收益很高。但树有一个娇气的特性:它们需要生存空间。
如果相邻的格子上(正北、正南、正东、正西)有其他的树,它们的生长速度就会减慢一倍!如果上下左右都种满了树,生长周期会变成原来的 16 倍(2 2 2 * 2)。
1. 策略:棋盘式种植法
为了让树长得最快,我们不能挨着种,而应该像“国际象棋棋盘”上的黑白格一样,交错着种。
2. 核心数学魔法:取余运算符 %
怎么让电脑知道当前格子该不该种树呢?我们需要获取无人机的坐标 $(x, y)$。
get_pos_x():获取当前的 X 坐标(列)。get_pos_y():获取当前的 Y 坐标(行)。
在 Python 中,% 是用来求余数的。
任何数 % 2,结果要么是 0(偶数),要么是 1(奇数)。
魔法规律: 如果我们把格子的 X 和 Y 加起来,只要 (X + Y) 是偶数的地方我们就种树,是奇数的地方我们跳过,就能完美种出一个棋盘!
👨💻 实战代码:高效树木种植阵型
size = get_world_size()
for i in range(size):
for j in range(size):
# 获取当前坐标
x = get_pos_x()
y = get_pos_y()
# 判断 (x + y) 是不是偶数
if (x + y) % 2 == 0:
plant(Entities.Tree)
move(North)
move(East)
(提示:用这个阵型,你不仅能收获木材,还能体验到算法优化带来的速度飞跃!)