恐龙帽:把它当成贪吃蛇,不要当成普通收割

恐龙帽不是种地脚本。戴上它,有仙人掌就能刷出苹果;每吃一颗,身后多一节尾巴;只有摘掉帽子才会变成骨头。先把规则看懂,完整脚本放在最后,可复制也可自己拼。

手绘卡通:戴恐龙帽的无人机停在农田格子上方,地上有一颗苹果

第 1 步 — 先把帽子戴上

不戴帽子,什么恐龙规则都不会生效。一个函数,一个帽子名字。执行这一行后,如果你仙人掌够,游戏会买一颗苹果,放在无人机脚下。

python
change_hat(Hats.Dinosaur_Hat)

整场只有一顶恐龙帽,只有一台无人机戴得上。clear() 会把帽子换回草帽,并清空农田。

第 2 步 — 为什么要有仙人掌

苹果不是 plant() 种出来的。游戏会从背包里扣仙人掌。仙人掌为 0 时,不会出现苹果,后面的追逐也无从谈起。开跑前先看一眼数量。

python
if num_items(Items.Cactus) == 0:
    print("need cactus before the hat is useful")

第 3 步 — 再移动一格才是吃,不是 harvest

站在苹果上还没吃掉。下一次成功的 move 才会吃掉它,并在你刚离开的格子留下一节尾巴。这里不要用 harvest()。仙人掌还够的话,新苹果会刷在随机空格;那一格如果已经种了东西,苹果刷不出来。

python
# hat is on, apple is under the drone
move(East)
# that move ate the apple and grew the first tail tile

第 4 步 — 尾巴就是墙

下一格是自己的尾巴时,move() 返回 False。最后一节尾巴会在你移动时让开,所以可以踩那一格。戴着恐龙帽时,无人机也不能从农田边缘绕到对面。尾巴铺满整块地时,所有方向都走不动——这就说明长满了。

python
if can_move(North):
    move(North)
else:
    print("blocked by tail or the farm edge")

第 5 步 — 站在苹果上问下一颗在哪

对苹果调用 measure() 会返回一对坐标,也就是下一颗苹果的位置。要在还站在当前这颗上、还没移动时调用。吃掉之后,朝这两个数字走。走到了再 measure 一次。

python
next_x, next_y = measure()
print(next_x, next_y)

第 6 步 — 摘掉帽子才变成骨头

换成任意其他帽子,尾巴会被收走。骨头数量是尾巴长度 n 的平方:1、4、9、16……长度为 16 就是 256 块。不要对尾巴调用 harvest()。

python
change_hat(Hats.Straw_Hat)
# tail is gone; inventory gained n**2 Items.Bone

可选:先在小农田上练

铺满整块大地很慢,而且你未必需要那么多骨头。set_world_size() 会缩小网格(最小 3)并清空农田。程序结束时效果消失。下面这段练习循环只用到上面讲过的事:缩小、戴帽、测量、走过去、走不动就停、摘帽。

python
set_world_size(5)
clear()
change_hat(Hats.Dinosaur_Hat)

def walk_to(x, y):
    while get_pos_x() != x or get_pos_y() != y:
        if get_pos_x() < x:
            if not move(East):
                return False
        elif get_pos_x() > x:
            if not move(West):
                return False
        elif get_pos_y() < y:
            if not move(North):
                return False
        else:
            if not move(South):
                return False
    return True

while True:
    nxt = measure()
    if nxt == None:
        break
    next_x, next_y = nxt
    if not walk_to(next_x, next_y):
        break

change_hat(Hats.Straw_Hat)

这是教学路线,不是冲榜路线。它迟早会撞上自己的尾巴,好让你看到停止条件。农田清空后再戴帽子,苹果才有空位刷出来。