同学们,今天我们要挑战农场里最赚钱的植物——巨型南瓜!

南瓜有一个神奇的特性:在的农场里,如果所有格子上的南瓜同时完全成熟,它们就会“嘭”地一下,合体成一个巨大的南瓜!

但游戏设计师给我们设置了一个大麻烦: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 变量作为“开关”,就完美解决了南瓜枯死和等待成熟的难题!快把代码输入到无人机里,看看属于你的巨型南瓜吧!