Game-Apps für Smartphones und Tablets

Bern University oh Teacher Education  
HomeOnline-Editor startenDruckenAndroid-TurtlegrafikJava-Online

Aufgabe 5: Reversi Spiel (Othelo)


Programmieren Sie ein Reversi-Spiel.

Spielregeln:

Auf einem 8×8-Brett legen zwei Spieler abwechselnd weisse und schwarze Spielsteine. Zu Beginn des Spiels sind je zwei weisse und schwarze Steine in der Mitte des Spielbretts gelegt. Die Spielsteine können nur in leere Zellen gelegt werden, bei welchen mindestens eine der benachbarten Zellen oben, unten, links oder rechts bereits belegt ist.

nicht erlaubt

erlaubt

Stein umkehren

Wird ein Stein gelegt, so werden alle gegnerischen Steine, die sich in Reihen oder Diagonalen zwischen dem neuen und bereits gelegten Steinen der eigenen Farbe befinden, umgedreht. Das Ziel des Spiels ist es, am Ende möglichst viel eigene Steine auf dem Brett zu haben. Das Spiel ist fertig, wenn alle Zellen belegt sind.

Als Vorlage können Sie folgendes Beispiel verwenden:

Bubbles im Online Editor bearbeiten

 

Es empfiehlt sich das Spiel in folgenden Schritten zu entwickeln:

Schritt 1: Mit Taps Spielsteine in eine beliebige leere Zelle setzen

Testen Sie, ob die mit dem Tap gewählte Location leer ist, falls ja setzen Sie einen weissen Stein (show(0)).

 

Schritt 2: Überprüfen, ob mindestens eine der benachbarten Zellen links, rechts, oben oder unten mit einem Spielstein belegt ist

In der Dokumentation finden Sie in der Klasse Location die Methode
getNeighbourLocations(double distance).
Diese liefert alle benachbarten Locations in einem gegebenen Abstand. Wählt man distance = 0.5, so erhält man die direkt benachbarten Zellen. Mit einer for-Schleife kann man alle diese Zellen durchgehen und prüfen, ob sie besetzt sind:

 

   
Schritt 3: Abwechslungsweise weisse und schwarze Steine setzten
Deklarieren Sie ein Instanzvariable int imageID = 0 und ersetzen Sie stone.show(0) durch stone.show(imageID).

   

Schritt 4: Die eingeschlossenen Steine umkehren
Angenommen in der nebenstehender Skizze wird in der Zelle (5, 4) ein schwarzer Stein gesetzt. Ausgehend von dieser Position muss man alle 8 Richtungen durchgehen und die benachbarten Steine untersuchen. Wenn in der benachbarten Zelle ein fremder Stein liegt, geht man weiter, bis man eigenen Stein oder eine leere Zelle findet. Locations der eingeschlossenen Steine werden in einer ArrayList gespeichert.

In einer for-Schleife alle Richtungen durchgehen:
for (int c = 0; c <= 315; c += 45)
{
   ArrayList<Actor> actors = new ArrayList<Actor>();
   Location loc = location.getNeighbourLocation(c);
   Actor a = getOneActorAt(loc);
}
Einen Actor zur ArrayList hinzufügen:
actors.add(a);
Alle Steine in ArrayList umkehren:
for (Actor actor : actors)
   actor.show(imageID);

 

 

Schritt 5: Überprüfen, ob Game over und Anzeigen der Ergebnisse

Die belegten Zellen kann man z.Bsp. mit der Methode getOccupiedLocations() erfassen. Diese gibt eine ArrayList zurück:
ArrayList<Location> all = getOccupiedLocations();

all.size() liefert die Anzahl Elemente in dieser ArrayList