Ein bisschen Bewegung

Die Aktion Schlafen, die unser Agent bis jetzt ganz gut beherrscht, ist nur eine von vielen. Bis jetzt können folgende Aktionen von Agenten ausgeführt werden:

Im Folgenden wollen wir einen Agenten erstellen, der solange geradeaus läuft, bis er auf etwas Essbares stösst. Diese soll er dann zu sich nehmen.

Dazu müssen wir wissen, wie die beiden Aktionen Essen und Laufen funktionieren, und wie man überprüft, auf welcher Art von Feld ein Agent sich gerade befindet.

Am schnellsten lässt sich dies an einem Beispiel zeigen:
/**
 * lässt den agenten solange geradeaus laufen, bis er auf nahrung stösst
 * diese wird dann gegessen
 * danach wird nur noch geschlafen
 */
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
	boolean gegessen = false;	// hat agent bereits gegessen?
	
	// 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 (!gegessen) {				// agent hat noch nichts gegessen, also weiterlaufen
	        aktion = new Laufen(vec);
	} else {					// agent hat gegessen, also mittagsschlaf
		aktion = new Schlafen();
	}
        return aktion;
}
	

Wenn der Agent sich von Anfang an auf einem Nahrungsfeld befindet, wird er natürlich gar nicht erst loslaufen.