diff options
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r-- | src/jrummikub/control/RoundControl.java | 12 | ||||
-rw-r--r-- | src/jrummikub/control/turn/AbstractTurnControl.java | 22 | ||||
-rw-r--r-- | src/jrummikub/control/turn/BaseAIControl.java | 28 | ||||
-rw-r--r-- | src/jrummikub/control/turn/HumanTurnControl.java | 41 | ||||
-rw-r--r-- | src/jrummikub/control/turn/ITurnControl.java | 23 | ||||
-rw-r--r-- | src/jrummikub/control/turn/TurnControlFactory.java | 2 |
6 files changed, 81 insertions, 47 deletions
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java index 671086f..1dcd5e8 100644 --- a/src/jrummikub/control/RoundControl.java +++ b/src/jrummikub/control/RoundControl.java @@ -95,14 +95,11 @@ public class RoundControl { view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal); - ITurnControl turnControl = roundState - .getActivePlayer() - .getPlayerSettings() - .getTurnControlFactory() - .create(roundState.getActivePlayer().getHand(), clonedTable, - view, inspectOnly); + ITurnControl turnControl = roundState.getActivePlayer() + .getPlayerSettings().getTurnControlFactory().create(); + turnControl.setup(roundState.getActivePlayer().getHand(), clonedTable, + view, inspectOnly, mayRedeal); turnControl.getEndOfTurnEvent().add(new IListener() { - @Override public void handle() { endOfTurn(); @@ -115,7 +112,6 @@ public class RoundControl { redeal(); } }); - turnControl.startTurn(); } diff --git a/src/jrummikub/control/turn/AbstractTurnControl.java b/src/jrummikub/control/turn/AbstractTurnControl.java index 9e3b069..aeb6241 100644 --- a/src/jrummikub/control/turn/AbstractTurnControl.java +++ b/src/jrummikub/control/turn/AbstractTurnControl.java @@ -1,7 +1,10 @@ package jrummikub.control.turn; +import jrummikub.model.IHand; +import jrummikub.model.ITable; import jrummikub.util.Event; import jrummikub.util.IEvent; +import jrummikub.view.IView; /** * Abstract base class for TurnControls @@ -10,9 +13,12 @@ public abstract class AbstractTurnControl implements ITurnControl { protected Event endOfTurnEvent = new Event(); protected Event redealEvent = new Event(); - - @Override - public abstract void startTurn(); + protected IHand hand; + protected ITable table; + protected IView view; + protected boolean inspectOnly; + protected boolean mayRedeal; + @Override public IEvent getEndOfTurnEvent() { @@ -23,5 +29,15 @@ public abstract class AbstractTurnControl implements ITurnControl { public Event getRedealEvent() { return redealEvent; } + + @Override + public void setup(IHand hand, ITable table, IView view, + boolean inspectOnly, boolean mayRedeal) { + this.hand = hand; + this.table = table; + this.view = view; + this.inspectOnly = inspectOnly; + this.mayRedeal = mayRedeal; + } }
\ No newline at end of file diff --git a/src/jrummikub/control/turn/BaseAIControl.java b/src/jrummikub/control/turn/BaseAIControl.java new file mode 100644 index 0000000..98dceb3 --- /dev/null +++ b/src/jrummikub/control/turn/BaseAIControl.java @@ -0,0 +1,28 @@ +package jrummikub.control.turn; + +import jrummikub.model.IHand; +import jrummikub.model.ITable; +import jrummikub.view.IView; + + +public class BaseAIControl extends AbstractTurnControl { + + @Override + public void startTurn() { + if (mayRedeal) { + redealEvent.emit(); + } else { + endOfTurnEvent.emit(); + } + } + + static public TurnControlFactory getFactory() { + return new TurnControlFactory() { + @Override + public ITurnControl create() { + return new BaseAIControl(); + } + }; + } + +} diff --git a/src/jrummikub/control/turn/HumanTurnControl.java b/src/jrummikub/control/turn/HumanTurnControl.java index 399f547..6dc055a 100644 --- a/src/jrummikub/control/turn/HumanTurnControl.java +++ b/src/jrummikub/control/turn/HumanTurnControl.java @@ -26,37 +26,16 @@ import jrummikub.view.IView; * Controller for a single turn made by a human player */ public class HumanTurnControl extends AbstractTurnControl { - private IHand hand; - private ITable table; private ITurnTimer timer; - private IView view; private List<Stone> selectedStones = new ArrayList<Stone>(); private List<Connection> connections = new ArrayList<Connection>(); - private boolean inspectOnly; - /** - * Create a new TurnControl using a given hand (of the active player), a - * given table and a given view for user interaction. - * - * @param hand - * active player's hand - * @param table - * current table - * @param view - * view for user interaction. - * @param inspectOnly - * the current turn doesn't allow any table manipulation + * Create a new human player's turn control */ - public HumanTurnControl(IHand hand, ITable table, IView view, - boolean inspectOnly) { - this.hand = hand; - this.table = table; - this.view = view; - this.inspectOnly = inspectOnly; - this.timer = new TurnTimer(view); + public HumanTurnControl() { } /** @@ -67,25 +46,22 @@ public class HumanTurnControl extends AbstractTurnControl { public static TurnControlFactory getFactory() { return new TurnControlFactory() { @Override - public ITurnControl create(IHand hand, ITable table, IView view, - boolean inspectOnly) { - return new HumanTurnControl(hand, table, view, inspectOnly); + public ITurnControl create() { + return new HumanTurnControl(); } }; } /** Test only constructor **/ - HumanTurnControl(IHand hand, ITable table, IView view, ITurnTimer testTimer) { - this.hand = hand; - this.table = table; - this.view = view; + HumanTurnControl(ITurnTimer testTimer) { this.timer = testTimer; - this.inspectOnly = false; } @Override public void startTurn() { - + if (this.timer == null) { + this.timer = new TurnTimer(view); + } IListener endOfTurnListener = new IListener() { @Override @@ -565,5 +541,4 @@ public class HumanTurnControl extends AbstractTurnControl { } } } - } diff --git a/src/jrummikub/control/turn/ITurnControl.java b/src/jrummikub/control/turn/ITurnControl.java index 8c80b1f..80e2b27 100644 --- a/src/jrummikub/control/turn/ITurnControl.java +++ b/src/jrummikub/control/turn/ITurnControl.java @@ -1,14 +1,28 @@ package jrummikub.control.turn; +import jrummikub.model.IHand; +import jrummikub.model.ITable; import jrummikub.util.Event; import jrummikub.util.IEvent; +import jrummikub.view.IView; public interface ITurnControl { - /** * Start the turn + * + * @param hand + * active player's hand + * @param 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 */ - public abstract void startTurn(); + public abstract void setup(IHand hand, ITable table, IView view, + boolean inspectOnly, boolean mayRedeal); /** * Get the event that is emitted when the turn is over @@ -24,4 +38,9 @@ public interface ITurnControl { */ public abstract Event getRedealEvent(); + /** + * Start the turn + */ + public abstract void startTurn(); + }
\ No newline at end of file diff --git a/src/jrummikub/control/turn/TurnControlFactory.java b/src/jrummikub/control/turn/TurnControlFactory.java index 3af910b..48c028e 100644 --- a/src/jrummikub/control/turn/TurnControlFactory.java +++ b/src/jrummikub/control/turn/TurnControlFactory.java @@ -5,5 +5,5 @@ import jrummikub.model.ITable; import jrummikub.view.IView; public interface TurnControlFactory { - public ITurnControl create(IHand hand, ITable table, IView view, boolean inspectOnly); + public ITurnControl create(); } |