reversi
Class TextGameBoard

java.lang.Object
  extended by reversi.TextGameBoard
All Implemented Interfaces:
GameBoard

public class TextGameBoard
extends Object
implements GameBoard

Implementation eines Reversi-Spielbretts inklusive nützlicher Hilfsfunktionen.

See Also:
Arena

Field Summary
 
Fields inherited from interface reversi.GameBoard
EMPTY, GREEN, RED
 
Constructor Summary
TextGameBoard()
          Erstellt eine neue Instanz von TextGameBoard, initialisiert mit der bei Reversi üblichen Startsituation aus 4 Steinen.
TextGameBoard(GameBoard gb)
          Erstellt eine neue Instanz von TextGameBoard, die eine genaue Kopie der übergebenen Spielsituation gb repräsentiert.
 
Method Summary
 boolean checkMove(int player, Coordinates c)
          Diese Methode überprüft ob der Zug c einen gültigen Zug für den Spieler player darstellt.
 int countStones(int player)
          Zählt die Anzahl der Steine für einen gegebenen Spieler.
 int getPosition(Coordinates c)
          Ermöglicht es, ein Feld der in dieser Instanz gespeicherten Spielsituation abzufragen.
 int getSize()
          Gibt die Ausdehnung des Spielfeldes zurück.
 boolean isFull()
          Überprüft, ob das Spielfeld voll ist.
 boolean isMoveAvailable(int player)
          Gibt true zurück, wenn ein gültiger Zug für den übergebenen Spieler existiert.
 void makeMove(int player, Coordinates c)
          Diese Methode setzt einen Stein für den angegebenen Spieler auf dem angegebenen Feld, und dreht Steine des Gegners gemäss den Regeln um.
 String toString()
          Erstellt einen mehrzeiligen String, der eine Textdarstellung der in dieser Instanz gespeicherten Spielsituation enthält.
 void updateBoard(GameBoard gb)
          Kopiert die als Parameter übergebene Spielsituation in die aktuelle Instanz.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TextGameBoard

public TextGameBoard()
Erstellt eine neue Instanz von TextGameBoard, initialisiert mit der bei Reversi üblichen Startsituation aus 4 Steinen.


TextGameBoard

public TextGameBoard(GameBoard gb)
Erstellt eine neue Instanz von TextGameBoard, die eine genaue Kopie der übergebenen Spielsituation gb repräsentiert.

Parameters:
gb - eine gegebene Spielsituation
Method Detail

getSize

public int getSize()
Description copied from interface: GameBoard
Gibt die Ausdehnung des Spielfeldes zurück. Das Spielfeld ist 2-Dimensional und hat in beide Richtungen die selbe Ausdehnung.

Specified by:
getSize in interface GameBoard

updateBoard

public void updateBoard(GameBoard gb)
Kopiert die als Parameter übergebene Spielsituation in die aktuelle Instanz.


getPosition

public int getPosition(Coordinates c)
                throws OutOfBoundsException
Ermöglicht es, ein Feld der in dieser Instanz gespeicherten Spielsituation abzufragen.

Specified by:
getPosition in interface GameBoard
Parameters:
c - die Koordinaten des Spielfelds, welches abgefragt wird.
Returns:
Entweder GameBoard.RED, GameBoard.GREEN oder GameBoard.EMPTY.
Throws:
OutOfBoundsException - wenn sich die in c angegebenen Koordinaten ausserhalb des Spielfelds befinden

isMoveAvailable

public boolean isMoveAvailable(int player)
Gibt true zurück, wenn ein gültiger Zug für den übergebenen Spieler existiert.

Parameters:
player - Spezifiziert den Spieler (entweder GameBoard.RED oder GameBoard.GREEN), für den überprüft werden soll.
Returns:
True falls ein gültiger Zug existiert, false sonst.

checkMove

public boolean checkMove(int player,
                         Coordinates c)
Diese Methode überprüft ob der Zug c einen gültigen Zug für den Spieler player darstellt.

Parameters:
player - der Spieler, entweder GameBoard.RED or GameBoard.GREEN.
c - die Koordinaten, die überprüft werden sollen.
Returns:
true, wenn Zug gültig

makeMove

public void makeMove(int player,
                     Coordinates c)
Diese Methode setzt einen Stein für den angegebenen Spieler auf dem angegebenen Feld, und dreht Steine des Gegners gemäss den Regeln um. WICHTIG: In der gegenwärtigen Implementation von TextGameBoard muss einem Aufruf von makeMove immer ein Aufruf von checkMove mit den gleichen Koordinaten vorausgehen. Nachfolgend ein Beispiel:

public Coordinates nextMove( GameBoard gb ) {

// ...
TextGameBoard tgb=new TextGameBoard(gb);
Coordinates c=new Coordinates(3,4);
if(tgb.checkMove(GameBoard.GREEN,c)) {
tgb.makeMove(GameBoard.GREEN,c);
}

Dies ermöglicht eine effizientere Implementation von TextGameBoard: In makeMove können Berechnungsschritte eingespart werden, die in checkMove schon gemacht worden sind, allerdings nur, wenn sich die Aufrufe auf das gleiche Spielfeld beziehen (wie z.B. oben auf das Spielfeld c).

Parameters:
player - der Spieler für den ein Stein gesetzt werden soll, entweder GameBoard.RED oder GameBoard.GREEN
c - Koordinaten, wo der Stein gesetzt werden soll
Throws:
UnsupportedMethodInvocationException - falls vor dem Aufruf von makeMove kein entsprechender Aufruf checkMove erfolgt ist

isFull

public boolean isFull()
Überprüft, ob das Spielfeld voll ist.

Returns:
true wenn ja, false sonst.

countStones

public int countStones(int player)
Zählt die Anzahl der Steine für einen gegebenen Spieler.

Parameters:
player - der Spieler
Returns:
die Anzahl der gezählten Steine

toString

public String toString()
Erstellt einen mehrzeiligen String, der eine Textdarstellung der in dieser Instanz gespeicherten Spielsituation enthält.

Overrides:
toString in class Object