![]() |
Neuigkeiten
EinleitungSeit 1998 wird im Rahmen der Vorlesung Algorithmen und Datenstrukturen ein Programmierwettbewerb durchgeführt - das Hamsterproblem. Ziel dieses von Christian Borgelt erdachten Spiels ist es, einen Hamster, der in einem Labyrinth mit Maiskörnern ausgesetzt ist, per Programm so zu steuern, daß er möglichst viele Maiskörner sammelt und auf ein vorgegebenes Feld bringt. Auch in diesem Jahr soll diese Tradition fortgesetzt werden, natürlich angepaßt an die neue Programmiersprache Java. Sinnvollerweise wird dabei kein Hamster durch das Labyrinth gesteuert, der Maiskörner sammelt, sondern der Duke - das Java-Maskottchen - sammelt Kaffeebohnen ein! Installation und NutzungDie Aufgabe für den Programmierwettbewerb besteht nun darin, ein Java-Programm zu schreiben, das den Duke durch das Labyrinth steuert. Voraussetzung dafür ist die Wettbewerbsumgebung, die alle benötigten Klassen und Programme beinhaltet. Diese Umgebung erfordert ein JDK 1.2.2 und läft damit sowohl unter Linux, Solaris und Windows. Es funktioniert definitiv nicht mit den M$-Zeug ! Zur Installation:
java -classpath contest.jar algds.contest.MazeEditorDas Programm erlaubt sowohl das Erstellen neuer Labyrinthe als auch das Verändern bereits existierender. Die Labyrinth-Dateien mit der Endung .maze werden immer im Verzeichnis mazes abgelegt und auch nur von dort geladen. Ein Duke-Programm wird nun als Java-Klasse implementiert und kann in die Ausführungsumgebung geladen werden. Zuvor ist die kompilierte Klasse im Verzeichnis dukes abzulegen. Demzufolge ist dieses Verzeichnis für die Ausführungsumgebung ebenfalls in den Klassenpfad aufzunehmen (Unix/Linux): java -classpath contest.jar:dukes algds.contest.MazeWorldbzw. für Windows: java -classpath contest.jar;dukes algds.contest.MazeWorldAlternativ kann auch die Kommandozeilenversion verwendet werden, wobei hier das Labyrinth und die Duke-Klasse als Parameter anzugeben sind: java -classpath contest.jar:dukes algds.contest.MazeRunner \ mazes/Contest.maze Dude Labyrinth
Ein Labyrinth besteht aus Gängen, in denen
Kaffeebohnen in unterschiedlicher Anzahl abgelegt
sind. Der Duke kann im Labyrinth umherlaufen, sich drehen,
nach vorn schauen, Bohnen aufnehmen und ablegen.
Spezielle Felder - die Beamer erlauben den
Transport auf eine andere Ebene. Hier gilt, daß man
von einem Ziel-Beamer-Feld durch Verlassen und
Wiederbetreten zurüuck zum Ausgangsfeld gelangt. ![]() Implementierung eines DukesDas Schreiben eines Duke-Programms ist relativ einfach: es stehen nur wenige Steuerbefehle zur Verfügung, die man kennen muß. Die Schwierigkeit besteht vielmehr darin, sich eine geeignete Strategie zum Erkunden des Labyrinthes und Sammeln der Bohnen zu überlegen. Jeder Duke muß als Java-Klasse implementiert und von der Klasse algds.contest.Duke abgeleitet werden. Das Leben eines Dukes spielt sich vollständig in der Methode run ab, die für jeden Duke neu implementiert werden muß. Zur Steuerung stehen die folgenden Methoden zur Verfügung:
Betrachten wir abschließend einen kompletten, aber ziemlich dummen Duke:
import algds.contest.Duke;
public class Dude extends Duke {
public Dude {}
// die Hauptmethode des Dukes
public void run () {
// max. 1000 Schritte
while (getNumOfSteps () < 1000) {
// irgendwohin gehen
go ();
// wenn wir zufaellig auf dem Ausgangsfeld
// sind => Bohnen ablegen
if (getXPos () == 0 && getYPos () == 0)
drop (Duke.MAX_BEANS);
else
// sonst alles mitnehmen
take (Duke.MAX_BEANS);
}
}
protected void go () {
// manchmal wechseln wir einfach die Richtung
if (Math.random() > 0.9) {
int dir = (Math.random () <= 0.5 ? Duke.TURN_LEFT :
Duke.TURN_RIGHT);
turn (dir);
}
// vor einer Wand muessen wir uns aber
// entscheiden
while (look () == Duke.WALL) {
int dir = (Math.random () <= 0.5 ? Duke.TURN_LEFT :
Duke.TURN_RIGHT);
turn (dir);
}
// weiter gehts ...
forward ();
}
}
Diese Klasse isr nun wie üblich zu kompilieren und im
Verzeichnis dukes abzulegen:
javac -d dukes -classpath contest.jar Dude.javaAnschließend wird MazeWorld gestartet, ein Labyrinth und die Duke-Klasse geladen. Mit dem Start-Button geht's dann los ... BewertungIm Wettbewerb muß jeder Duke drei Labyrinthe durchlaufen, wobei eines davon zuvor bekanntgegeben wird. Es gelten dabei folgende Regeln:
Die Teilnahme am Programmierwettbewerb kann als Alternative zur Belegarbeit gewertet werden, wenn der eingereichte Duke für die Wettbewerbslabyrinthe in der Summe eine bessere Punktzahl erreicht als der Referenz-Duke. Ablauf
Teilnahmeberechtigt am Wettbewerb sind alle Studentinnen
und Studenten, die die Vorlesung |
| <Webmaster> - webmaster@iti.cs.uni-magdeburg.de |
| Last modified: Sat May 13 12:35:23 CEST 2000 |