Polykultur-Code – The Farmer Was Replaced (get_companion)

Polyculture sorgt dafür, dass Gras, Büsche, Bäume und Karotten viel mehr geben, wenn der richtige Begleiter auf der richtigen Kachel wächst. Dieser Guide erklärt, was get_companion() zurückgibt, warum der naive Ansatz scheitert, und liefert Polyculture-Code zum Einfügen und Erweitern.

Wenn du die erste Farm noch aufbaust, starte mit den Basic Codes und dem Tree-Code. Polyculture baut auf beidem auf.

Was Polyculture macht

Jedes Gras, jeder Busch, Baum und jede Karotte kann eine Begleiter-Präferenz haben. Pflanzt du die gewünschte Pflanze an der exakten Position und erntest danach die Ursprungspflanze, gibt es einen großen Ertragsbonus. Vor dem Upgrade ist der Multiplikator 5, jedes Upgrade verdoppelt ihn. Damit ist Polyculture einer der stärksten Boosts für Heu, Holz und Karotten im Midgame.

Regeln für deinen Code:

So arbeitet get_companion()

Stelle die Drohne auf eine Pflanze und rufe get_companion() auf. Das kostet einen Tick und liefert None (keine Präferenz) oder ein Tupel: Entitätstyp und (x, y).

companion = get_companion()
if companion != None:
    plant_type, (x, y) = companion
    print("Companion:", plant_type, "at", x, ",", y)

Ein Busch kann z. B. (Entities.Carrot, (3, 5)) liefern: Karotte auf (3, 5) pflanzen, dann den Busch ernten – mehr Holz.

Packe die Koordinaten immer aus. Nimm nicht an, der Begleiter stehe direkt daneben. Die API garantiert nur eine Koordinate, keine Richtung.

Warum der einfache Ansatz scheitert

Die offensichtliche Idee: Begleiter lesen, hinlaufen, pflanzen, zurück, ernten. Auf kleiner Farm geht das, verschwendet aber Bewegung. Schlimmer: Die Zielkachel kann schon eine Pflanze mit eigener Anfrage halten – neu pflanzen verwirft sie.

Besser: Anfragen in einem Dictionary merken und erfüllen, wenn der normale Sweep die Kachel erreicht. Die Drohne behält ihre Zeilenroute, Polyculture kommt fast kostenlos.

Polyculture-Code (Sweep + Dictionary)

Diese Version überstreicht das ganze Feld. Pro Kachel zuerst prüfen, ob eine andere Pflanze hier einen Begleiter will. Wenn ja, den pflanzen. Sonst Hauptkultur pflanzen und die eigene Anfrage speichern.

companions = {}  # (x, y) -> entity that should be planted there

def plant_tile(main_crop):
    pos = (get_pos_x(), get_pos_y())
    if can_harvest():
        harvest()
    if pos in companions:
        want = companions.pop(pos)
        if want == Entities.Carrot:
            if get_ground_type() != Grounds.Soil:
                till()
        plant(want)
        return
    if main_crop == Entities.Carrot:
        if get_ground_type() != Grounds.Soil:
            till()
    plant(main_crop)
    result = get_companion()
    if result != None:
        want, target = result
        if target not in companions:
            companions[target] = want

def sweep(main_crop):
    size = get_world_size()
    for i in range(size):
        for j in range(size):
            plant_tile(main_crop)
            move(North)
        move(East)

while True:
    sweep(Entities.Tree)

Tausche Entities.Tree gegen Entities.Bush, Entities.Carrot oder Entities.Grass. Reine Heufarmen können plant() oft weglassen und nur Begleiter lesen.

Hinweise zum Code

Polyculture mit mehreren Drohnen

Nach dem Unlock weiterer Drohnen funktioniert dasselbe Dictionary. Jede Drohne sweeped eigene Spalten; weil companions global geteilt ist, kann eine Anfrage von einer anderen Drohne erfüllt werden. Startspalte setzen, gleiche plant_tile()-Logik. Megafarm, spawn_drone und Spaltenmuster: Multiple Drones.

Häufige Fehler

FAQ

Welche Pflanzen nutzen Polyculture? Gras, Büsche, Bäume, Karotten. Kürbis, Kaktus, Sonnenblume haben eigene Mechaniken.

Muss der Begleiter ausgewachsen sein? Nein.

Wie groß ist der Bonus? Start 5×, verdoppelt sich mit jedem Polyculture-Upgrade.

Was als Nächstes? Kürbis-Code, Sonnenblumen-Code oder alle Basic Codes.