de.torfu.kabayellow.common
Class Action

java.lang.Object
  |
  +--de.torfu.kabayellow.common.Action
All Implemented Interfaces:
java.lang.Cloneable
Direct Known Subclasses:
ActionActivateKnight, ActionBuyCard, ActionBuyScore, ActionCard, ActionEndTurn, ActionMoveKing, ActionMoveKnight, ActionPutStone, ActionSetFirstKnight

public abstract class Action
extends java.lang.Object
implements java.lang.Cloneable

Abstrakte Superklasse für alle Aktionen, die der Spieler ausführen kann. Mögliche Aktionen sind:

Alle diese Aktionen sind durch Unterklassen von Action repräsentiert.

Um beispielsweise einen Rittereinzusetzen, würde der Spieler ActionActivateKnight verwenden. Beispiel:

     Action myMove = new ActionActivateKnight();
     myMove.setPoint(targetPoint);
     if (myMove.isLegal(getGame())) {
         // Dieser Zug entspricht nicht den Regeln.
     } else {
         myMove.execute(getGame());
     }
 
Züge erstmal "testweise" ausführen, um z.B. Undo zu ermöglichen:
     Game myGameCopy = getGame().createCopy();
     Action myMove = new ActionActivateKnight();
     myMove.setPoint(targetPoint);
     myMove.execute(myGameCopy);
 
Dieser Zug wird dann nur auf der Kopie des Spielstandes ausgeführt.


Field Summary
static int ERROR_ACTIONCARD_IS_NEW
          Fehlerkonstante für den Fall, dass die einzusetzende Karte gerade erst gekauft wurde
static int ERROR_CARD_NOT_NEEDED
          Fehlerkonstante , wenn für einen Zug eine Karte gar nicht notwendig ist.
static int ERROR_CASTLE_PROPERTY_VIOLATED
          Fehlerkonstante für zu Burgeigenschaft verletzt
static int ERROR_CASTLE_SPLIT
          Fehlerkonstante den Fall, dass eine Burg getrennt werden sollte
static int ERROR_CODE_NONE
          Fehlerkonstante für "Kein Fehler"
static int ERROR_DOESNT_HAVE_ACTIONCARD
          Fehlerkonstante für den Fall, dass eine nicht vorhandene Aktionskarte eingesetzt werden sollte
static int ERROR_ILLEGAL_MOVE
          Fehlerkonstante für den Fall das ein Ritter aus irgendeinem Grund nicht auf ein Feld ziehen kann.
static int ERROR_ILLEGAL_MOVE_THROUGH_CASTLE
          Fehlerkonstante für den Fall, dass durch eine Burg hindurch gezogen werden sollte
static int ERROR_IMPOSSIBLE_MOVE
          Fehlerkonstante für einen unmöglichen Zug bei der Aktion ActionCardPutStoneUnderKnigth oder ActionCardMoveDiagonal
static int ERROR_KNIGHT_ON_TARGET_CELL
          Fehlerkonstante für den Fall, dass auf dem Zielfeld schon eine Figur steht
static int ERROR_MOVE_TOO_LONG
          Fehlerkonstante für Zug zu lang (genaue Erklärung folgt)
static int ERROR_NEW_CASTLE
          Fehlerkonstante für den Fall, dass eine neue Burg entstehen würde
static int ERROR_NO_ACTIONPOINTS_LEFT
          Fehlerkonstante für zu wenig Aktionspunkte
static int ERROR_NO_ADJACENT_KNIGHT
          Fehlerkonstante für den Fall, das dem Feld, auf das ein Ritter eingesetzt wird, kein Feld benachbart ist, auf dem ein eigener Ritter steht
static int ERROR_NO_CASTLE
          Fehlerkonstante, wenn der erste Ritter nicht auf einer Burg platziert wird
static int ERROR_NO_KNIGHT_FOUND
          Fehlerkonstante für den Fall, das von einem Feld gezogen werden soll, auf dem keine Figur vorhanden ist
static int ERROR_NO_MORE_CARDS_LEFT
          Fehlerkonstante für den Fall, dass keine Aktionskarten mehr gezogen werden können, falls schon alle vorhandenen gezogen wurden.
