de.torfu.kabayellow.common
Class Game

java.lang.Object
  |
  +--de.torfu.kabayellow.common.Game
Direct Known Subclasses:
BufferedGame, NetworkGame

public class Game
extends java.lang.Object

Repräsentiert das Spiel. Aus einem Objekt dieser Klasse können alle Informationen über das Spiel gelesen werden.


Field Summary
static int CARD_TYPES
          Anzahl verschiedener ActionCard-Typen
static int INITIAL_ACTION_POINTS
          Die Anzahl von Aktionspunkten am Anfang eines Zuges
static int MAX_CARDS
          Die Maximalzahl von Ereigniskarten im Spiel
static int MAX_KNIGHTS
          Die Maximalzahl von Rittern je Spieler
 
Constructor Summary
Game(java.lang.String[] names, int[] ages)
          Erzeugt ein neues Spiel.
 
Method Summary
 void addGameObserver(IGameObserver observer)
          Setzt den IGameObserver, der dieses Spiel "beobachtet".
 void calculateScores()
           
 boolean canUndoPreviousAction()
          Gibt zurück, ob die zuletzt ausgeführte Aktion mit undoPreviousAction() rückgängig gemacht werden kann.
 Game createCopy(java.lang.String newIdentifier)
          Erzeugt eine Kopie des Spielstandes.
 Player getAbstractPlayer()
          Gibt das Player-Objekt des IControllingPlayers zurück
 int getAbstractPlayerID()
          Gibt die ID des Abstractplayers zurück
 Board getBoard()
          Gibt das zu dem Spiel gehörende Spielbrett zurück.
 Player getCurrentPlayer()
          Gibt den Spieler, der gerade am Zug ist, zurück.
 java.lang.String getGameIdentifier()
          Gibt den mit setGameIdentifier(String) gesetzten Bezeichner zurück.
 int getPhase()
          Gibt die aktuelle Phase zurück.
 Player getPlayer(int id)
          Gibt ein Spielerobjekt zurück.
 Player getPlayer(java.lang.String name)
          Gibt das Player-Objekt des Spielers mit einem bestimmten Namen zurück.
 int getPlayerCount()
          Gibt die Anzahl der an dem Spiel teilnehmenden Spieler zurück.
 java.lang.String getPlayersName(int id)
           
 Action getPreviousAction()
          Gibt die zuletzt ausgeführte Aktion zurück, oder null, wenn noch keine Aktion ausgeführt wurde.
 int getRemainingCards()
          Gibt die Anzahl der noch übrigen, d.h. vom Server noch nicht vergebenen Aktionskarten zurück.
 int getRemainingRounds()
          Gibt zurück, wieviele Runden in dieser Phase nach der aktuellen Runde noch verbleiben.
 int getRound()
          Gibt die aktuelle Runde zurück.
 int getRoundsOfPhase()
          Gibt zurück, wieviele Runden diese Phase hat.
 int getRoundsOfPhase(int phase)
          Gibt zurück, wieviele Runden die Phase hat.
 Player getStartingPlayer()
          Gibt den Spieler zurück, der das Spiel begonnen hat.
 int getStonesForPhase()
          Gibt zurück, wie viele Bausteine jeder Spieler in dieser Phase insgesamt zur Verfügung hat.
 int getStonesForPhase(int forPhase)
          Gibt zurück, wie viele Bausteine jeder Spieler in der Phase insgesamt zur Verfügung hat.
 int getTimeout()
          Gibt den Timeout des Spiels in Millisekunden zurück, falls bekannt.
 boolean hasStarted()
          Gibt zurück, ob das Spiel bereits ein Spieler einen Zug gemacht hat.
 boolean isGameOver()
          Gibt zurück, ob das Spiel bereits vorbei ist.
 boolean isTurnMoveKing()
          Gibt zurück, ob der aktuelle Spieler in der "König versetzen"-Runde ist oder nicht.
 boolean isTurnNormal()
          Gibt zurück, ob der aktuelle Spieler in einer normalen "5 Punkte"-Runde ist oder nicht.
 boolean isTurnSetFirstKnight()
          Gibt zurück, ob der aktuelle Spieler in der "1.
 boolean isWaitingForPlayers()
          Gibt zurück, ob das Spiel noch auf Spieler wartet.
 void printInfo()
           
 void registerCountdownObserver(CountdownObserver observer)
           
 void removeGameObserver(IGameObserver observer)
           
 void sendChatMessage(java.lang.String message)
          Ermöglicht es, eine ChatMessage an das Spiel, also an alle teilnehmenden Spieler zu schicken.
 void setAbstractPlayer(AbstractPlayer pl, java.lang.String name)
          Diese Methode ist veraltet.
 void setControllingPlayer(IControllingPlayer pl, java.lang.String name)
          Setzt den IControllingPlayer, der dieses Spiel "spielt".
 void setGameIdentifier(java.lang.String newIdentifier)
          Gibt diesem Spiel eine Bezeichnung.
 void undoPreviousAction()
          Nimmt die zuletzt ausgeführte Aktion zurück.
 void undoTurn()
          Nimmt alle vom aktuellen Spieler ausgeführten Züge zurück.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_CARDS

