diff options
Diffstat (limited to 'src/jrummikub/control/turn/BaseAIControl.java')
-rw-r--r-- | src/jrummikub/control/turn/BaseAIControl.java | 59 |
1 files changed, 56 insertions, 3 deletions
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 |