Programmieren leicht gemacht - adäquate Modelle für den Einsatz im Unterricht/ Die Oberfläche des Hamster Simulators

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Die Oberfläche des Hamster Simulators[Bearbeiten]

Nach dem Starten des Hamster Simulators öffnen sich folgende beide Fenster – das Editor- und das Simulatorfenster. Sie erkennen das jeweilige Fenster an seinem entsprechenden Titel:


Hamster oberflaeche.png

Das Simulatorfenster[Bearbeiten]

Zuerst wollen wir uns dem Simulatorfenster widmen. Dieses Fenster setzt sich aus drei Teilen zusammen: Buttonleiste, Territorium und Befehlsliste:


Hamster simulatorfenster.png


Das „Hamster-Territorium“ ist ein zweidimensionales Gitter, in dem sich der Hamster von Feld zu Feld („Kachel“) bewegen kann. Die Größe der Landschaft, d.h. die Anzahl der Kachel ist nicht fixiert und kann dementsprechend frei gewählt werden. Als platzierbare Objekte stehen Körner und Wände zur Verfügung. In diesem Bereich kann der Hamster unterschiedliche Aufgaben erfüllen, indem er Körner von Feldern entfernt, Hindernissen aus dem Weg geht,... Durch Direktsteuerung kann hier eine Hamster-Welt definiert werden, ebenso der Hamster bewegt bzw. gefüttert werden. Im Territorium befindet sich immer ein Hamster, der auch als Standard-Hamster bezeichnet wird.

Die Buttons in der oberen Leiste des Simulatorfenster verfügen dabei über folgende Funktionen:


Button leiste.png

Beim Erzeugen einer neuen Hamster-Welt werden Sie aufgefordert, die Größe der Landschaft zu bestimmen, indem die Anzahl der Spalten bzw. Zeilen frei gewählt werden kann:


HamsterWelt.png

Klicken Sie auf den Button, der dem Hamster Körner in das Maul legt, so werden Sie aufgefordert, die genaue Anzahl an Körnern festzulegen:


Hamster maul.png

Mit Hilfe des Buttons mit dem Ähren-Symbol kann eine beliebige Anzahl von Körnern auf einzelnen Feldern positioniert werden, wobei jedoch nur maximal 12 Körner auf einem Feld angezeigt werden können.

Der „Rücksetzen“-Button dient dazu, um nach Ausführen einer Simulation den Ausgangszustand wieder herzustellen.

Das Editorfenster[Bearbeiten]

Auch das Editorfenster ist in drei Bereiche unterteilt: Menü- und Buttonleiste, den eigentlichen Editor und einen Verzeichnisbaum. Beim Starten des Simulators ist der Editorbereich aber noch grau hinterlegt:


Editorfenster.png

Die Buttons im der oberen Leiste des Editorfensters verfügen über folgende Funktionen:


Menueleiste.png

Das erste imperative Programm[Bearbeiten]

Um ein Programm zu schreiben, welches unser Hamster ausführen soll, müssen wir zuerst im Editorfenster einen neuen Java-Quelltext öffnen, indem wir auf den Button ganz links klicken. Zunächst müssen Sie angeben, welchen Programmtyp Sie gerne erzeugen möchten. Wählen Sie für unser Bespiel das „imperative Programm“ als Programmtyp. Ein imperatives Programm besteht aus Anweisungen, die in der angegebenen Reihenfolge hintereinander ausgeführt werden:



ImperativesProgramm.png

An die Stelle des grauen Hintergrundes tritt nun ein weißes Editorfeld. Dieses geöffnete Programm-Gerüst trägt den Namen „NeuerHamster1“.


NeuesProgramm.png

Um den vorgegebenen Namen zu ändern, klicken Sie einfach auf den dritten Button von links, um das Programm zu speichern. Unserem ersten Beispiel geben wir den Namen „ErstesProgramm“:


ErstesProgramm.png

Wenden wir uns nun wieder dem eigentlichen Editor-Fenster zu. In diesen wurde beim Erzeugen eines leeren Programmes automatisch ein leeres Java-Programm geschrieben:

void main() {
}


Diese vorgegebenen Zeilen stellen die Hauptfunktion jedes Programms dar, welche stets den Namen „main“ trägt. Das Hamster-Programm wird in einer Java-Notation in dem Bereich, der für den Texteditor reserviert ist, verfasst. Die Kontrollstrukturen werden in Java-Syntax notiert und die selbstdefinierten Anweisungen werden als Java-Funktionen definiert. Auch die vordefinierten Anweisungen sind als Java-Funktionen realisiert.

