Auch Agenten können nicht davon ausgehen, ewig zu leben, und möchten sich natürlich auch möglichst oft fortpflanzen.
/**
* lässt den agenten solange geradeaus laufen, bis er auf nahrung stösst
* diese wird dann gegessen
* nach der nahrungsaufnahme wird ein kind zur welt gebracht
* danach wird nur noch geschlafen
* falls er unterwegs auf eine mauer stösst, fängt er auch an zu schlafen
* ebenso, wenn er auf das ende der welt trifft
*/
public Aktion makeItSo(Feld[][] felder, double energie) {
Aktion aktion;
Vektor vektor; // vektor, der nach oben zeigt, einen agenten also nach oben laufen lässt
vektor = new Vektor();
vektor.x = 0; // 0 bewegung in x richtung
vektor.y = -1; // einen schritt nach oben
Feld position = felder[1][1]; // feld, auf dem agent steht
Feld feldVor = felder[1][0]; // feld, vor dem agent steht, bezogen auf laufrichtung (nach oben)
boolean gegessen = false; // hat agent bereits gegessen?
boolean geboren = false; // hat agent bereits geboren? gebärt?
boolean vorWand = false; // steht agent vor wand?
boolean vorEnde = false; // steht agent vor dem Ende (der Welt)?
// auf welcher art von feld steht agent?
if (position instanceof FeldMitNahrung) { // nahrungsfeld :-)
aktion = new Essen(1); // alles essen, was vorhanden ist
gegessen = true; // agent hat gegessen
} else if (feldVor instanceof Wand) { // agent steht vor Wand
aktion = new Schlafen(); // mit schicksal abfinden, schlafen
} else if (feldVor == null) { // agent steht vor ende des levels
aktion = new Schlafen(); // mit schicksal abfinden, schlafen
} else if (!gegessen) { // agent hat noch nichts gegessen, also weiterlaufen
aktion = new Laufen(vec);
} else if (gegessen & !geboren) { // agent hat gegessen, aber noch kein kind
vektor.x = -1; // kind wird links neben agenten gesetzt
vektor.y = 0;
Teilen teilen = new Teilen();
// das kind bekommt die hälfte der energie des agenten, dh direkt nach geburt sind vater und kind gleichstark, vater verliert die hälfte seiner energie
Geburt geburt = new Geburt(energie / 2, vektor);
teilen.addKind(geburt);
aktion = teilen;
} else { // agent hat gegessen und ein kind, also mittagsschlaf
aktion = new Schlafen();
}
return aktion;
}
Damit haben wir einen Agenten, der bereits alle zur Verfügung stehenden Aktionen beherrscht.