public interface Player
extends java.rmi.Remote
Diese Schnittstelle muss von allen Spielern von FlowerWarsPP implementiert werden. Auf diese Weise ist es moeglich die Spielablauflogik komplett unabhaengig von den tatsaechlichen Spielern implementieren zu koennen. Dabei ist es sogar moeglich, dass einer der Spieler ein Netzwerkspieler ist.
Ein Spieler hat beim Erzeugen keine Informationen darueber auf welchem Spielbrett (genauer welche Groesse) er spielen
wird und welche Farbe er hat. Diese Informationen muss er vor Spielbeginn durch einen Aufruf der Methode init(int, PlayerColor)
bekommen. Jeder Spieler muss ein eigenes Spielbrett haben, damit er die Spielsituation
nachvollziehen kann und in der Lage ist Konflikte in der Spiellogik mit dem Hauptprogramm zu erkennen.
init(int, PlayerColor)
aufgerufen werden. Ohne einen Aufruf dieser Methode,
kann der Spieler nicht spielen. Wird dennoch eine andere Methode zuerst aufgerufen, muss darauf mit einer Exception
reagiert werden. Je nach Spielerfarbe ist die naechste Methode die ausgefuehrt ist eine andere. Der rote
Spieler muss als naechstes request()
aufrufen, der blaue update(Move, Status)
.
request -> confirm -> update -> request -> ...
. Der Ablauf startet
fuer den blauen Spieler entsprechend bei der Methode update
.
init(int, PlayerColor)
kann zu einem beliebigen Zeitpunkt waehrend eines Spiels erneut
aufgerufen werden. Das aktuelle Spiel ist damit beendet und der Spieler muss sich auf ein neues Spiel, mit neuem
Brett und einer potentiell anderen Farbe vorbereiten.
Modifier and Type | Method and Description |
---|---|
void |
confirm(Status status)
Diese Funktion bestaetigt dem Spieler den zuletzt mit
request() angeforderten Zug. |
void |
init(int boardSize,
PlayerColor color)
Initialisiere den Spieler und teile ihm die Groesse des Spielbretts und seine Spielerfarbe mit.
|
Move |
request()
Diese Funktion fordert vom Spieler einen Zug an.
|
void |
update(Move opponentMove,
Status status)
Diese Funktion uebermittelt dem Spieler den Zug und Status des Zuges des Gegenspielers.
|
Move request() throws java.lang.Exception, java.rmi.RemoteException
Exception
geworfen werden.Move
-Objektjava.lang.Exception
- falls der Spieler keinen Zug zurueckliefern kann oder request
nicht die Funktion ist, die aktuell
aufgerufen werden solljava.rmi.RemoteException
- falls bei der Netzwerkkommunikation etwas schief gelaufen istvoid confirm(Status status) throws java.lang.Exception, java.rmi.RemoteException
request()
angeforderten Zug. Im Parameter status
wird der Status dieses Spielzuges vom Hauptprogramm mitgegeben. Mit dieser Information kann und muss der
Spieler pruefen, ob es zu Inkonsistenzen der Spiellogik gekommen ist. Stimmt der Status nicht mit dem eigenen
Status ueberein oder ist die Reihenfolge der Spielermethoden nicht korrekt, muss eine Exception
geworfen
werden.status
- Status des Spielbretts des Hauptprogramms nach Ausfuehren des zuletzt mit request()
geholten
Zugesjava.lang.Exception
- falls die Stati der Spielbretter nicht uebereinstimmen oder confirm
nicht die Funktion ist, die
aktuell aufgerufen werden solljava.rmi.RemoteException
- falls bei der Netzwerkkommunikation etwas schief gelaufen istvoid update(Move opponentMove, Status status) throws java.lang.Exception, java.rmi.RemoteException
opponentMove
wird der Zug des Gegenspielers, im Parameter status
der Status dieses Spielzuges vom
Hauptprogramm mitgegeben. Mit dieser Information kann und muss der Spieler pruefen, ob es zu Inkonsistenzen der
Spiellogik gekommen ist. Stimmt der Status nicht mit dem eigenen Status ueberein oder ist die Reihenfolge der
Spielermethoden nicht korrekt, muss eine Exception
geworfen werden.opponentMove
- Zug des Gegenspielersstatus
- Status des Spielbretts des Hauptprogramms nach Ausfuehren des Zuges des Gegenspielersjava.lang.Exception
- falls die Stati der Spielbretter nicht uebereinstimmen oder update
nicht die Funktion ist, die
aktuell aufgerufen werden solljava.rmi.RemoteException
- falls bei der Netzwerkkommunikation etwas schief gelaufen istvoid init(int boardSize, PlayerColor color) throws java.lang.Exception, java.rmi.RemoteException
boardSize
- Spielbrettgroessecolor
- Spielerfarbejava.lang.Exception
- falls es nicht moeglich ist den Spieler zu initialisierenjava.rmi.RemoteException
- falls bei der Netzwerkkommunikation etwas schief gelaufen ist