public static final int MAX_CARDS
Die Maximalzahl von Ereigniskarten im Spiel

See Also:
Constant Field Values

CARD_TYPES

public static final int CARD_TYPES
Anzahl verschiedener ActionCard-Typen

See Also:
Constant Field Values

MAX_KNIGHTS

public static final int MAX_KNIGHTS
Die Maximalzahl von Rittern je Spieler

See Also:
Constant Field Values

INITIAL_ACTION_POINTS

public static final int INITIAL_ACTION_POINTS
Die Anzahl von Aktionspunkten am Anfang eines Zuges

See Also:
Constant Field Values
Constructor Detail

Game

public Game(java.lang.String[] names,
            int[] ages)
Erzeugt ein neues Spiel. Übergeben werden ein Array mit Spielernamen und ein Array mit dem Alter der Spieler in Jahren. Die Spieler werden in der gleichen Reihenfolge spielen wie sie im Array stehen. Der Konstruktor sucht sich aber selbst den jüngsten Spieler raus.

Das Spiel beginnt sofort. der erste (=jüngste) Spieler kann sofort seinen Startritter setzen. Die acht Startburgen stehen schon an ihrem Platz. Dieser Konstruktor ist nur zu Testzwecken vorhanden!

Parameters:
names - die Namen der Spieler
ages - das Alter der Spieler
Method Detail

setGameIdentifier

public void setGameIdentifier(java.lang.String newIdentifier)
Gibt diesem Spiel eine Bezeichnung. Die Bezeichnung wird in Debug-Messages ausgegeben. Ansonsten ist sie ohne Bedeutung.


getGameIdentifier

public java.lang.String getGameIdentifier()
Gibt den mit setGameIdentifier(String) gesetzten Bezeichner zurück.


getTimeout

public int getTimeout()
Gibt den Timeout des Spiels in Millisekunden zurück, falls bekannt.


setAbstractPlayer

public void setAbstractPlayer(AbstractPlayer pl,
                              java.lang.String name)
Diese Methode ist veraltet. Statt dessen zukünftig setControllingPlayer(de.torfu.kabayellow.common.IControllingPlayer, java.lang.String) und addGameObserver(de.torfu.kabayellow.common.IGameObserver) verwenden! Setzt den AbstractPlayer, der dieses Spiel "spiel". Er wird über alle Aktionen dieses Spiels informiert, d.h. seine gameStatusChanged()-, actionPerformed()-, usw.-Methoden werden aufgerufen. Er wird aufgerufen, Aktionen auszuführen

Parameters:
pl - ein AbstractPlayer

setControllingPlayer

public void setControllingPlayer(IControllingPlayer pl,
                                 java.lang.String name)
Setzt den IControllingPlayer, der dieses Spiel "spielt". Er wird vom Game aufgerufen, Züge abzugeben.

Parameters:
pl - ein IControllingPlayer

addGameObserver

public void addGameObserver(IGameObserver observer)
Setzt den IGameObserver, der dieses Spiel "beobachtet". Er wird über alle Aktionen dieses Spiels informiert, d.h. seine gameStatusChanged()-, actionPerformed()-, usw.-Methoden werden aufgerufen.


removeGameObserver

public void removeGameObserver(IGameObserver observer)

getPlayer

public Player getPlayer(java.lang.String name)
Gibt das Player-Objekt des Spielers mit einem bestimmten Namen zurück.

Throws:
java.lang.IllegalArgumentException - wenn kein Spieler dieses Namens existiert.

hasStarted

public boolean hasStarted()
Gibt zurück, ob das Spiel bereits ein Spieler einen Zug gemacht hat. Zu Beginn eines Spiels ist es false. Sobald der erste Spieler seinen Ritter platziert hat, wechselt es auf true.


undoPreviousAction

public void undoPreviousAction()
Nimmt die zuletzt ausgeführte Aktion zurück. Vorher kann mit canUndoPreviousAction() geprüft werden, ob sie reversibel ist.

Throws:
java.lang.UnsupportedOperationException - Wenn noch keine Aktionen ausgeführt wurden, oder die zuletzt ausgeführte Aktion nicht reversibel ist

undoTurn

public void undoTurn()
Nimmt alle vom aktuellen Spieler ausgeführten Züge zurück.


canUndoPreviousAction

public boolean canUndoPreviousAction()
Gibt zurück, ob die zuletzt ausgeführte Aktion mit undoPreviousAction() rückgängig gemacht werden kann. Wenn noch keine Aktionen ausgeführt wurden, wird false zurückgegeben.


