diff options
author | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-05-30 01:31:32 +0200 |
---|---|---|
committer | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-05-30 01:31:32 +0200 |
commit | 15558d7138efbf16a52d49484a6923b03514f453 (patch) | |
tree | bdbb4df7864370b5ebcdb2a6a9750799b1a2ada4 /src/jrummikub/control/turn | |
parent | f3f52956f711658f42ef753b7ff46728da67aa54 (diff) | |
download | JRummikub-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.java | 7 | ||||
-rw-r--r-- | src/jrummikub/control/turn/BaseAIControl.java | 59 | ||||
-rw-r--r-- | src/jrummikub/control/turn/ITurnControl.java | 5 |
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 |