muehle.logic
Class Playground

java.lang.Object
  extended by muehle.logic.Playground

public class Playground
extends java.lang.Object

Die Klasse Playground stellt ein logisches Spielfeld dar. Auf ihm wird die Spielsituation festgehalten und Züge ausgeführt und gespeichert.

Since:
01.07.2004
Version:
2.20
Author:
Bastian Späth & Florian Lemmerich

Field Summary
(package private)  java.util.ArrayList actions
          speichert die durchgeführten Züge beider Spieler auf dem Spielfeld
(package private)  java.util.BitSet[] stones
          speichert die Steinanordnung auf dem Spielfeld in einem BitSet-Array [0] beinhaltet das BitSet (die gesetzten Steine) von Weiss [1] beinhaltet das BitSet (die gesetzten Steine) von Schwarz
(package private)  int[][] zobristTable
          speichert die Zobristkeys zum Generieren des Hashcode in einem 2D Array entsprechend der stones Struktur.
 
Constructor Summary
Playground()
          Standard-Konstruktor.
 
Method Summary
 void appendAction(Action action)
          Fügt eine Aktion dem Aktionsspeicher hinzu
 int[] countMuehlen(Player p)
          Zählt die offenen und geschlossenen Mühlene eines Spielers auf dem Spielfeld
 boolean equals(java.lang.Object o)
          Überprüft 2 Playgrounds auf Gleichheit
 boolean execute(Action action)
          Führt eine beliebige Action auf dem Spielfeld aus.
 boolean execute(DeleteAction action)
          Führt eine beliebige DeleteAction auf dem Spielfeld aus.
 boolean execute(MoveAction action)
          Führt eine beliebige MoveAction auf dem Spielfeld aus.
 boolean execute(SetAction action)
          Führt eine beliebige SetAction auf dem Spielfeld aus.
 boolean execute(UndoDeleteAction action)
           
 boolean execute(UndoSetAction action)
           
 boolean executeProofed(Action action)
          Führt eine beliebige LEGALE Action auf dem Spielfeld aus.
 boolean executeProofed(DeleteAction action)
          Führt eine beliebige LEGALE DeleteAction auf dem Spielfeld aus.
 boolean executeProofed(MoveAction action)
          Führt eine beliebige LEGALE MoveAction auf dem Spielfeld aus.
 boolean executeProofed(SetAction action)
          Führt eine beliebige LEGALE SetAction auf dem Spielfeld aus.
 boolean executeProofed(UndoDeleteAction action)
           
 boolean executeProofed(UndoSetAction action)
           
 java.util.ArrayList getActions()
          gibt die gespeicherten Actions zurück
 Playground getClone()
          Erstellt eine tiefe Kopie des Spielfeldes
 java.util.BitSet getFreePositionBitSet()
           
 java.util.ArrayList getFreePositions()
          Liefert einen Vector, der die Positionen der leeren Felder enthält.
 int getNumberOfPlayersMoveActions(Player player)
           
 java.util.ArrayList getPlayersActions(Player player)
          Gibt alle im Moment möglichen Actions eines Spielers zurück.
 java.util.ArrayList getPlayersFreeStones(Stone s)
          Liefert einen Vector, der die Positionen der Steine eines Typs enthält, die sich NICHT in einer Mühle befinden.
 java.util.ArrayList getPlayersStones(Stone stone)
          Liefert einen Vector, der die Positionen der Steine eines Typs enthält.
 int getSituationValue(Stone s)
          Gibt das Heuristik-Feature SituationValue zurück Das ist die Anzahl der potentiellen Zugmöglichkeiten, also die Anzahl der Zugmöglichkeiten, wenn alle Nachbarfelder von eigenen Feldern frei wären.
 Stone getStone(int p)
          Gibt den aktuellen Stein an Position p zurück.
 java.util.BitSet[] getStones()
          Gibt das BitSet-Array in welchen die Steinbelegung des Playgroundsgespeichert ist zurück
 boolean hasActions(Player player)
          Gibt zurück, ob eine Spieler Zugmöglichkeiten hat
 boolean hasFreeStones(Stone s)
          Gibt zurück, ob eine Spieler Steine hat, die sich nicht in einer Mühle befinden
 int hashCode()
          Generiert einen 32-bit-Hashcode für den aktuellen Playground.
 java.lang.String inversTertiaerString()
           
 boolean isFree(int position)
           
 boolean isMuehle(Action action)
          Gibt zurück, ob eine Mühle durch action geschlossen wurde.
 int perfectHashCode()
          Liefert einen perfekten eindeutigen 32 Bit - Hashcode für 8 besetzte Felder.
 void setStonesFromBitSet(java.util.BitSet[] bitset)
          Setzt die Steinbelegung des Playgrounds entsprechend des übergebenen BitSet-Arrays
 java.lang.String tertiaerString()
          Darstellung des Spielfelds als Tertiär-System 0: Feld leer 1: Weisser Stein 2: Schwarzer Stein
 java.lang.String toString()
          ASCI-Stringausgabe des Playgrounda
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

