Logo Qualitäts- und UnterstützungsAgentur

Startseite Bildungsportal NRW

Orientierungsbereich (Sprungmarken)

CMS_VALUE[3]

Kontrollstrukturen

Nachdem das Erstellen und Manipulieren von Objekten ohne die Verwendung von Kontrollstrukturen behandelt wurde, sollen diese nun zusammen mit anderen Inhalten am Beispiel eines einfachen Spiels eingeführt werden.

Materialien:

 

Sequenzskizze

Das Projekt Ballwurfspiel besteht darin, ein einfaches Spiel zu entwickeln. Ziel des Spiels ist es, mit einem Ball eine zufällig platzierte Zielscheibe zu treffen. Der Ball kann mit der Tastatur nach links, rechts, oben und unten bewegt und so in die richtige Position gebracht werden. Auf Tastendruck fliegt er nach vorne weg, bis er auf Höhe der Zielscheibe ist. Ein Treffer bzw. Fehlwurf sollte mit einer Meldung angezeigt werden.

 

Abbildung 1: Planungsskizze zum Projekt Ballwurfspiel

Abbildung 1: Planungsskizze zum Projekt Ballwurfspiel

 

Mit Hilfe der Planungsskizze (siehe Abbildung 1) können die Schülerinnen und Schüler sehr schnell sehen, welche GLObjekte nötig sind, um das Spiel zu realisieren. Neu ist an diesem Projekt, dass die Szene nun dynamisch auf eine Eingabe reagieren soll. Es soll eine Tastenabfrage realisiert werden und der Ball soll sich bewegen. Um das Grundprinzip der Eingabe und Animation zu verdeutlichen, wird der folgende Prototyp vorgegeben und kann von den Schülerinnen und Schülern analysiert werden.

 

Code Ballwurfspiel

Code Ballwurfspiel

 

Im Konstruktor des Prototypen werden Kamera, Licht, Himmel und eine Kugel erzeugt. Da auf eine Tastatureingabe reagiert werden soll, wird des Weiteren ein Objekt vom Typ GLTastatur erstellt, mit dem diese Eingabe abgefragt werden kann.
Die Methode fuehreAus() muss vom Nutzer in der BlueJ-Umgebung nach Start des Programm per Hand aufgerufen werden und beinhaltet eine Schleife, welche solange läuft, wie die Tastatur nicht meldet, dass die Taste SPACE gedrückt wurde. Innerhalb dieser Schleife wird mit zwei Verzweigungen nach dem Druck der Taste Pfeil-Rechts bzw. Pfeil-Links gefragt. Ist eine dieser Tasten gedrückt, so wird die Kugel verschoben. Die Methode realisiert also eine einfache Tastatursteuerung für die Kugel.
Der Prototyp demonstriert den einfachen Gebrauch einer Schleife, einer Verzweigung und einer Anfrage an ein Objekt. Durch schrittweise Erweiterung dieses Prototyps kann nun das oben beschriebene Spiel realisiert werden. Da die Abläufe im Spiel aber komplizierter sind als im obigen Prototyp, ist es zu empfehlen, diese zunächst in Form von Struktogrammen zu realisieren. Im Prinzip besteht unser Spiel nämlich aus drei Schritten bzw. Phasen.

 

Abbildung 2: Struktogramme zum Projekt Ballwurfspiel

Abbildung 2: Struktogramme zum Projekt Ballwurfspiel

 

In Schritt 1 wird eine Schleife ausgeführt, in der man den Ball in einer Ebene verschieben kann. Wird die Taste SPACE gedrückt, endet die Schleife und es wird zu Schritt 2 übergegangen. Hier wird durch eine zweite Schleife die gleichmäßige Flugbewegung des Balles nach hinten weg realisiert, welche endet, wenn er auf Höhe der Zielscheibe angekommen ist. Anschließend wird in Schritt 3 entschieden, ob die Zielscheibe getroffen ist, und die entsprechende Meldung ausgegeben.

