Game-Apps für Smartphones und Tablets |
|
Bern University oh Teacher Education |
Programmverzweigungen auf Grund von bestimmten Bedingungen gehören zu den Grundstrukturen jeder Programmiersprache.
Beispiel 1: Links oder rechts?
|
![]() |
// AndroidEx5.java package app.ex5; import ch.aplu.android.*; public class AndroidEx5 extends GameGrid { public AndroidEx5() { super(8, 8, cellZoom(62), GRAY, "reef", true); } public void main() { Crab crab = new Crab(); addActor(crab, new Location(3, 0)); doRun(); } } class Crab extends Actor { public Crab() { super("crab"); } public void act() { double randomNumber = Math.random(); if (randomNumber > 0.5) setDirection(45); else setDirection(135); if (isMoveValid()) move(); } } |
Erklärungen zum Programmcode:
double randomNumber = Math.random() | Die Methode Math.random() liefert eine zufällige Dezimalzahl |
if (randomNumber > 0.5) | Mit der Wahrscheinlichkeit 0.5 bewegt sich der crab nach rechts oder nach links |
if (isMoveValid()) move() |
Die Methode isMoveValid() gibt true zurück, wenn der nächste Bewegungsschritt innerhalb des Fensters liegt. |
Stehen bei der Selektion mehrere Möglichkeiten zur Auswahl, wird die switch-Struktur verwendet.
Beispiel 2: Links, rechts, nach oben oder nach unten
|
![]() |
// AndroidEx5a.java package app.ex5a; import ch.aplu.android.*; public class AndroidEx5a extends GameGrid { public AndroidEx5a() { super(8, 8, cellZoom(62), GRAY, "reef", false, false); } public void main() { Crab crab = new Crab(); addActor(crab, new Location(3, 0)); doRun(); } } class Crab extends Actor { public Crab() { super("crab"); } public void act() { int randomNumber = (int)(Math.random() * 4); switch (randomNumber) { case 0: setDirection(0); break; case 1: setDirection(90); break; case 2: setDirection(180); break; case 3: setDirection(270); break; } if (!isMoveValid()) turn(180); move(); } } |
Erklärungen zum Programmcode:
(int)(Math.random() * 4) | Erzeugt zufällig ganze Zahlen 0, 1, 2 oder 3 |
isMoveValid() | Die Methode isMoveValid() gibt true zurück, falls die nächste Zellenposition innerhalb des sichtbaren Gitters liegt |
break | break in jedem case bewirkt, dass das Programm die switch-Struktur verlässt, sobald der passende Fall eingetroffen ist |
i = 0 : Startwert Beispiel 3: In einer for-Struktur mehrere Crabs erzeugen.
|
![]() |
// AndroidEx6.java package app.ex6; import ch.aplu.android.*; public class AndroidEx6 extends GameGrid { public AndroidEx6() { super(8, 8, cellZoom(62), GRAY, "reef", false); } public void main() { for (int i = 0; i < 8; i++) addActor(new Crab(), getRandomEmptyLocation()); doRun(); } } class Crab extends Actor { public Crab() { super("crab"); } public void act() { if (isMoveValid()) move(); if (isNearBorder()) turn(90); } } |
Erklärungen zum Programmcode:
int i = 0 |
Deklaration und Initialisierung der Zählervariable i |
i < 10 |
Schleifen-Bedingung. So lange die Bedingung erfüllt ist, werden die Anweisungen im Schleifenblock wiederholt ausgeführt |
i++ |
Ist gleichwertig mit i = i + 1 Der Wert der Variable i wird um 1 vergrössert |
addActor(new Crab(), getRandomEmptyLocation()) |
Erzeugt eine neue Crab-Instanz in einer zufällig gewählten, freien Zelle |
Beispiel 4: Mehrere Crab-Objekte mit Hilfe von verschachtelten for-Schleifen erzeugen Allgemeine Form:
Mit zwei for-Schleifen kann man alle Wertepaare (x, y) durchlaufen. Lässt man im folgenden Beispiel die if-Struktur, welche prüft, ob die Summe x + y eine gerade Zahl ist, weg, wird in jeder Zelle ein neuer Crab erstellt.
|
![]() |
// AndroidEx7.java package app.ex7; import ch.aplu.android.*; public class AndroidEx7 extends GameGrid { public AndroidEx7() { super(8, 8, cellZoom(62), GRAY, "reef", false); } public void main() { for (int x = 0; x < 8; x++) for (int y = 0; y < 8; y++) { if ((x + y) % 2 == 0) addActor(new Crab(), new Location(x, y)); } doRun(); } } class Crab extends Actor { public Crab() { super("crab"); } public void act() { if (isMoveValid()) move(); if (isNearBorder()) turn(90); } } |
Erklärungen zum Programmcode:
if ((x + y) % 2 == 0) |
% ist eine Modulodivision, die den Rest nach der Division (x + y)/2 ergibt. Diese Funktion braucht man häufig, um zu testen, ob eine Zahl gerade oder ungerade ist. Wenn die Summe von x und y eine gerade Zahl ist, wird an der Location(x, y) ein Crab erzeugt |
Allgemeine Form:
int i = 0; while (i < n) { Anweisungen; i++; } |
Die while-Struktur wird in allen Programmiersprachen zur Wiederholung von Programmblöcken sehr oft verwendet. In JDroidLib werden nach Drücken der Schaltfläche Run oder dem Aufruf von doRun() die act-Methoden aller Actoren in einer while-Struktur periodisch aufgerufen. Dadurch wird in diesem Lehrgang die while-Struktur nur selten verwendet. |