精通巨大南瓜:坐标追踪法
南瓜非常特殊,因为它们会聚合成更大的作物。简单的循环收割不仅效率低,还会破坏聚合。我们需要一个智能脚本来等待聚合完成。
核心策略:修补与等待
我们的目标是让整个网格长满南瓜,从而形成“巨大南瓜”。如果网格中哪怕有一个位置是空的或作物枯死,聚合就会失败。
- 追踪 (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` 函数会自动开垦草地。
- • 尽量使用浇水系统。虽然脚本能工作,但有水的情况下南瓜长得更快,巨大化的几率更高。