static int ERROR_NO_MORE_KNIGHTS_LEFT
          Fehlerkonstante für den Fall, dass der Spieler keine Ritter mehr zur Verfügung hat
static int ERROR_NO_STONES_LEFT
          Fehlerkonstante für zu wenig Bauststeine, um zu setzen
static int ERROR_NO_STRAIGHT_MOVE
          Fehlerkonstante für Zug nicht geradeaus
static int ERROR_NOT_ENOUGH_CASTLES
          Fehlerkonstante für zu zu wenig Burgen (genaueres folgt)
static int ERROR_ONLY_TWO_CARDS_ALLOWED
          Fehlerkonstante für den Fall, dass in einem Zug eine dritte Aktionskarte gekauft werden soll
static int ERROR_PLAY_ONLY_ONE_CARD
          Fehlerkonstante für den Fall, dass mehr als eine Aktionskarte ausgespielt werden soll
static int ERROR_TOO_FEW_CASTLE
          Fehlerkonstannte für den Fall das zu wenig Burgen auf dem Spielfeld sind es müssen immer mindestens sechs sein
static int ERROR_TOO_HIGH
          Fehlerkonstante für den Fall, dass die Ebene, in die der Ritter eingesetzt wird, zu hoch ist
static int ERROR_WRONG_ROUND
          Fehlerkonstante für den Fall, dass eine Aktion in einer Runde ausgeführt wird, in der sie nicht erlaubt ist, also z.B.
 
Method Summary
 java.lang.Object clone()
           
 void execute(Game game)
          Führt den Zug aus.
 java.util.Vector getActionMoveKnightsForLongMove(Game game, java.awt.Point fromPoint, java.awt.Point toPoint)
          Gibt für den Start- und Endpunkt dann einen Vektor zurück, der die erforderlichen ActionMoveKnight Objekte enthält, wenn der Zug mit den Actionpoints des currentPlayer möglich ist.
 int getCost(Game game)
          Gibt zurück, wie viele Aktionspunkte dieser Zug kostet. 0, falls nicht überschrieben.
 int[] getCostsOfPossibleMoves(Game game, java.awt.Point startPoint)
          Gibt einen int - Array zurück mit den Kosten, die ein Zug von einem Startpunkt aus kostet.
 java.awt.Point getEndPoint4Move()
           
static java.lang.String getError(int error)
           