Die vordefinierten Anweisungen[Bearbeiten]

Der Befehlsumfang für den Hamster umfasst folgende vordefinierten Anweisungen:

  • vor(); Der Hamster bewegt sich in seiner aktuellen Blickrichtung um ein Feld vorwärts.
  • linksum(); Der Hamster dreht sich auf dem Feld, auf dem er sich gerade befindet, um 90 Grad nach links
  • gib(); Der Hamster legt auf das Feld, auf dem er sich gerade befindet, genau ein Korn aus seinem Maul ab, d.h. anschließend hat er ein Korn weniger im Maul und auf dem Feld liegt ein Korn mehr.
  • nimm(); Der Hamster frisst von dem Feld, auf dem er sich gerade befindet, genau ein Korn, d.h. anschließend hat der Hamster ein Korn mehr im Maul und auf dem Feld liegt ein Korn weniger als vorher.

Nun wollen wir die Funktionsweise dieser Befehle in unserem ersten Programm austesten. Dazu fügen wir unserer main-Funktion folgende Zeilen hinzu:


ErstesProgramm2.png

Diese Änderung soll natürlich sofort gespeichert werden. Nach dem Speichern unseres Programms müssen wir dieses natürlich kompilieren, d.h. der Quelltext wird in eine Datei übersetzt, die der Computer verstehen und ausführen kann; dies wird mit Hilfe des Play-Buttons bewerkstelligt. Die Simulation Ihres Hamster-Programms startet dann automatisch im Simulatorfenster.

Beim Ausführen der Simulation erhalten wir jedoch folgende Fehlermeldung:


Exception.png

Da wir unserem Hamster zu Beginn keine Körner in das Maul gelegt haben, kann er den Befehl gib(); nicht ausführen. Dies wollen wir ändern, indem wir sein Maul mit 10 Körnern füllen:


Maul2.png

Nun klicken wir auf den Play-Button im Simulatorfenster, um unser Programm erneut auszuführen. Jetzt sollte alles funktionieren:


ErstesProgramm fertig.png

Nun schreiben wir unsere erste eigene Java-Funktion. Dafür ändern wir den Quelltext unseres Programms folgendermaßen:



ErstesProg.png

Sie haben die Funktion rechtsUm() geschrieben. Unter einer Funktion versteht man eine Sammlung von Befehlen, die gemeinsam ausgeführt werden. Die Funktion rechtsUm() führt dreimal den linksUm()-Befehl aus, wenn die Funktion aufgerufen wird. Der Quelltext ist jetzt zwar deutlich länger geworden. Wenn Sie aber in einem Programm den Hamster mehrmals nach rechts drehen wollen, so ist diese Variante viel übersichtlicher als wenn man alle notwendigen Befehle in die main-Funktion verpackt.


Wie wie bereits in unserem ersten Beispiel bemerkt haben, kann bei den Standard-Befehlen folgende Probleme auftreten:

  • Der Hamster erhält den Befehl vor(); und das Feld in Blickrichtung vor ihm ist durch eine Mauer blockiert.
  • Der Hamster erhält den Befehl nimm(); und auf dem Feld, auf dem er sich gerade befindet, liegt kein einziges Korn.
  • Der Hamster erhält den Befehl gib(); und er hat kein einziges Korn mehr im Maul.

Die vordefinierten Bedingungen[Bearbeiten]

Tritt eine der angeführten Situationen in einem Programm auf, so führt dies zu so genannten Laufzeitfehlern. Diese können im Allgemeinen nicht schon durch den Compiler entdeckt werden, sondern treten erst bei der Ausführung eines Programms auf. Um diese zu vermeiden, existieren folgende bereits vordefinierte „Testbefehle“ bzw. Bedingungen. Diese Befehle liefern boolesche Werte, also wahr (true) oder falsch (false), zurück:

  • vornFrei(): Liefert den Wert true, falls sich auf dem Feld in Blickrichtung vor dem Hamster keine Mauer befindet. Ist das Feld durch eine Mauer blockiert, so wird der Wert false geliefert.
  • kornDa(): Liefert den Wert true, falls auf dem Feld, auf dem sich der Hamster gerade befindet, ein oder mehrere Körner liegen. Befindet sich darauf kein Feld, so wird der Wert false geliefert.
  • maulLeer(): Liefert den Wert false, falls der Hamster ein oder mehrere Körner hat. Befinden sich keine Körner im Maul des Hamsters, dann wird der Wert true geliefert.