stones

java.util.BitSet[] stones
speichert die Steinanordnung auf dem Spielfeld in einem BitSet-Array [0] beinhaltet das BitSet (die gesetzten Steine) von Weiss [1] beinhaltet das BitSet (die gesetzten Steine) von Schwarz


actions

java.util.ArrayList actions
speichert die durchgeführten Züge beider Spieler auf dem Spielfeld


zobristTable

int[][] zobristTable
speichert die Zobristkeys zum Generieren des Hashcode in einem 2D Array entsprechend der stones Struktur.

Constructor Detail

Playground

public Playground()
Standard-Konstruktor. Erstellt einen neuen PLayground ohne Steine (also mit Stone.None) an jeder Position.

Since:
20.04.2004
Method Detail

executeProofed

public boolean executeProofed(Action action)
Führt eine beliebige LEGALE Action auf dem Spielfeld aus. Sie überprüft nicht, ob die Action legal ist! Delegiert weiter an spezifische Methoden

Parameters:
action - Die auszuführende Aktion
Returns:
true, falls das Ausführen erfolgreich war.
Since:
20.04.2004

executeProofed

public boolean executeProofed(SetAction action)
Führt eine beliebige LEGALE SetAction auf dem Spielfeld aus. Sie überprüft nicht, ob die Action legal ist!

Parameters:
action - Die auszuführende SetAtion
Returns:
true, falls das Ausführen erfolgreich war.
Since:
20.04.2004

executeProofed

public boolean executeProofed(UndoSetAction action)

executeProofed

public boolean executeProofed(DeleteAction action)
Führt eine beliebige LEGALE DeleteAction auf dem Spielfeld aus. Sie überprüft nicht, ob die DeleteAction legal ist!

Parameters:
action - Die auszuführende DeleteAction
Returns:
true, falls das Ausführen erfolgreich war.
Since:
20.04.2004

executeProofed

public boolean executeProofed(UndoDeleteAction action)

executeProofed

public boolean executeProofed(MoveAction action)
Führt eine beliebige LEGALE MoveAction auf dem Spielfeld aus. Sie überprüft nicht, ob die MoveAction legal ist!

Parameters:
action - Die auszuführende MoveAction
Returns:
true, falls das Ausführen erfolgreich war.
Since:
20.04.2004

execute

public boolean execute(Action action)
Führt eine beliebige Action auf dem Spielfeld aus. Sie überprüft zuvor, ob die Action legal ist! Delegiert weiter an spezifische Methoden

Parameters:
action - Die auszuführende Aktion
Returns:
true, falls die Aktion legal und das Ausführen erfolgreich war.
Since:
20.04.2004

execute

public boolean execute(SetAction action)
Führt eine beliebige SetAction auf dem Spielfeld aus. Sie überprüft zuvor, ob die Action legal ist!

Parameters:
action - Die auszuführende SetAction
Returns:
true, falls die SetAction legal und das Ausführen erfolgreich war.
Since:
20.04.2004

execute

public boolean execute(UndoSetAction action)

execute

public boolean execute(DeleteAction action)
Führt eine beliebige DeleteAction auf dem Spielfeld aus. Sie überprüft zuvor, ob die DeleteAction legal ist!

Parameters:
action - Die auszuführende DeleteAction
Returns:
true, falls die DeleteAction legal und das Ausführen erfolgreich war.
Since:
20.04.2004

execute

public boolean execute(UndoDeleteAction action)

execute

public boolean execute(MoveAction action)
Führt eine beliebige MoveAction auf dem Spielfeld aus. Sie überprüft zuvor, ob die MoveAction legal ist!

Parameters:
action - Die auszuführende MoveAction
Returns:
true, falls die MoveAction legal und das Ausführen erfolgreich war.
Since:
20.04.2004

getStone

public Stone getStone(int p)
Gibt den aktuellen Stein an Position p zurück.

Parameters:
p - Position, die abgefragt wird
Returns:
Stein an Position p
Since:
20.04.2004

isFree

public boolean isFree(int position)

getPlayersStones

public java.util.ArrayList getPlayersStones(Stone stone)
Liefert einen Vector, der die Positionen der Steine eines Typs enthält.

Parameters:
stone - Steintyp, dessen Positionen abgefragt werden
Returns:
Vector, der die Positionen der Steine eines Typs enthält
Since:
20.04.2004

getFreePositions

public java.util.ArrayList getFreePositions()
Liefert einen Vector, der die Positionen der leeren Felder enthält.

Parameters:
stone - Steintyp, dessen Positionen abgefragt werden
Returns:
Vector, der die Positionen der Steine eines Typs enthält
Since:
06.05.2004

getFreePositionBitSet

public java.util.BitSet getFreePositionBitSet()

getPlayersFreeStones

public java.util.ArrayList getPlayersFreeStones(Stone s)
Liefert einen Vector, der die Positionen der Steine eines Typs enthält, die sich NICHT in einer Mühle befinden.