getPreviousAction

public Action getPreviousAction()
Gibt die zuletzt ausgeführte Aktion zurück, oder null, wenn noch keine Aktion ausgeführt wurde.


getRound

public int getRound()
Gibt die aktuelle Runde zurück.

Returns:
Aktuelle Runde

getPhase

public int getPhase()
Gibt die aktuelle Phase zurück.

Returns:
Aktuelle Phase

getPlayerCount

public int getPlayerCount()
Gibt die Anzahl der an dem Spiel teilnehmenden Spieler zurück.

Returns:
Anzahl der Spieler

getBoard

public Board getBoard()
Gibt das zu dem Spiel gehörende Spielbrett zurück.

Returns:
Das zu dem Spiel gehörende Spielbrett

getAbstractPlayer

public Player getAbstractPlayer()
Gibt das Player-Objekt des IControllingPlayers zurück


getAbstractPlayerID

public int getAbstractPlayerID()
Gibt die ID des Abstractplayers zurück


getPlayersName

public java.lang.String getPlayersName(int id)

getCurrentPlayer

public Player getCurrentPlayer()
Gibt den Spieler, der gerade am Zug ist, zurück. Ist das Spiel schon beendet, wird der Sieger zurückgegeben.

Returns:
Spieler, der gerade am Zug ist

getStartingPlayer

public Player getStartingPlayer()
Gibt den Spieler zurück, der das Spiel begonnen hat.

Returns:
Spieler, der das Spiel begonnen hat

getPlayer

public Player getPlayer(int id)
Gibt ein Spielerobjekt zurück. Über dieses kann man weitere Infos erhalten, z.B. Spielername, Punktestand, seine Ritter etc.

Returns:
ID des Spielers

isWaitingForPlayers

public boolean isWaitingForPlayers()
Gibt zurück, ob das Spiel noch auf Spieler wartet.


isTurnSetFirstKnight

public boolean isTurnSetFirstKnight()
Gibt zurück, ob der aktuelle Spieler in der "1. Ritter einsetzen"-Runde ist oder nicht.


isTurnMoveKing

public boolean isTurnMoveKing()
Gibt zurück, ob der aktuelle Spieler in der "König versetzen"-Runde ist oder nicht.


isTurnNormal

public boolean isTurnNormal()
Gibt zurück, ob der aktuelle Spieler in einer normalen "5 Punkte"-Runde ist oder nicht.


isGameOver

public boolean isGameOver()
Gibt zurück, ob das Spiel bereits vorbei ist.


getRoundsOfPhase

public int getRoundsOfPhase()
Gibt zurück, wieviele Runden diese Phase hat. Dabei werden aktuelle Phase und Spielerzahl berücksichtigt.


getRoundsOfPhase

public int getRoundsOfPhase(int phase)
Gibt zurück, wieviele Runden die Phase hat. Dabei werden aktuelle Phase und Spielerzahl berücksichtigt.


getRemainingRounds

public int getRemainingRounds()
Gibt zurück, wieviele Runden in dieser Phase nach der aktuellen Runde noch verbleiben.


getStonesForPhase

public int getStonesForPhase()
Gibt zurück, wie viele Bausteine jeder Spieler in dieser Phase insgesamt zur Verfügung hat. Beispielsweise hat bei vier Spielern in der ersten Phase jeder 8 Steine, und in der zweiten und dritten Phase jeder 6.


getStonesForPhase

public int getStonesForPhase(int forPhase)
Gibt zurück, wie viele Bausteine jeder Spieler in der Phase insgesamt zur Verfügung hat. Beispielsweise hat bei vier Spielern in der ersten Phase jeder 8 Steine, und in der zweiten und dritten Phase jeder 6.


getRemainingCards

public int getRemainingCards()
Gibt die Anzahl der noch übrigen, d.h. vom Server noch nicht vergebenen Aktionskarten zurück.


sendChatMessage

public void sendChatMessage(java.lang.String message)
Ermöglicht es, eine ChatMessage an das Spiel, also an alle teilnehmenden Spieler zu schicken. Der Absender selbst bekommt die Nachricht auch zugestellt.

Parameters:
message - die abzuschickende Nachricht

createCopy

public Game createCopy(java.lang.String newIdentifier)
Erzeugt eine Kopie des Spielstandes. Diese Kopie ist völlig unabhängig vom Original, und ist nicht mehr an die Control gekoppelt. Das heißt, auf ihr können beliebige Actions ausgeführt werden, ohne dass es einen Effekt auf das Spiel hat.

Parameters:
newIdentifier - Ein Name für die Spielfeldkopie. Wird nur für Debug-Messages verwendet.
Returns:
Eine Kopie des Spielfelds.

calculateScores

public void calculateScores()

printInfo

public void printInfo()

registerCountdownObserver

public void registerCountdownObserver(CountdownObserver observer)