abstract  int getErrorCode(Game game)
          Wie isLegal(Game), nur wird statt einem Boolean eine ERROR_CODE_XXXX-Konstante zurückgegeben.
 int getID()
          Gibt die ID des Spielers zurück, der die Aktion ausgeführt hat.
 java.awt.Point getPointFromIndex(int i)
           
 java.util.Vector getPossibleEndPoints(Game game)
          Gibt einen Vector mit allen legalen Zielfeldern für diese Aktion zurück.
 Board getPossibleLocations(int maxPoints, int usedPoints, Game game, java.awt.Point fromPoint, Board workBoard)
          Gibt ein Board zurück das in den cells mit price die Anzahl der Züge angibt, die der Ritter von startPoint auf das Felder braucht.
 java.util.Vector getPossibleLongMoves(Game game, java.awt.Point fromPoint)
          Gibt einen Vector mit den cells zurück, die der current Player mit einem Ritter von StartPoint aus erreichen kann.
 boolean[] getPossibleMoves(Game game, java.awt.Point fromPoint)
          Gibt einen boolschen Array zurück, (Index -> Feldindex) der angibt, auf welche Felder der Ritter von startPoint aus ziehen kann.
 boolean[] getPossibleSetKnight(Game game, int id)
          Gibt einen boolschen Array zurück, (Index -> Feldindex) der angibt, auf welche Felder der Ritter von startPoint aus ziehen kann.
 java.util.Vector getPossibleStartPoints(Game game)
          Gibt einen Vector mit allen legalen Startfeldern für diese Aktion zurück.
 java.awt.Point getStartPoint()
          Gibt den Startpunkt einer Zwei-Punkte-Action zurück, oder null, falls er noch nicht festgelegt wurde.
 java.awt.Point getStartPoint4Move()
           
 boolean hasStartPoint()
          Gibt für zwei-Parameter-Aktionen zurück, ob der Startpunkt schon gesetzt ist.
 boolean isActionCard()
          Gibt zurück, ob diese Action einen Ritter verändert (bewegt oder einsetzt).
 boolean isBuyCardAction()
          Gibt zurück, ob diese Action eine Karte kauft.
 boolean isKingAction()
          Gibt zurück, ob diese Action einen König verändert (bewegt oder einsetzt).
 boolean isKnightAction()
          Gibt zurück, ob diese Action einen Ritter verändert (bewegt oder einsetzt).
 boolean isLegal(Game game)
          Überprüft, ob der Zug den Regeln entspricht.
 boolean isnewKnightAction()
          Gibt zurück, ob diese Action einen Ritter einsetzt.
 boolean isStoneAction()
          Gibt zurück, ob diese Action einen Stein verändert (bewegt oder einsetzt).
 boolean needsOnePoint()
          Gibt zurück, ob diese Action ein Parameterfeld braucht, wie z.B.
 boolean needsParameters()
          Gibt zurück, ob diese Action keine Parameter braucht, wie z.B.
 boolean needsTwoPoints()
          Gibt zurück, ob diese Action ein Parameterfeld braucht, wie z.B.
 void setEndPoint(java.awt.Point end)
          Legt den Endpunkt für die Bewegung eines Ritters oder eines Steins fest.
 void setID(int id)
           
 void setPoint(int x, int y)
          Alternative Schreibweise für setPoint(Point).
 void setPoint(java.awt.Point point)
          Legt den Punkt fest, an dem ein Ritter oder Stein eingesetzt wird.
 void setPoints(java.awt.Point start, java.awt.Point end)
          Legt Anfangs- und Endpunkt für die Bewegung eines Ritters oder eines Steins fest.
 void setStartPoint(java.awt.Point start)
          Legt den Anfangspunkt für die Bewegung eines Ritters oder eines Steins fest.
 java.lang.String toServer()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ERROR_CODE_NONE

public static final int ERROR_CODE_NONE
Fehlerkonstante für "Kein Fehler"

See Also:
Constant Field Values

ERROR_NO_ACTIONPOINTS_LEFT

public static final int ERROR_NO_ACTIONPOINTS_LEFT
Fehlerkonstante für zu wenig Aktionspunkte

See Also:
Constant Field Values

ERROR_TOO_HIGH

public static final int ERROR_TOO_HIGH
Fehlerkonstante für den Fall, dass die Ebene, in die der Ritter eingesetzt wird, zu hoch ist

See Also:
Constant Field Values

ERROR_NO_ADJACENT_KNIGHT

public static final int ERROR_NO_ADJACENT_KNIGHT
Fehlerkonstante für den Fall, das dem Feld, auf das ein Ritter eingesetzt wird, kein Feld benachbart ist, auf dem ein eigener Ritter steht

See Also:
Constant Field Values

ERROR_NO_STONES_LEFT

public static final int ERROR_NO_STONES_LEFT
Fehlerkonstante für zu wenig Bauststeine, um zu setzen

See Also:
Constant Field Values

ERROR_NEW_CASTLE

public static final int ERROR_NEW_CASTLE
Fehlerkonstante für den Fall, dass eine neue Burg entstehen würde

See Also:
Constant Field Values

ERROR_CASTLE_PROPERTY_VIOLATED

public static final int ERROR_CASTLE_PROPERTY_VIOLATED
Fehlerkonstante für zu Burgeigenschaft verletzt

See Also:
Constant Field Values

ERROR_NO_KNIGHT_FOUND

public static final int ERROR_NO_KNIGHT_FOUND
Fehlerkonstante für den Fall, das von einem Feld gezogen werden soll, auf dem keine Figur vorhanden ist

See Also:
Constant Field Values

ERROR_KNIGHT_ON_TARGET_CELL

public static final int ERROR_KNIGHT_ON_TARGET_CELL
Fehlerkonstante für den Fall, dass auf dem Zielfeld schon eine Figur steht

See Also:
Constant Field Values

ERROR_NO_STRAIGHT_MOVE

public static final int ERROR_NO_STRAIGHT_MOVE
Fehlerkonstante für Zug nicht geradeaus

See Also:
Constant Field Values

