同学们,今天我们要挑战农场里最赚钱的植物——巨型南瓜!
南瓜有一个神奇的特性:在的农场里,如果所有格子上的南瓜同时完全成熟,它们就会“嘭”地一下,合体成一个巨大的南瓜!
但游戏设计师给我们设置了一个大麻烦:20% 的枯死率。南瓜成熟时,有五分之一的几率会变成“枯萎南瓜”。只要有一颗枯萎了,合体就会失败!
我们要怎么写代码,让无人机搞定这个麻烦呢?我们分三步来破解。
第一步:最笨的方法 —— 只管种
刚开始,大家可能觉得很简单:“我只要让无人机跑遍 36 个格子,全部种上南瓜不就行了吗?”
我们可以写出这样的基础代码:
# 遍历 6x6 农场
for i in range(get_world_size()):
for j in range(get_world_size()):
# 翻土并种植
if get_ground_type() == Grounds.Grassland:
till()
plant(Entities.Pumpkin)
move(North) # 往前走一格
move(East) # 换到下一列
👨🏫 老师提问: 这段代码跑完后,农场里会发生什么?
答案: 无人机种完一遍就停机了。等南瓜成熟后,你会发现地里有几个黑乎乎的“枯萎南瓜”。合体失败!
第二步:勤劳的巡逻员 —— 发现坏的就重种
既然种一遍不行,那我们就让无人机一直巡逻!
我们给外面套上一个 while True:(无限循环)。每次路过一个格子,无人机都要看一眼脚下:
如果脚下是“枯萎南瓜”或者空地,就重新种!
在代码里,怎么表达“不是好南瓜”呢?非常简单,只要脚下的植物不等于 Entities.Pumpkin,就说明出问题了。
while True:
for i in range(get_world_size()):
for j in range(get_world_size()):
# 如果脚下的东西 不是 正常的南瓜(说明是空地或枯萎了)
if get_entity_type() != Entities.Pumpkin:
if get_ground_type() == Grounds.Grassland:
till()
plant(Entities.Pumpkin) # 拔掉重种!
move(North)
move(East)
👨🏫 老师提问: 现在无人机变成了一个不知疲倦的修理工,坏了就补。但是,它知道什么时候该停下来收割吗?
答案: 不知道!就算合成了巨型南瓜,它也只会在上面傻傻地绕圈。我们需要给它一个“收割信号”。
第三步:聪明的质检员 —— 完美标志法(终极极简版)
怎么让无人机知道“36 个南瓜全部熟了”?
我们可以教它一个聪明的方法:设立一个“完美标志”。
在每一次巡逻开始前,无人机先乐观地假设:is_done = True(全部搞定啦!)。
但在巡逻过程中,只要它发现任何一个格子需要重种,或者有南瓜还没熟,它就把标志改成 is_done = False(哎,还没搞定)。
如果巡逻了整整一圈,这个标志依然是 True,那就说明完美了,立刻收割!
👨💻 最终极简代码(仅 16 行核心逻辑):
while True:
is_done = True # 巡逻前,假设已经完美了
for i in range(get_world_size()):
for j in range(get_world_size()):
# 情况1:发现空地或枯萎南瓜 -> 重种,且不完美
if get_entity_type() != Entities.Pumpkin:
if get_ground_type() == Grounds.Grassland:
till()
plant(Entities.Pumpkin)
is_done = False
# 情况2:是正常南瓜,但还没成熟 -> 不完美
elif not can_harvest():
is_done = False
move(North)
move(East)
# 巡逻完一整圈,如果 is_done 还是 True,说明全熟了!
if is_done:
harvest() # 一刀收割巨型南瓜!
课后总结:
同学们,这十几行代码就是算法的魅力。我们没有写复杂的计算,只用了一个小小的 is_done 变量作为“开关”,就完美解决了南瓜枯死和等待成熟的难题!快把代码输入到无人机里,看看属于你的巨型南瓜吧!