精通巨大南瓜:坐标追踪法

南瓜非常特殊,因为它们会聚合成更大的作物。简单的循环收割不仅效率低,还会破坏聚合。我们需要一个智能脚本来等待聚合完成。

核心策略:修补与等待

我们的目标是让整个网格长满南瓜,从而形成“巨大南瓜”。如果网格中哪怕有一个位置是空的或作物枯死,聚合就会失败。

  • 追踪 (Track): 记录所有尚未成熟或空的坐标点。
  • 修补 (Patch): 无人机只飞向这些特定坐标进行补种,而不是盲目遍历全图。
  • 收割 (Harvest): 只有当列表中没有“问题坐标”时(意味着全图已聚合),才进行收割。
🎃

代码分步解析

Step 1 智能移动逻辑

为了防止无人机被巨大的南瓜卡住,我们需要一个更健壮的移动函数 `moveEx`。如果主要方向被阻挡,它会尝试其他方向。

python
def moveEx(dir):
    dirs=[East,South,West,North]
    dirs.remove(dir)
    # Try intended direction first
    if(not move(dir)):
        # If blocked, try alternatives to wiggle out
        if(not move(dirs[0])):
            if(not move(dirs[1])):
                if(not move(dirs[2])):
                    return False

Step 2 坐标追踪与补种

函数 `doPumpkin` 维护一个 `success` 列表。它会反复检查这个列表中的位置,直到所有位置都满足收获条件(即全部长好)。

python
def doPumpkin():
    back()
    success = [] # List of "problematic" coordinates
    
    # Helper to track empty spots
    def adddie():
        if not can_harvest():
            success.append({"x":get_pos_x(),"y":get_pos_y()})
            plantpumpkin()

    # Helper to check if spot is fixed
    def removedie():
        if(can_harvest()):
            success.remove({"x":get_pos_x(),"y":get_pos_y()})
        else:
            plantpumpkin()

    # Initial Pass: Scan whole grid
    plantonce(adddie) 
    
    # Re-visit Loop: Only go to bad spots
    while(len(success) != 0):
        for pos in success:
            back(pos["x"],pos["y"])
            removedie()

    return len(success)==0

完整源代码

Python

注:此代码包含多种作物的逻辑,但主要入口点是底部的 pumpProject()。

python
def back(x=0,y=0):
    while x!=get_pos_x() or y!=get_pos_y():
        while get_pos_x()!=x:
            if(get_pos_x()<x):
                moveEx(East)
            else:
                moveEx(West)
        while get_pos_y()!=y:
            if(get_pos_y()<y):
                moveEx(North)
            else:
                moveEx(South)

def moveEx(dir):
    dirs=[East,South,West,North]
    dirs.remove(dir)
    if(not move(dir)):
        if(not move(dirs[0])):
            if(not move(dirs[1])):
                if(not move(dirs[2])):
                    return False
    
def do(x,worldsize=0):
    if worldsize == 0:
        worldsize=get_world_size()
    dir=East
    for i in range(worldsize):
        for j in range(worldsize-1):
            x()
            move(dir)
        x()
        move(North)
        if(dir==East):
            dir=West
        else:
            dir=East

# --- Pumpkin Logic Start ---
def plantpumpkin():
    plant(Entities.Pumpkin) 

def doPumpkin():
    back()
    success = []
    def adddie():
        if not can_harvest():
            success.append({"x":get_pos_x(),"y":get_pos_y()})
            plantpumpkin()

    def removedie():
        if(can_harvest()):
            success.remove({"x":get_pos_x(),"y":get_pos_y()})
        else:
            plantpumpkin()

    def plantonce(x):
        dir = East
        for i in range(get_world_size()):
            for j in range(get_world_size()-1):
                x()
                move(dir)
            x()
            move(North)
            if dir == East:
                dir=West
            else:
                dir=East
    
    plantonce(plantpumpkin) # First planting
    back()
    plantonce(adddie) # Check for failures
    
    # Keep fixing specific spots
    while(len(success) != 0):
        for pos in success:
            back(pos["x"],pos["y"])
            removedie()

    return len(success)==0

def pumpProject():
    # Helper to till ground first
    def tillx():
        if(get_ground_type()==Grounds.Grassland):
            till()
    back()
    do(tillx)
    
    while True:
        # Wait until doPumpkin returns true (all spots ready)
        while doPumpkin():
            back()
            harvest()
# --- Pumpkin Logic End ---

# Start the bot
clear()
pumpProject()

南瓜种植技巧

  • 确保你的土地已经开垦。该脚本包含 `tillx` 函数会自动开垦草地。
  • 尽量使用浇水系统。虽然脚本能工作,但有水的情况下南瓜长得更快,巨大化的几率更高。