ERROR_MOVE_TOO_LONG

public static final int ERROR_MOVE_TOO_LONG
Fehlerkonstante für Zug zu lang (genaue Erklärung folgt)

See Also:
Constant Field Values

ERROR_ILLEGAL_MOVE_THROUGH_CASTLE

public static final int ERROR_ILLEGAL_MOVE_THROUGH_CASTLE
Fehlerkonstante für den Fall, dass durch eine Burg hindurch gezogen werden sollte

See Also:
Constant Field Values

ERROR_NO_MORE_CARDS_LEFT

public static final int ERROR_NO_MORE_CARDS_LEFT
Fehlerkonstante für den Fall, dass keine Aktionskarten mehr gezogen werden können, falls schon alle vorhandenen gezogen wurden.

See Also:
Constant Field Values

ERROR_ONLY_TWO_CARDS_ALLOWED

public static final int ERROR_ONLY_TWO_CARDS_ALLOWED
Fehlerkonstante für den Fall, dass in einem Zug eine dritte Aktionskarte gekauft werden soll

See Also:
Constant Field Values

ERROR_DOESNT_HAVE_ACTIONCARD

public static final int ERROR_DOESNT_HAVE_ACTIONCARD
Fehlerkonstante für den Fall, dass eine nicht vorhandene Aktionskarte eingesetzt werden sollte

See Also:
Constant Field Values

ERROR_CASTLE_SPLIT

public static final int ERROR_CASTLE_SPLIT
Fehlerkonstante den Fall, dass eine Burg getrennt werden sollte

See Also:
Constant Field Values

ERROR_NOT_ENOUGH_CASTLES

public static final int ERROR_NOT_ENOUGH_CASTLES
Fehlerkonstante für zu zu wenig Burgen (genaueres folgt)

See Also:
Constant Field Values

ERROR_IMPOSSIBLE_MOVE

public static final int ERROR_IMPOSSIBLE_MOVE
Fehlerkonstante für einen unmöglichen Zug bei der Aktion ActionCardPutStoneUnderKnigth oder ActionCardMoveDiagonal

See Also:
Constant Field Values

ERROR_NO_MORE_KNIGHTS_LEFT

public static final int ERROR_NO_MORE_KNIGHTS_LEFT
Fehlerkonstante für den Fall, dass der Spieler keine Ritter mehr zur Verfügung hat

See Also:
Constant Field Values

ERROR_ACTIONCARD_IS_NEW

public static final int ERROR_ACTIONCARD_IS_NEW
Fehlerkonstante für den Fall, dass die einzusetzende Karte gerade erst gekauft wurde

See Also:
Constant Field Values

ERROR_PLAY_ONLY_ONE_CARD

public static final int ERROR_PLAY_ONLY_ONE_CARD
Fehlerkonstante für den Fall, dass mehr als eine Aktionskarte ausgespielt werden soll

See Also:
Constant Field Values

ERROR_ILLEGAL_MOVE

public static final int ERROR_ILLEGAL_MOVE
Fehlerkonstante für den Fall das ein Ritter aus irgendeinem Grund nicht auf ein Feld ziehen kann.

See Also:
Constant Field Values

ERROR_CARD_NOT_NEEDED

public static final int ERROR_CARD_NOT_NEEDED
Fehlerkonstante , wenn für einen Zug eine Karte gar nicht notwendig ist.

See Also:
Constant Field Values

ERROR_TOO_FEW_CASTLE

public static final int ERROR_TOO_FEW_CASTLE
Fehlerkonstannte für den Fall das zu wenig Burgen auf dem Spielfeld sind es müssen immer mindestens sechs sein

See Also:
Constant Field Values

ERROR_WRONG_ROUND

public static final int ERROR_WRONG_ROUND
Fehlerkonstante für den Fall, dass eine Aktion in einer Runde ausgeführt wird, in der sie nicht erlaubt ist, also z.B. ActionMoveKing in einer ganz normalen Runde.

See Also:
Constant Field Values

ERROR_NO_CASTLE

public static final int ERROR_NO_CASTLE
Fehlerkonstante, wenn der erste Ritter nicht auf einer Burg platziert wird

See Also:
Constant Field Values
Method Detail

execute

