summaryrefslogtreecommitdiffstats
path: root/src/jrummikub
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub')
-rw-r--r--src/jrummikub/control/RoundControl.java12
-rw-r--r--src/jrummikub/control/turn/AbstractTurnControl.java22
-rw-r--r--src/jrummikub/control/turn/BaseAIControl.java28
-rw-r--r--src/jrummikub/control/turn/HumanTurnControl.java41
-rw-r--r--src/jrummikub/control/turn/ITurnControl.java23
-rw-r--r--src/jrummikub/control/turn/TurnControlFactory.java2
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();
}