protected override string getBest(DieSet dieSet, ScoreSheet scoreSheet) { string maxCat = ""; double maxScore = -1; int scoreForCat = 0; string[] tokens; string cat; int score; int myState = convertScoredToKey(scoreSheet.GetScored()); int upperScore = scoreSheet.getUpperScore(); int newUpperScore; int newState; double futureExp; Hashtable tableToUse; if (scoreSheet.isYahtzeeScored() & scoreSheet.getYahtzeeScore() > 0) tableToUse = allStatesWithYahtzee; else tableToUse = allStatesNoYahtzee; Hashtable tempTableToUse; List<String> avail = scoreSheet.GetAvailable(dieSet); foreach (string str in avail) { tokens = str.Split(':'); cat = tokens[0]; score = Int32.Parse(tokens[1]); if (cat == "Yahtzee" & score > 0) tempTableToUse = allStatesWithYahtzee; else tempTableToUse = tableToUse; newState = myState + (int)catConversion[cat]; newUpperScore = upperScore; if (scoreSheet.isUpper(cat)) newUpperScore += score; newUpperScore = Math.Min(63, newUpperScore); if (scoreSheet.getYahtzeeScore() > 0 & scoreSheet.isYahtzee(dieSet.getCount())) score += 100; futureExp = (double)((Hashtable)tempTableToUse[newUpperScore])[newState]; if (futureExp + score > maxScore) { maxScore = futureExp + score; maxCat = cat; scoreForCat = score; } } return maxCat+":"+scoreForCat.ToString()+":"+maxScore; }
public void testGetUpperScore() { ScoreSheet scoreSheet = new ScoreSheet(); scoreSheet.setupGame("Yahtzee"); scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 6)); Assert.AreEqual(4, scoreSheet.getUpperScore()); scoreSheet.Score("Chance", new DieSet(1, 1, 1, 1, 6)); Assert.AreEqual(4, scoreSheet.getUpperScore()); scoreSheet.Score("Twos", new DieSet(2, 2, 3, 4, 5)); Assert.AreEqual(8, scoreSheet.getUpperScore()); scoreSheet.Score("Three of a Kind", new DieSet(1, 1, 1, 6, 6)); Assert.AreEqual(8, scoreSheet.getUpperScore()); scoreSheet.Score("Threes", new DieSet(3, 3, 3, 3, 4)); Assert.AreEqual(20, scoreSheet.getUpperScore()); scoreSheet.Score("Four of a Kind", new DieSet(1, 1, 1, 1, 6)); Assert.AreEqual(20, scoreSheet.getUpperScore()); scoreSheet.Score("Fours", new DieSet(4, 4, 4, 6, 1)); Assert.AreEqual(32, scoreSheet.getUpperScore()); scoreSheet.Score("Full House", new DieSet(1, 1, 1, 3, 3)); Assert.AreEqual(32, scoreSheet.getUpperScore()); scoreSheet.Score("Fives", new DieSet(5, 5, 2, 4, 5)); Assert.AreEqual(47, scoreSheet.getUpperScore()); scoreSheet.Score("Small Straight", new DieSet(1, 2, 3, 4, 5)); Assert.AreEqual(47, scoreSheet.getUpperScore()); scoreSheet.Score("Sixes", new DieSet(6, 6, 1, 3, 6)); Assert.AreEqual(65, scoreSheet.getUpperScore()); scoreSheet.Score("Yahtzee", new DieSet(4, 4, 4, 4, 4)); Assert.AreEqual(65, scoreSheet.getUpperScore()); scoreSheet.Score("Large Straight", new DieSet(1, 2, 3, 4, 5)); Assert.AreEqual(65, scoreSheet.getUpperScore()); }