public void execute(Game game)
Führt den Zug aus. Zuvor müssen mit set() alle nötigen Parameter für die Aktion festgelegt worden sein. Der Aufrufer sollte vorher mit isLegal(game) geprüft werden.


isLegal

public boolean isLegal(Game game)
Überprüft, ob der Zug den Regeln entspricht. Es wird nicht überprüft, ob der Spieler tatsächlich gerade an der Reihe ist. Vorher müssen mit set() alle nötigen Parameter für die Aktion festgelegt worden sein.


getErrorCode

public abstract int getErrorCode(Game game)
Wie isLegal(Game), nur wird statt einem Boolean eine ERROR_CODE_XXXX-Konstante zurückgegeben. Diese Methode muss in den Unterklassen von der Regelgruppe überschrieben werden.


getActionMoveKnightsForLongMove

public java.util.Vector getActionMoveKnightsForLongMove(Game game,
                                                        java.awt.Point fromPoint,
                                                        java.awt.Point toPoint)
Gibt für den Start- und Endpunkt dann einen Vektor zurück, der die erforderlichen ActionMoveKnight Objekte enthält, wenn der Zug mit den Actionpoints des currentPlayer möglich ist. Ansonsten wird null zurückgegeben. noch ungetestet


getPossibleLocations

public Board getPossibleLocations(int maxPoints,
                                  int usedPoints,
                                  Game game,
                                  java.awt.Point fromPoint,
                                  Board workBoard)
Gibt ein Board zurück das in den cells mit price die Anzahl der Züge angibt, die der Ritter von startPoint auf das Felder braucht. Das übergebende Board muß für jeden Aufruf neu erzeugt werden. Felder die mit maxPoints Zügen nicht (bzw gar nicht ) erreichbar sind, haben den Standart - price Wert 20 Mit usedPoints = 0 aufzurufen Ausserdem : setzen der Wege mit Pointern für Zusammmenstückeln der Züge


getCostsOfPossibleMoves

public int[] getCostsOfPossibleMoves(Game game,
                                     java.awt.Point startPoint)
Gibt einen int - Array zurück mit den Kosten, die ein Zug von einem Startpunkt aus kostet. wenn die Kosten 20 sind, heisst das, das Feld ist nicht erreichbar noch nicht getestet.


getPossibleLongMoves

public java.util.Vector getPossibleLongMoves(Game game,
                                             java.awt.Point fromPoint)
Gibt einen Vector mit den cells zurück, die der current Player mit einem Ritter von StartPoint aus erreichen kann. ungetestet


getPossibleSetKnight

public boolean[] getPossibleSetKnight(Game game,
                                      int id)
Gibt einen boolschen Array zurück, (Index -> Feldindex) der angibt, auf welche Felder der Ritter von startPoint aus ziehen kann.


getPossibleMoves

public boolean[] getPossibleMoves(Game game,
                                  java.awt.Point fromPoint)
Gibt einen boolschen Array zurück, (Index -> Feldindex) der angibt, auf welche Felder der Ritter von startPoint aus ziehen kann. Neue Version, die die Regelentscheidung Herr Kortenkamps berücksichtigt


getPossibleStartPoints

public java.util.Vector getPossibleStartPoints(Game game)
Gibt einen Vector mit allen legalen Startfeldern für diese Aktion zurück.

Throws:
java.lang.UnsupportedOperationException - für Aktionen, die keinen Startpunkt haben (z.B. ActionPutStone)

getPossibleEndPoints

public java.util.Vector getPossibleEndPoints(Game game)
Gibt einen Vector mit allen legalen Zielfeldern für diese Aktion zurück.

Throws:
java.lang.UnsupportedOperationException - für Aktionen, die keinen Endpunkt haben (z.B. ActionBuyScore)

getCost

public int getCost(Game game)
Gibt zurück, wie viele Aktionspunkte dieser Zug kostet. 0, falls nicht überschrieben.


needsParameters

public boolean needsParameters()
Gibt zurück, ob diese Action keine Parameter braucht, wie z.B. ActionEndTurn oder ActionCard6Points.


needsOnePoint

public boolean needsOnePoint()
Gibt zurück, ob diese Action ein Parameterfeld braucht, wie z.B. ActionPutStone oder ActionActivateKnight.


