Meisterung der Riesenkürbisse: Koordinatenverfolgung

Kürbisse sind besonders, weil sie zu größeren Pflanzen verschmelzen. Wir brauchen ein intelligentes Skript.

Die Strategie: Flicken & Warten

Das Ziel ist es, ein volles Raster von Kürbissen zu bekommen, um einen Riesenkürbis zu bilden.

  • Verfolgen: Koordinaten aufzeichnen.
  • Flicken: Drohne besucht nur diese Punkte.
  • Ernten: Ernten nur wenn das Raster voll ist.
🎃

Schritt-für-Schritt Code-Analyse

Step 1 Intelligente Bewegung

Um zu verhindern, dass die Drohne stecken bleibt, benötigen wir `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 Verfolgen & Nachpflanzen

Die Funktion `doPumpkin` verwaltet eine Liste.

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

Vollständiger Quellcode

Python

Hinweis: Dieses Skript enthält Logik für mehrere Pflanzen.

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()

Kürbis-Anbautipps

  • Stellen Sie sicher, dass Ihr Land gepflügt ist.
  • Verwenden Sie wenn möglich Wasser.