Interface implementieren

Als nächstes muss unser Agent die Methoden implementieren, die das Agenteninterface vorschreibt.

Dabei handelt es sich um folgende Methoden:

public Aktion makeItSo(Feld[][] fields, double energy) {
	return new Schlafen();
};
	

Die Methode makeItSo ist der Hauptbestandteil eines Agenten. Die Spieltwelt wird diese Methode jedesmal aufrufen, wenn der Agent an der Reihe ist, eine Aktion auszuführen.

Als Parameter bekommt der Agent zum einen die Umgebung, die er gerade sehen kann, und zum anderen die Menge der Energie, die er noch zur Verfügung hat.

Die sichtbare Umgebung ist ein Array von 3x3 Feldern. Jedes Feld enthält ein Objekt des Typs "Feld". Anhand dieser Objekte weiss der Agent alles, was unmittelbar um ihn herum los ist. Der Agent selber befindet sich in der Mitte dieses Arrays, also auf Position [1][1]. Durch die Grösse des Arrays (3x3), ergibt sich automatisch die Sichtweite des Agenten. Ein Agent kann immer nur ein Feld in jede Richtung sehen und auch sich bewegen.

Der zweite Parameter beinhaltet die Energiemenge des Agenten. Jeder Agent bekommt zum Zeitpunkt seiner Geburt eine bestimmte Menge an Energie zur Verfügung (durch die Eltern oder die Spielwelt). Diese Energiemenge reduziert sich automatisch in bestimmten Schritten pro Runde. Erreicht die Energiemenge den Wert 0, stirbt der Agent, und wird entfernt. Der einzige Weg, den Energielevel wieder zu erhöhen, ist die Nahrungsaufnahme. Dadurch ist ein Agent immer gezwungen, sich selbst mit Nahrung zu versorgen, um nicht zu verhungern. Anhand des mitgeteilten Energielevels weiss der Agent, wie es um seine Gesundheit bestellt ist, und kann dementsprechend reagieren - oder auch nicht.

MakeItSo muss eine Aktion an die Spieltwelt zurückgeben. Wenn der Agent also die beiden Parameter ausgewertet hat, muss er entscheiden, was er als nächstes tun möchte. Diese Entscheidung teilt er der Welt in Form einer Aktion mit.

public String whatIsYourRace() {
	return getClass().getName();
};
	

whatIsYourRace() gibt einen beliebigen String zurück, an dem ein Agent definiert werden kann. Dadurch kann jeder Agent, der Kontakt zu einem anderen hat, herausfinden, mit wem er es zu tun hat (Freund oder Feind).

public void famousLastWords(String causeOfDeath) {};
	

Die "Famous Last Words" werden automatisch von der Spielwelt ausgegeben, sobald ein Agent eliminiert wird. Während der Entwicklung eines Agenten kann dies sehr gut zu Debug Zwecken missbraucht werden. Ein fertiger Agent kann dann nach seinem Ableben "echte" "Famous Last Words" von sich geben.

Damit ist unser erster Agent auch schon fertig. Wie man der Methode makeItSo entnehmen kann, lässt sich unser Agent durch nichts aus der Ruhe bringen, weder Umgebung noch Hunger, er wird einfach weiterschlafen, bis das unvermeidliche passiert...