needsTwoPoints

public boolean needsTwoPoints()
Gibt zurück, ob diese Action ein Parameterfeld braucht, wie z.B. ActionCardMoveStone oder ActionMoveKnight.


isKnightAction

public boolean isKnightAction()
Gibt zurück, ob diese Action einen Ritter verändert (bewegt oder einsetzt).


isKingAction

public boolean isKingAction()
Gibt zurück, ob diese Action einen König verändert (bewegt oder einsetzt).


isActionCard

public boolean isActionCard()
Gibt zurück, ob diese Action einen Ritter verändert (bewegt oder einsetzt).


isStoneAction

public boolean isStoneAction()
Gibt zurück, ob diese Action einen Stein verändert (bewegt oder einsetzt).


isBuyCardAction

public boolean isBuyCardAction()
Gibt zurück, ob diese Action eine Karte kauft.


isnewKnightAction

public boolean isnewKnightAction()
Gibt zurück, ob diese Action einen Ritter einsetzt.


hasStartPoint

public boolean hasStartPoint()
Gibt für zwei-Parameter-Aktionen zurück, ob der Startpunkt schon gesetzt ist.

Throws:
java.lang.UnsupportedOperationException - wenn die Action keine zwei-Parameter-Aktion ist.

setPoint

public void setPoint(java.awt.Point point)
Legt den Punkt fest, an dem ein Ritter oder Stein eingesetzt wird. Darf nur für Actions verwendet werden, die genau einen Parameterpunkt brauchen, wie ActionPutStone, ActionActivateKnight und ActionMoveKing.

Throws:
java.lang.UnsupportedOperationException - wenn die Action zwei oder gar keinen Parameterpunkt braucht.

setPoint

public void setPoint(int x,
                     int y)
Alternative Schreibweise für setPoint(Point).

Throws:
java.lang.UnsupportedOperationException - wenn die Action zwei oder gar keinen Parameterpunkt braucht.

setPoints

public void setPoints(java.awt.Point start,
                      java.awt.Point end)
Legt Anfangs- und Endpunkt für die Bewegung eines Ritters oder eines Steins fest. Darf nur für Actions verwendet werden, die genau zwei Parameterpunkte brauchen, z.B. ActionMoveKnight oder ActionCardAnyGate.

Parameters:
start - Startfeld der Bewegung
end - Endfeld der Bewegung
Throws:
java.lang.UnsupportedOperationException - wenn die Action einen oder gar keinen Parameterpunkt braucht.

setStartPoint

public void setStartPoint(java.awt.Point start)
Legt den Anfangspunkt für die Bewegung eines Ritters oder eines Steins fest. Darf nur für Actions verwendet werden, die genau zwei Parameterpunkte brauchen, z.B. ActionMoveKnight oder ActionCardAnyGate.

Parameters:
start - Startfeld der Bewegung
Throws:
java.lang.UnsupportedOperationException - wenn die Action einen oder gar keinen Parameterpunkt braucht.

setEndPoint

public void setEndPoint(java.awt.Point end)
Legt den Endpunkt für die Bewegung eines Ritters oder eines Steins fest. Darf nur für Actions verwendet werden, die genau zwei Parameterpunkte brauchen, z.B. ActionMoveKnight oder ActionCardAnyGate.

Parameters:
end - Endfeld der Bewegung

getStartPoint

public java.awt.Point getStartPoint()
Gibt den Startpunkt einer Zwei-Punkte-Action zurück, oder null, falls er noch nicht festgelegt wurde.


getStartPoint4Move

public java.awt.Point getStartPoint4Move()

getEndPoint4Move

public java.awt.Point getEndPoint4Move()

getID

public int getID()
Gibt die ID des Spielers zurück, der die Aktion ausgeführt hat. Wird gesetzt, sobald die Aktion ausgeführt wird, oder wenn die Aktion vom Server kommt. Andernfalls ist sie -1.


setID

public void setID(int id)

getPointFromIndex

public java.awt.Point getPointFromIndex(int i)

getError

public static java.lang.String getError(int error)

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

toServer

public java.lang.String toServer()

clone

public java.lang.Object clone()
Overrides:
clone in class java.lang.Object