diff options
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r-- | src/jrummikub/control/RoundControl.java | 20 | ||||
-rw-r--r-- | src/jrummikub/control/turn/AbstractTurnControl.java | 8 | ||||
-rw-r--r-- | src/jrummikub/control/turn/BaseAIControl.java | 23 | ||||
-rw-r--r-- | src/jrummikub/control/turn/HumanTurnControl.java | 57 | ||||
-rw-r--r-- | src/jrummikub/control/turn/ITurnControl.java | 17 | ||||
-rw-r--r-- | src/jrummikub/control/turn/TurnControlFactory.java | 8 | ||||
-rw-r--r-- | src/jrummikub/control/turn/TurnMode.java | 13 |
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
+}
|