public class Move extends java.lang.Object implements java.io.Serializable, java.lang.Comparable<Move>
Diese Klasse repraesentiert einen Spielzug.
Ein Spielzug hat immer einen der folgenden vier Typen:
MoveType.Flower
)
Der Zug besteht aus zwei Blumen und wird ueber den Konstruktor Move(Flower, Flower)
erzeugt. Der Typ des
Zuges wird dabei automatisch auf MoveType.Flower
gesetzt.
MoveType.Ditch
)
Der Zug besteht aus einem Graben und wird ueber den Konstruktor Move(Ditch)
erzeugt. Der Typ des Zuges wird
dabei automatisch auf MoveType.Ditch
gesetzt.
MoveType.Surrender
/ MoveType.End
)
Der Zug hat weder Blumen noch Graeben und wird ueber den Konstruktor Move(MoveType)
und Angabe des Typen
MoveType.Surrender
oder MoveType.End
erzeugt. Es ist nicht moeglich Blumen- oder Grabenzuege mit
diesem Konstruktor zu erzeugen!
Ein Zug kann nach der Erzeugung nicht mehr veraendert werden. Die Reihenfolge, in der die Blumen beim Erzeugen an den
Konstruktor uebergeben werden hat keine Auswirkung darauf, welche der beiden Blumen bei einem Aufruf von getFirstFlower()
bzw. getSecondFlower()
zurueckgeliefert wird. Intern werden die Blumen umsortiert, damit
zwei Zuege mit identischen Blumen, die jedoch mit vertauschter Reihenfolge der Blumen erzeugt wurden, dennoch einfach
vergleichbar sind.
Die Methode parseMove(String)
kann einen String
in ein Move-Objekt umwandeln, wenn das Format
gueltig ist.
Die Funktion hashCode()
liefert fuer alle gueltigen Zuege einen eindeutigen Hash-Wert zurueck. Spezielle
Datenstrukturen wie zum Beispiel ein HashSet
koennen sich das zu Nutze machen. Ein Zug ist weiterhin mit
anderen Zuegen ueber das Comparable
-Interface vergleichbar, um eine sinnvolle Sortierung zu ermoeglichen.
Modifier and Type | Field and Description |
---|---|
private Ditch |
ditch
Graben des Zuges
|
private Flower[] |
flowers
Blumen des Zuges
|
private static long |
serialVersionUID
Serialisierungskonstante
|
private MoveType |
type
Zugtyp
|
Constructor and Description |
---|
Move(Ditch ditch)
Erzeuge einen neuen Grabenzug unter Angabe des Grabens.
|
Move(Flower first,
Flower second)
Erzeuge einen neuen Blumenzug unter Angabe der beiden Blumen, die in diesem Zug gepflanzt werden sollen.
|
Move(MoveType type)
Erzeuge einen neuen Aufgabe- oder Spielende-Zug unter Angabe des Typs.
|
Modifier and Type | Method and Description |
---|---|
int |
compareTo(Move move) |
boolean |
equals(java.lang.Object o) |
Ditch |
getDitch()
Gib den Graben des Zuges zurueck.
|
Flower |
getFirstFlower()
Gib die erste Blume des Zuges zurueck.
|
Flower |
getSecondFlower()
Gib die zweite Blume des Zuges zurueck.
|
MoveType |
getType()
Gib den eindeutigen Typen des Zuges zurueck.
|
int |
hashCode() |
static Move |
parseMove(java.lang.String string)
Wandle einen uebergebenen
String in einen Spielzug um. |
private void |
setFirstFlower(Flower first)
Setze die erste Blume des Zuges.
|
private void |
setSecondFlower(Flower second)
Setze die zweite Blume des Zuges.
|
java.lang.String |
toString() |
private void |
updateOrder()
Sortiere die Blumen des Zuges.
|
private static final long serialVersionUID
private MoveType type
private Flower[] flowers
private Ditch ditch
public Move(MoveType type)
MoveType.Surrender
und MoveType.End
auf diese Weise zu erzeugen.type
- Zugtypjava.lang.IllegalArgumentException
- falls versucht wird mit diesem Konstruktor einen Zug vom Typen MoveType.Flower
oder MoveType.Ditch
zu erzeugenpublic Move(Flower first, Flower second)
first
- erste zu pflanzende Blumesecond
- zweite zu pflanzende Blumejava.lang.IllegalArgumentException
- falls eine der Blumen null
istpublic Move(Ditch ditch)
ditch
- zu bauender Grabenpublic static Move parseMove(java.lang.String string)
String
in einen Spielzug um. Die Formate fuer die moeglichen Zugtypen lauten:
{{(Flower1.Pos1.column,Flower1.Pos1.row),(Flower1.Pos2.column,Flower1.Pos2.row),(Flower1.Pos3.column,Flower1.Pos3.row)},
{(Flower2.Pos1.column,Flower2.Pos1.row),(Flower2.Pos2.column,Flower2.Pos2.row),(Flower2.Pos3.column,Flower2.Pos3.row)}}
{{(Pos1.column,Pos1.row),(Pos2.column,Pos2.row)}}
{Surrender}
{End}
string
- umzuwandelnder StringMove
-ObjektDitchFormatException
- falls kein gueltiger String uebergeben wird oder das Format ungueltig istprivate void updateOrder()
public MoveType getType()
public Flower getFirstFlower()
java.lang.IllegalStateException
- falls es sich nicht um einen Blumenzug handeltprivate void setFirstFlower(Flower first)
first
- erste Blumejava.lang.IllegalArgumentException
- falls die Blume null
istpublic Flower getSecondFlower()
java.lang.IllegalStateException
- falls es sich nicht um einen Blumenzug handeltprivate void setSecondFlower(Flower second)
second
- zweite Blumejava.lang.IllegalArgumentException
- falls die Blume null
istpublic Ditch getDitch()
java.lang.IllegalStateException
- falls es sich nicht um einen Grabenzug handeltpublic int hashCode()
hashCode
in class java.lang.Object
public int compareTo(Move move)
compareTo
in interface java.lang.Comparable<Move>
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object