diff options
author | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-06-17 22:12:41 +0200 |
---|---|---|
committer | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-06-17 22:12:41 +0200 |
commit | 47bf19036e049787fa7742f5ff72a08a0c9e887c (patch) | |
tree | 0858aef8cc91af311a1c8505d69411d116da83ba /src/jrummikub/control/turn/BaseAIControl.java | |
parent | a07e723242da4fbdd00cee2d86a46f4db70bc87a (diff) | |
download | JRummikub-47bf19036e049787fa7742f5ff72a08a0c9e887c.tar JRummikub-47bf19036e049787fa7742f5ff72a08a0c9e887c.zip |
Use new AI for computer players
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@448 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/turn/BaseAIControl.java')
-rw-r--r-- | src/jrummikub/control/turn/BaseAIControl.java | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/src/jrummikub/control/turn/BaseAIControl.java b/src/jrummikub/control/turn/BaseAIControl.java deleted file mode 100644 index 11519c3..0000000 --- a/src/jrummikub/control/turn/BaseAIControl.java +++ /dev/null @@ -1,174 +0,0 @@ -package jrummikub.control.turn; - -import java.util.ArrayList; -import java.util.List; -import java.util.TreeMap; - -import javax.swing.SwingUtilities; - -import jrummikub.control.AIUtil; -import jrummikub.model.Position; -import jrummikub.model.Stone; -import jrummikub.model.StoneColor; -import jrummikub.model.StoneSet; -import jrummikub.util.Pair; - -/** - * Base class for AI players - * - */ -public class BaseAIControl extends AbstractTurnControl { - private long startTime; - private Thread computeThread; - - private volatile boolean stopRunning = false; - - @Override - public void startTurn() { - computeThread = new Thread(new Runnable() { - @Override - public void run() { - compute(); - } - }); - startTime = System.currentTimeMillis(); - - timer.startTimer(); - computeThread.start(); - } - - protected void timeOut() { - cleanUp(); - endOfTurnEvent.emit(); - } - - protected void cleanUp() { - super.cleanUp(); - stopRunning = true; - } - - private void compute() { - switch (turnInfo.getTurnMode()) { - case MAY_REDEAL: - emitRedeal(); - break; - case INSPECT_ONLY: - emitEndOfTurn(); - break; - case NORMAL_TURN: - turn(); - break; - } - } - - private Stone findMatchingStone(Stone target) { - for (Pair<Stone, Position> entry : turnInfo.getHand()) { - Stone stone = entry.getFirst(); - if (stone.getValue() == target.getValue() - && stone.getColor() == target.getColor()) { - return stone; - } - } - for (Pair<Stone, Position> entry : turnInfo.getHand()) { - Stone stone = entry.getFirst(); - if (stone.isJoker()) { - return stone; - } - } - return null; - } - - private Stone pickUpMatchingStone(Stone target) { - Stone match = findMatchingStone(target); - turnInfo.getHand().pickUp(match); - return match; - } - - private void turn() { - List<Stone> stones = new ArrayList<Stone>(); - - for (Pair<Stone, Position> entry : turnInfo.getHand()) { - stones.add(entry.getFirst()); - } - - Pair<TreeMap<Pair<Integer, StoneColor>, Integer>, Integer> counts = AIUtil - .countStones(stones); - - AIUtil aiUtil = new AIUtil(settings); - - Pair<List<StoneSet>, Integer> result = aiUtil.findSetsWithTotalPoints( - Math.max(30, settings.getInitialMeldThreshold() * 2), - counts.getFirst(), counts.getSecond()); - - if (!turnInfo.getLaidOut() - && result.getSecond() < settings.getInitialMeldThreshold()) { - emitEndOfTurn(); - return; - } - - for (StoneSet set : result.getFirst()) { - List<Stone> handStones = new ArrayList<Stone>(); - for (Stone stone : set) { - handStones.add(pickUpMatchingStone(stone)); - } - turnInfo.getTable().drop( - new StoneSet(handStones), - new Position((float) Math.random() * 30 - 15, - (float) Math.random() * 6 - 3)); - } - - emitEndOfTurn(); - } - - private void emitRedeal() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - if (!stopRunning) { - cleanUp(); - redealEvent.emit(); - } - } - }); - } - - private void emitEndOfTurn() { - long timeElapsed = System.currentTimeMillis() - startTime; - long timeNeeded = Math.min((long) (1000 + Math.random() - * turnInfo.getHand().getSize() * 100), 50000); - long waitTime = timeNeeded - timeElapsed; - - if (waitTime > 0) { - try { - Thread.sleep(waitTime); - } catch (InterruptedException e) { - // This shouldn't happen - } - } - - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - if (!stopRunning) { - cleanUp(); - endOfTurnEvent.emit(); - } - } - }); - } - - /** - * Get the factory for the base AI control - * - * @return the factory - */ - static public TurnControlFactory getFactory() { - return new TurnControlFactory() { - @Override - public ITurnControl create() { - return new BaseAIControl(); - } - }; - } - -} |