summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control/turn
diff options
context:
space:
mode:
authorJannis Harder <harder@informatik.uni-luebeck.de>2011-05-30 01:31:32 +0200
committerJannis Harder <harder@informatik.uni-luebeck.de>2011-05-30 01:31:32 +0200
commit15558d7138efbf16a52d49484a6923b03514f453 (patch)
treebdbb4df7864370b5ebcdb2a6a9750799b1a2ada4 /src/jrummikub/control/turn
parentf3f52956f711658f42ef753b7ff46728da67aa54 (diff)
downloadJRummikub-15558d7138efbf16a52d49484a6923b03514f453.tar
JRummikub-15558d7138efbf16a52d49484a6923b03514f453.zip
Implemented dummy AI
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@318 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/turn')
-rw-r--r--src/jrummikub/control/turn/AbstractTurnControl.java7
-rw-r--r--src/jrummikub/control/turn/BaseAIControl.java59
-rw-r--r--src/jrummikub/control/turn/ITurnControl.java5
3 files changed, 64 insertions, 7 deletions
diff --git a/src/jrummikub/control/turn/AbstractTurnControl.java b/src/jrummikub/control/turn/AbstractTurnControl.java
index aeb6241..e493718 100644
--- a/src/jrummikub/control/turn/AbstractTurnControl.java
+++ b/src/jrummikub/control/turn/AbstractTurnControl.java
@@ -1,6 +1,7 @@
package jrummikub.control.turn;
import jrummikub.model.IHand;
+import jrummikub.model.IPlayer;
import jrummikub.model.ITable;
import jrummikub.util.Event;
import jrummikub.util.IEvent;
@@ -13,6 +14,7 @@ public abstract class AbstractTurnControl implements ITurnControl {
protected Event endOfTurnEvent = new Event();
protected Event redealEvent = new Event();
+ protected IPlayer player;
protected IHand hand;
protected ITable table;
protected IView view;
@@ -31,9 +33,10 @@ public abstract class AbstractTurnControl implements ITurnControl {
}
@Override
- public void setup(IHand hand, ITable table, IView view,
+ public void setup(IPlayer player, ITable table, IView view,
boolean inspectOnly, boolean mayRedeal) {
- this.hand = hand;
+ this.player = player;
+ this.hand = player.getHand();
this.table = table;
this.view = view;
this.inspectOnly = inspectOnly;
diff --git a/src/jrummikub/control/turn/BaseAIControl.java b/src/jrummikub/control/turn/BaseAIControl.java
index 98dceb3..2ed4c6e 100644
--- a/src/jrummikub/control/turn/BaseAIControl.java
+++ b/src/jrummikub/control/turn/BaseAIControl.java
@@ -1,21 +1,74 @@
package jrummikub.control.turn;
+import java.util.Date;
+
+import javax.swing.SwingUtilities;
+
import jrummikub.model.IHand;
import jrummikub.model.ITable;
import jrummikub.view.IView;
public class BaseAIControl extends AbstractTurnControl {
-
+ long startTime;
@Override
public void startTurn() {
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ compute();
+ }
+ });
+ startTime = System.currentTimeMillis();
+ thread.start();
+
+ }
+
+ private void compute() {
if (mayRedeal) {
- redealEvent.emit();
+ emitRedeal();
} else {
- endOfTurnEvent.emit();
+ if (player.getLaidOut()) {
+ layOut();
+ } else {
+ emitEndOfTurn();
+ }
}
}
+ private void layOut() {
+ emitEndOfTurn();
+ }
+
+ private void emitRedeal() {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ redealEvent.emit();
+ }
+ });
+ }
+
+ private void emitEndOfTurn() {
+ long timeElapsed = System.currentTimeMillis() - startTime;
+ long waitTime = 2000 - timeElapsed;
+
+ if (waitTime > 0) {
+ try {
+ Thread.sleep(waitTime);
+ } catch (InterruptedException e) {
+ // This shouldn't happen
+ }
+ }
+
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ endOfTurnEvent.emit();
+ }
+ });
+ }
+
static public TurnControlFactory getFactory() {
return new TurnControlFactory() {
@Override
diff --git a/src/jrummikub/control/turn/ITurnControl.java b/src/jrummikub/control/turn/ITurnControl.java
index 80e2b27..061cddd 100644
--- a/src/jrummikub/control/turn/ITurnControl.java
+++ b/src/jrummikub/control/turn/ITurnControl.java
@@ -1,6 +1,7 @@
package jrummikub.control.turn;
import jrummikub.model.IHand;
+import jrummikub.model.IPlayer;
import jrummikub.model.ITable;
import jrummikub.util.Event;
import jrummikub.util.IEvent;
@@ -21,8 +22,8 @@ public interface ITurnControl {
* @param mayRedeal
* true when the current player may decide to redeal
*/
- public abstract void setup(IHand hand, ITable table, IView view,
- boolean inspectOnly, boolean mayRedeal);
+ public void setup(IPlayer player, ITable table, IView view,
+ boolean inspectOnly, boolean mayRedeal);
/**
* Get the event that is emitted when the turn is over