Eine Realisierung dieser Schritte könnte im Quellcode wie folgt aussehen:

 

Quellcode Ball positionieren

Quellcode Ball positionieren

 

Während Schritt 1 eine direkte Erweiterung des Prototypen darstellt, kommen in Schritt 2 und Schritt 3 jeweils neue Aspekte hinzu. In Schritt 2 wird eine Anfrage an ein GLObjekt gestellt, die als Rückgabe einen Zahlenwert liefert, und in Schritt 3 wird in Abhängigkeit von einem Variablenwert eine Ausgabe gesetzt. Der Variablenwert wird zuvor mittels des Satzes des Pythagoras berechnet. Hierbei handelt es sich um eine einfache Distanzberechnung zwischen Zielscheibe und Wurfball, um zu entscheiden, ob die Zielscheibe getroffen wurde. Je nach Erfolg des Wurfes wird eine entsprechende Meldung mit Hilfe eines Objektes vom Typ GLTafel ausgegeben.

 

Abbildung 3: Texturierte Version des Projekts Ballwurfspiel

Abbildung 3: Texturierte Version des Projekts Ballwurfspiel

 

Während dieses Beispiel gut geeignet ist, Schleifen, Verzeigungen und auch Variablen einzuführen, müssen diese Konzepte im Weiteren eingeübt werden. Neben der Möglichkeit, weitere Animationen nach obigem Muster zu erstellen, können Schleifen dazu verwendet werden, um größere Mengen von Objekten zu erstellen und zu manipulieren. Da es in einem solchen Fall aufwändig wäre, zu jedem Objekt eine einzeln deklarierte Referenz zu erstellen, bietet sich die Verwendung von Feldern an, so dass mit Hilfe eines Index’ auf sehr viele Objekte zugegriffen werden kann.
Ein Beispiel könnte in diesem Kontext die Simulation eines Hubschrauberlandeplatzes sein, der mit mehreren Signallampen in Form von kleinen Kugeln ausgestattet ist. Diese Kugeln sind kreisförmig um den Landeplatz angeordnet und stellen Lauflichter da, d.h. sie ändern nacheinander ihre Farbe.

 

Abbildung 4: Landeplatz mit Signallampen

Abbildung 4: Landeplatz mit Signallampen

 

Abbildung 4 zeigt eine mögliche Realisierung dieses Hubschrauberlandeplatzes. Wie und in welcher Reihenfolge die Kugellampen ihre Farbe ändern, kann ganz unterschiedlich realisiert werden. Der folgende Quellcode starteLauflichter() stellt eine sehr einfache Lösung dar. Alle Lampen werden nacheinander angeschaltet und anschließend nacheinander wieder ausgeschaltet. Dieser Vorgang wiederholt sich, bis der Benutzer mit der Taste ESC abbricht.
Die Lampen werden hier in einem Feld mit dem Bezeichner lampe verwaltet.

 

Code Lauflichter

Code starte Lauflichter

 

Eine weitere Möglichkeit besteht darin, die Lampen gleichzeitig blinken zu lassen. Hierzu müssen nur die Aufrufe der Methode warte() an anderen Stellen erfolgen.
Beispiele, die auf Feldern basieren, sind insbesondere zur Thematisierung der FOR-Schleife geeignet. Möchte man diese weiter vertiefen, kann man sie auch schachteln, z.B. zur  Simulation eines Schachbretts.

 

Vertiefung

Das Schachbrett wird hier nicht mit Hilfe einer Textur, sondern durch einzelne Quader realisiert. Sie werden in zwei geschachtelten Schleifen erzeugt und in einem Feld verwaltet.

 

Abbildung 5: Schachbrett aus einzelnen Quadern

Abbildung 5: Schachbrett aus einzelnen Quadern

 

Folgender Quellcode stellt eine Möglichkeit da, die Felder zu erzeugen.

 

Code Schachbrett

Code Schachbrett

 

Zum Seitenanfang

© 2024 Qualitäts- und UnterstützungsAgentur - Landesinstitut für Schule