JavaKara
Weltfenster
Programmfenster
JavaKaraProgramm
Info

Ihre JavaKara-Programme müssen Sie von der Klasse JavaKaraProgram ableiten. Dadurch werden Ihre Programme in die Laufzeitumgebung von JavaKara eingebettet.

Innerhalb Ihrer Klasse haben Sie Zugriff auf drei Objekte, die Sie von JavaKaraProgram erben. Sie sollten diese Objekte nie ändern, indem Sie zum Beispiel versuchen, mit kara=new JavaKara(); einen neuen Kara zu erzeugen! Der von Ihnen erzeugte Kara wäre nicht in die Umgebung von JavaKara eingebunden und somit unsichtbar. Unten finden Sie eine Übersicht der Methoden dieser Objekte:

Wie funktioniert JavaKara? Wenn Sie ein eigenes Programm ausführen, wird ein neuer Thread gestartet. Die Klasse JavaKaraProgramm ist die Verbindung von Ihrem Programm zu JavaKara. Wichtig dabei: Da Ihr Programm in einem eigenen Thread läuft, kann JavaKara keinen Einfluss nehmen zum Beispiel auf die Ausführungsgeschwindigkeit Ihres Programmes oder etwa Ihr Programm stoppen.

Deshalb wird ein kleiner Trick angewendet: jedesmal, wenn Sie einen Befehl von Kara aufrufen - kara.move() oder kara.turnRight() etc - wird die Methode tools.checkState() aufgerufen. Diese Methode prüft, ob das Programm pausieren oder anhalten soll; ansonsten legt Sie den Thread entsprechend der Einstellung des Geschwindigkeitsreglers schlafen. Sie sollten unbedingt darauf achten, dass Ihre Programme entweder irgendeine Kara-Methode oder die tools.checkState()-Methode aufrufen! Sonst können Sie zum Beispiel Endlosschleifen programmieren, die Sie nicht mehr stoppen können, ohne JavaKara zu beenden.

Hinweis 1: Wenn Sie ein Programm schreiben, das andere eigene Klassen benutzt, dann müssen diese Klassen im gleichen Verzeichnis liegen wie Ihre JavaKaraProgram-Unterklasse. Das hängt mit der Art zusammen, wie Ihre JavaKaraProgram-Unterklasse geladen wird. Klassen wie java.awt.Point zum Beispiel können Sie hingegen ohne jede Einschränkung verwenden.

Hinweis 2: In einem Konstruktor einer vor JavaKaraProgram abgeleiteten Klasse können Sie nicht auf die drei Objekte kara, world und tools zugreifen! Zudem darf ein Konstruktor keine Parameter entgegennehmen. Wenn die Klasse von der Festplatte geladen wird, wird ein Objekt instanziert mit dem Default-Konstruktor, der keine Parameter entgegennimmt. Erst danach wird Ihre JavaKaraProgram-Unterklasse an die Objekte kara, world und tools gebunden.

kara  
   void move() Schritt vorwärts
   void turnLeft() 90°-Linksdrehung
   void turnRight() 90°-Rechtsdrehung
   void putLeaf() Kleeblatt hinlegen
   void removeLeaf() Kleeblatt aufnehmen
   boolean treeFront() Kara vor Baum?
   boolean treeLeft() Baum links von Kara?
   boolean treeRight() Baum rechts von Kara?
   boolean onLeaf() Kara auf Kleeblatt?
   boolean mushroomFront() Kara vor Pilz?
   void setPosition (int x, int y) Kara von Position (x,y)
   java.awt.Point getPosition() Koordinaten der aktuellen Position

world  
   void clearAll() Alle Elemente entfernen
   void setLeaf (int x, int y, boolean putLeaf) Blatt legen oder entfernen
   void setTree (int x, int y, boolean putTree) Baum setzen oder entfernen
   void setMushroom (int x, int y, boolean putMushroom) Pilz setzen oder entfernen
   void setSize (int newSizeX, int newSizeY) Grösse der Welt ändern
   boolean isEmpty (int x, int y) Ist das Feld leer?
   boolean isTree (int x, int y) Ist ein Baum auf dem Feld?
   boolean isMushroom (int x, int y) Ist ein Pilz auf dem Feld?
   boolean isLeaf (int x, int y) Ist ein Blatt auf dem Feld?
   int getSizeX() Horizontale Grösse der Welt
   int getSizeY() Vertikale Grösse der Welt

tools  
   void println (String string) String auf Standard-Ausgabe schreiben
   void showMessage (String message) String in Dialogfenster ausgeben
   int random (int bound) Liefert Zufallszahl aus Bereich [0..bound]
   void checkState() Schaut auf den Geschwindigkeitsregler
   void sleep (int ms) Schläft ms Millisekunden
   String stringInput (String title) String in einem Dialogfenster mit Titel title eingeben; gibt null zurück, wenn der Dialog mit Cancel abgebrochen wurde
   int intInput (String title) Ganzzahl in einem Dialogfenster mit Titel title eingeben; gibt Integer.MIN_VALUE zurück, wenn der Dialog mit Cancel abgebrochen wurde oder nicht eine Ganzzahl eingegeben wurde
   double doubleInput (String title) Fliesskommazahl in einem Dialogfenster mit Titel title eingeben; gibt Double.MIN_VALUE zurück, wenn der Dialog mit Cancel abgebrochen wurde oder nicht eine Fliesskommazahl eingegeben wurde