From d276b03c395e7c0e44740174168c0d98a8eaa06c Mon Sep 17 00:00:00 2001 From: Bennet Gerlach Date: Tue, 31 May 2011 03:45:32 +0200 Subject: AIUtil now needs game settings, both hand and player do not anymore git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@342 72836036-5685-4462-b002-a69064685172 --- src/jrummikub/control/AIUtil.java | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'src/jrummikub/control/AIUtil.java') diff --git a/src/jrummikub/control/AIUtil.java b/src/jrummikub/control/AIUtil.java index bf6a078..1501483 100644 --- a/src/jrummikub/control/AIUtil.java +++ b/src/jrummikub/control/AIUtil.java @@ -7,18 +7,33 @@ import java.util.Comparator; import java.util.List; import java.util.TreeMap; +import jrummikub.model.GameSettings; import jrummikub.model.Stone; import jrummikub.model.StoneColor; import jrummikub.model.StoneSet; import jrummikub.util.Pair; /** - * A collection of several AI utility methods + * A collection of several AI utility methods with given game settings * */ public class AIUtil { - private AIUtil() { + GameSettings settings; + List stoneColors; + + /** + * The utility class's methods calculate their results based on the game + * settings + * + * @param settings + * the underlying game settings + */ + public AIUtil(GameSettings settings) { + this.settings = settings; + + stoneColors = new ArrayList(Arrays.asList(StoneColor.values())); + stoneColors.retainAll(settings.getStoneColors()); } private static class SearchState { @@ -47,7 +62,7 @@ public class AIUtil { * @return the sets that have the desired point total or the highest found */ @SuppressWarnings("unchecked") - public static Pair, Integer> findSetsWithTotalPoints( + public Pair, Integer> findSetsWithTotalPoints( int pointsMissing, TreeMap, Integer> stoneCounts, int jokerCount) { @@ -63,14 +78,13 @@ public class AIUtil { bestResult = new Pair, Integer>( Collections. emptyList(), 0); - for (int value = 13; value >= 1; value--) { - for (StoneColor color : StoneColor.values()) { + for (int value = settings.getHighestValue(); value >= 1; value--) { + for (StoneColor color : stoneColors) { Pair stone = new Pair(value, color); if (stoneCounts.containsKey(stone)) { decrementStoneCount(stoneCounts, stone); - result = findRunsWithTotalPoints(new SearchState(pointsMissing - value, stoneCounts, jokerCount), stone, 1); if (result.getSecond() >= pointsMissing) @@ -109,7 +123,7 @@ public class AIUtil { return bestResult; } - private static Pair, Integer> findGroupsWithTotalPoints( + private Pair, Integer> findGroupsWithTotalPoints( SearchState searchState, int value, List chosenColors, StoneColor testedColor) { @@ -175,7 +189,7 @@ public class AIUtil { return bestResult; } - private static Pair, Integer> findRunsWithTotalPoints( + private Pair, Integer> findRunsWithTotalPoints( SearchState searchState, Pair testedStone, int runLength) { @@ -262,12 +276,12 @@ public class AIUtil { } } - static StoneColor getNextColor(StoneColor color) { - int index = Arrays.binarySearch(StoneColor.values(), color) + 1; - if (index >= StoneColor.values().length) { + StoneColor getNextColor(StoneColor color) { + int index = stoneColors.indexOf(color) + 1; + if (index >= stoneColors.size()) { return null; } - return StoneColor.values()[index]; + return stoneColors.get(index); } private final static Comparator> comparator = new Comparator>() { -- cgit v1.2.3