summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r--src/jrummikub/control/RoundControl.java20
-rw-r--r--src/jrummikub/control/turn/AbstractTurnControl.java8
-rw-r--r--src/jrummikub/control/turn/BaseAIControl.java23
-rw-r--r--src/jrummikub/control/turn/HumanTurnControl.java57
-rw-r--r--src/jrummikub/control/turn/ITurnControl.java17
-rw-r--r--src/jrummikub/control/turn/TurnControlFactory.java8
-rw-r--r--src/jrummikub/control/turn/TurnMode.java13
7 files changed, 88 insertions, 58 deletions
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java
index 86f8e05..4819aad 100644
--- a/src/jrummikub/control/RoundControl.java
+++ b/src/jrummikub/control/RoundControl.java
@@ -9,6 +9,7 @@ import java.util.Set;
import jrummikub.control.turn.ITurnControl;
import jrummikub.control.turn.TurnControlFactory;
+import jrummikub.control.turn.TurnMode;
import jrummikub.model.Hand;
import jrummikub.model.IHand;
import jrummikub.model.IPlayer;
@@ -103,19 +104,24 @@ public class RoundControl {
return;
boolean isHuman = roundState.getActivePlayer().getPlayerSettings()
.getTurnControlType() == HUMAN;
- boolean inspectOnly = roundState.getTurnNumber() < 1;
- boolean mayRedeal = inspectOnly
- && roundState.getActivePlayer().getHand().getIdenticalStoneCount() >= 3;
+
+ TurnMode turnMode = TurnMode.NORMAL_TURN;
+
+ if (roundState.getTurnNumber() < 1) {
+ turnMode = TurnMode.INSPECT_ONLY;
+ if (roundState.getActivePlayer().getHand().getIdenticalStoneCount() >= 3) {
+ turnMode = TurnMode.MAY_REDEAL;
+ }
+ }
if (isHuman) {
- view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal);
+ view.getPlayerPanel().setEndTurnMode(turnMode);
}
turnControl = TurnControlFactory.getFactory(
roundState.getActivePlayer().getPlayerSettings().getTurnControlType())
.create();
- turnControl
- .setup(roundState.getGameSettings(), roundState.getActivePlayer(),
- clonedTable, view, inspectOnly, mayRedeal);
+ turnControl.setup(roundState.getGameSettings(),
+ roundState.getActivePlayer(), clonedTable, view, turnMode);
turnControl.getEndOfTurnEvent().add(new IListener() {
@Override
public void handle() {
diff --git a/src/jrummikub/control/turn/AbstractTurnControl.java b/src/jrummikub/control/turn/AbstractTurnControl.java
index 3c89708..688e147 100644
--- a/src/jrummikub/control/turn/AbstractTurnControl.java
+++ b/src/jrummikub/control/turn/AbstractTurnControl.java
@@ -20,8 +20,7 @@ public abstract class AbstractTurnControl implements ITurnControl {
protected IHand hand;
protected ITable table;
protected IView view;
- protected boolean inspectOnly;
- protected boolean mayRedeal;
+ protected TurnMode turnMode;
@Override
public IEvent getEndOfTurnEvent() {
@@ -35,14 +34,13 @@ public abstract class AbstractTurnControl implements ITurnControl {
@Override
public void setup(GameSettings settings, IPlayer player, ITable table,
- IView view, boolean inspectOnly, boolean mayRedeal) {
+ IView view, TurnMode turnMode) {
this.settings = settings;
this.player = player;
this.hand = player.getHand();
this.table = table;
this.view = view;
- this.inspectOnly = inspectOnly;
- this.mayRedeal = mayRedeal;
+ this.turnMode = turnMode;
}
} \ No newline at end of file
diff --git a/src/jrummikub/control/turn/BaseAIControl.java b/src/jrummikub/control/turn/BaseAIControl.java
index b02c127..3c48341 100644
--- a/src/jrummikub/control/turn/BaseAIControl.java
+++ b/src/jrummikub/control/turn/BaseAIControl.java
@@ -63,14 +63,16 @@ public class BaseAIControl extends AbstractTurnControl {
}
private void compute() {
- if (inspectOnly) {
- if (mayRedeal) {
- emitRedeal();
- } else {
- emitEndOfTurn();
- }
- } else {
+ switch (turnMode) {
+ case MAY_REDEAL:
+ emitRedeal();
+ break;
+ case INSPECT_ONLY:
+ emitEndOfTurn();
+ break;
+ case NORMAL_TURN:
turn();
+ break;
}
}
@@ -124,7 +126,8 @@ public class BaseAIControl extends AbstractTurnControl {
for (Stone stone : set) {
handStones.add(pickUpMatchingStone(stone));
}
- table.drop(new StoneSet(handStones), new Position((float)Math.random() * 30 - 15, (float)Math.random() * 6 - 3));
+ table.drop(new StoneSet(handStones), new Position(
+ (float) Math.random() * 30 - 15, (float) Math.random() * 6 - 3));
}
emitEndOfTurn();
@@ -144,8 +147,8 @@ public class BaseAIControl extends AbstractTurnControl {
private void emitEndOfTurn() {
long timeElapsed = System.currentTimeMillis() - startTime;
- long timeNeeded = Math.min(
- (long) (1000 + Math.random() * hand.getSize() * 100), 50000);
+ long timeNeeded = Math.min((long) (1000 + Math.random() * hand.getSize()
+ * 100), 50000);
long waitTime = timeNeeded - timeElapsed;
if (waitTime > 0) {
diff --git a/src/jrummikub/control/turn/HumanTurnControl.java b/src/jrummikub/control/turn/HumanTurnControl.java
index d7f7721..55b17f2 100644
--- a/src/jrummikub/control/turn/HumanTurnControl.java
+++ b/src/jrummikub/control/turn/HumanTurnControl.java
@@ -60,32 +60,23 @@ public class HumanTurnControl extends AbstractTurnControl {
if (this.timer == null) {
this.timer = new TurnTimer(view);
}
- IListener endOfTurnListener = new IListener() {
+
+ connections.add(timer.getTimeRunOutEvent().add(new IListener() {
@Override
public void handle() {
endOfTurn(false);
}
- };
- connections.add(timer.getTimeRunOutEvent().add(endOfTurnListener));
- connections.add(view.getPlayerPanel().getEndTurnEvent()
- .add(endOfTurnListener));
-
- connections.add(view.getPlayerPanel().getRedealEvent()
- .add(new IListener() {
- @Override
- public void handle() {
- endOfTurn(true);
- }
- }));
+ }));
+ addButtonHandlers();
addHandPanelHandlers();
addStoneCollectionHandlers();
- if (!inspectOnly)
- addTablePanelHandlers();
-
- addListeners();
+ if (turnMode == TurnMode.NORMAL_TURN) {
+ addTablePanelHandlers();
+ }
+
view.getHandPanel().setStones(hand.clone());
view.getHandPanel().resetCurrentRow();
view.setBottomPanel(BottomPanelType.HUMAN_HAND_PANEL);
@@ -93,7 +84,7 @@ public class HumanTurnControl extends AbstractTurnControl {
timer.startTimer();
}
- private void addListeners() {
+ private void addButtonHandlers() {
connections.add(view.getPlayerPanel().getSortByGroupsEvent()
.add(new IListener() {
@Override
@@ -109,6 +100,22 @@ public class HumanTurnControl extends AbstractTurnControl {
sortByRuns();
}
}));
+
+ connections.add(view.getPlayerPanel().getEndTurnEvent()
+ .add(new IListener() {
+
+ @Override
+ public void handle() {
+ endOfTurn(false);
+ }
+ }));
+
+ connections.add(view.getPlayerPanel().getRedealEvent().add(new IListener() {
+ @Override
+ public void handle() {
+ endOfTurn(true);
+ }
+ }));
}
private void addHandPanelHandlers() {
@@ -425,12 +432,15 @@ public class HumanTurnControl extends AbstractTurnControl {
table.drop(joinedSet, newPos);
} else {
StoneSet joinedSet = new StoneSet(selectedStones).join(newSet);
- table.drop(joinedSet, new Position(newPos.getX()
- - selectedStones.size(), newPos.getY()));
+ table.drop(joinedSet,
+ new Position(newPos.getX() - selectedStones.size(), newPos.getY()));
}
} else {
- table.drop(new StoneSet(selectedStones), new Position(pos.getX()
- + (set.size() - selectedStones.size()) * 0.5f, pos.getY()));
+ table.drop(
+ new StoneSet(selectedStones),
+ new Position(
+ pos.getX() + (set.size() - selectedStones.size()) * 0.5f, pos
+ .getY()));
}
selectedStones.clear();
@@ -525,8 +535,7 @@ public class HumanTurnControl extends AbstractTurnControl {
static class HandStonePositionComparator implements
Comparator<Pair<Stone, Position>> {
@Override
- public int compare(Pair<Stone, Position> pair1,
- Pair<Stone, Position> pair2) {
+ public int compare(Pair<Stone, Position> pair1, Pair<Stone, Position> pair2) {
Position pos1 = pair1.getSecond(), pos2 = pair2.getSecond();
if (pos1.getY() < pos2.getY()) {
return -1;
diff --git a/src/jrummikub/control/turn/ITurnControl.java b/src/jrummikub/control/turn/ITurnControl.java
index 4616070..edf1e4d 100644
--- a/src/jrummikub/control/turn/ITurnControl.java
+++ b/src/jrummikub/control/turn/ITurnControl.java
@@ -11,26 +11,23 @@ import jrummikub.view.IView;
* Interface containing shared methods of human and computer turn control
*
*/
-// TODO zu viele parameter
public interface ITurnControl {
/**
* Start the turn
*
* @param settings
- * the game settings
+ * the game settings
* @param player
- * the active player
+ * the active player
* @param table
- * current table
+ * current table
* @param view
- * view for user interaction.
- * @param inspectOnly
- * the current turn doesn't allow any table manipulation
- * @param mayRedeal
- * true when the current player may decide to redeal
+ * view for user interaction.
+ * @param turnMode
+ * whether it is turn zero and if one may redeal
*/
public void setup(GameSettings settings, IPlayer player, ITable table,
- IView view, boolean inspectOnly, boolean mayRedeal);
+ IView view, TurnMode turnMode);
/**
* Get the event that is emitted when the turn is over
diff --git a/src/jrummikub/control/turn/TurnControlFactory.java b/src/jrummikub/control/turn/TurnControlFactory.java
index 4474763..95396aa 100644
--- a/src/jrummikub/control/turn/TurnControlFactory.java
+++ b/src/jrummikub/control/turn/TurnControlFactory.java
@@ -16,14 +16,18 @@ public abstract class TurnControlFactory {
COMPUTER
};
-
+ /**
+ * Creates a new turn control instance
+ *
+ * @return the turn control
+ */
public abstract ITurnControl create();
/**
* returns the turn control factory for the specified type
*
* @param type
- * Human or Computer
+ * Human or Computer
* @return TurnControlFactory for the player kind
*/
static public TurnControlFactory getFactory(Type type) {
diff --git a/src/jrummikub/control/turn/TurnMode.java b/src/jrummikub/control/turn/TurnMode.java
new file mode 100644
index 0000000..550c1f7
--- /dev/null
+++ b/src/jrummikub/control/turn/TurnMode.java
@@ -0,0 +1,13 @@
+package jrummikub.control.turn;
+
+/**
+ * Different kinds of turns
+ */
+public enum TurnMode {
+ /** Turn zero with possibility to redeal */
+ MAY_REDEAL,
+ /** Turn zero without possibility to redeal */
+ INSPECT_ONLY,
+ /** A normal turn */
+ NORMAL_TURN
+}