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.