Parameters:
stone - Steintyp, dessen Positionen abgefragt werden
Returns:
Vector, der die Positionen der Steine eines Typs enthält,die sich NICHT in einer Mühle befinden.
Since:
20.04.2004

hasFreeStones

public boolean hasFreeStones(Stone s)
Gibt zurück, ob eine Spieler Steine hat, die sich nicht in einer Mühle befinden

Parameters:
s - Steintyp des Spielers, der überprüft wird.
Returns:
true, falls der Spieler "schmeissbare" Steine besitzt
Since:
20.04.2004

hasActions

public boolean hasActions(Player player)
Gibt zurück, ob eine Spieler Zugmöglichkeiten hat

Parameters:
player - Spieler, der auf Zugmöglichkeiten überprüft wird.
Returns:
true, falls player mindestens eine Zugmöglichkeit besitzt
Since:
20.04.2004

getPlayersActions

public java.util.ArrayList getPlayersActions(Player player)
Gibt alle im Moment möglichen Actions eines Spielers zurück.

Parameters:
player - Spieler, dessern Zugmöglichkeiten abgefragt werden.
Returns:
Vector mit allen Zugmöglichkeiten des Spielers player.
Since:
20.04.2004

getNumberOfPlayersMoveActions

public int getNumberOfPlayersMoveActions(Player player)

isMuehle

public boolean isMuehle(Action action)
Gibt zurück, ob eine Mühle durch action geschlossen wurde.

Parameters:
action - auf dem Playground bereits ausgeführte Action, die auf Schliessen einer Mühle geprüft wird.
Returns:
true, falls durch action eine Mühle auf diesem Playgrounf geschlossen wird
Since:
20.04.2004

getClone

public Playground getClone()
Erstellt eine tiefe Kopie des Spielfeldes

Returns:
Tiefe Kopie des Spielfeldes
Since:
28.04.2004

toString

public java.lang.String toString()
ASCI-Stringausgabe des Playgrounda

Overrides:
toString in class java.lang.Object
Returns:
Spielfeld als ASCI-Graphik

tertiaerString

public java.lang.String tertiaerString()
Darstellung des Spielfelds als Tertiär-System 0: Feld leer 1: Weisser Stein 2: Schwarzer Stein

Returns:

inversTertiaerString

public java.lang.String inversTertiaerString()

appendAction

public void appendAction(Action action)
Fügt eine Aktion dem Aktionsspeicher hinzu

Parameters:
action -

getActions

public java.util.ArrayList getActions()
gibt die gespeicherten Actions zurück

Returns:

countMuehlen

public int[] countMuehlen(Player p)
Zählt die offenen und geschlossenen Mühlene eines Spielers auf dem Spielfeld

Parameters:
p - Player
Returns:
Array mit [0] Anzahl der geschlossenen Mühlen und [1] Anzahl der offenen Mühlen

getSituationValue

public int getSituationValue(Stone s)
Gibt das Heuristik-Feature SituationValue zurück Das ist die Anzahl der potentiellen Zugmöglichkeiten, also die Anzahl der Zugmöglichkeiten, wenn alle Nachbarfelder von eigenen Feldern frei wären.

Parameters:
s - Stein für den das Feature abgerufen wird
Returns:
Anzahl der potentiellen Zugmöglichkeiten

equals

public boolean equals(java.lang.Object o)
Überprüft 2 Playgrounds auf Gleichheit

Overrides:
equals in class java.lang.Object
Parameters:
o - Playground, der auf den aktuellen Playground geprüft werden soll
Returns:
true wenn gleich, sonst false

hashCode

public int hashCode()
Generiert einen 32-bit-Hashcode für den aktuellen Playground. Dies geschieht mit ZobristKeys. Es wird anfangs für jede Stelle auf dem Spielfeld eine 32-bit Zufallszahl geniert Dann wird die Zufallszahl jedes besetzen Feldes von Weiss auf den aktuellen Key XOR genommen. Anschliessen wird die Zufallszahl jedes besetzten Feldes von Schwarz auf den aktuellen Key XOR genommen.

Overrides:
hashCode in class java.lang.Object
Returns:
Hashcode des Playground

perfectHashCode

public int perfectHashCode()
Liefert einen perfekten eindeutigen 32 Bit - Hashcode für 8 besetzte Felder. Die ersten 24 Bit beinhalten die gesetzen Steine auf dem Spielfeld, wobei nach Farbe nicht unterschieden wird. die letzten 8 Bit beinhalten der Reihe nach, ob der jeweils nächste Stein Schwarz oder weiss gehört. 0 = weiss 1 = schwarz

Returns:
perfekter Hashcode

setStonesFromBitSet

public void setStonesFromBitSet(java.util.BitSet[] bitset)
Setzt die Steinbelegung des Playgrounds entsprechend des übergebenen BitSet-Arrays

Parameters:
bitset -

getStones

public java.util.BitSet[] getStones()
Gibt das BitSet-Array in welchen die Steinbelegung des Playgroundsgespeichert ist zurück

Returns:
BitSet-Array mit der Steinbelegung des aktuellen Playgrounds