コード例 #1
0
        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;
        }
コード例 #2
0
 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());
 }