Exemplo n.º 1
0
 public void testAlreadyBeenScored()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 1));
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 1));
 }
        public void testGREEDY3()
        {
            // GREEDY2
            GreedyAIStrategy greedy = new GreedyAIStrategy();
            ScoreSheet scoreSheet = new ScoreSheet();
            scoreSheet.setupGame("Yahtzee");

            DieSet dieSet = new DieSet(6, 6, 6, 6, 6);
            string cat = greedy.chooseCategory(dieSet, scoreSheet);
            scoreSheet.Score(cat, dieSet);

            // GREEDY3
            dieSet = new DieSet(2, 2, 2, 2, 4);
            cat = greedy.chooseCategory(dieSet, scoreSheet);
            Assert.AreEqual("Twos", cat);
            scoreSheet.Score(cat, dieSet);
            Assert.AreEqual(58, scoreSheet.CurrentScore());
        }
Exemplo n.º 3
0
 public void testBonus()
 {
     // bonus of 35 points if 63 points are scored in the upper categories (corresponds to 3 each of the numbers)
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     Assert.IsTrue(scoreSheet.Bonus == 0);
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 2, 3));
     Assert.IsTrue(scoreSheet.Bonus == 0);
     scoreSheet.Score("Twos", new DieSet(2, 2, 2, 3, 4));
     Assert.IsTrue(scoreSheet.Bonus == 0);
     scoreSheet.Score("Threes", new DieSet(3, 3, 3, 4, 5));
     Assert.IsTrue(scoreSheet.Bonus == 0);
     scoreSheet.Score("Fours", new DieSet(4, 4, 4, 5, 6));
     Assert.IsTrue(scoreSheet.Bonus == 0);
     scoreSheet.Score("Fives", new DieSet(5, 5, 5, 6, 1));
     Assert.IsTrue(scoreSheet.Bonus == 0);
     scoreSheet.Score("Sixes", new DieSet(6, 6, 6, 1, 2));
     Assert.IsTrue(scoreSheet.Bonus == 35);
     Assert.IsTrue(scoreSheet.CurrentScore() == 98);
 }
        public void testGREEDY6()
        {
            // GREEDY2
            AIStrategy greedy = new GreedyAIStrategy();
            ScoreSheet scoreSheet = new ScoreSheet();
            scoreSheet.setupGame("Yahtzee");

            DieSet dieSet = new DieSet(6, 6, 6, 6, 6);
            string cat = greedy.chooseCategory(dieSet, scoreSheet);
            scoreSheet.Score(cat, dieSet);

            // GREEDY3
            dieSet = new DieSet(2, 2, 2, 2, 4);
            cat = greedy.chooseCategory(dieSet, scoreSheet);
            scoreSheet.Score(cat, dieSet);

            // GREEDY4
            dieSet = new DieSet(6, 6, 6, 6, 5);
            cat = greedy.chooseCategory(dieSet, scoreSheet);
            scoreSheet.Score(cat, dieSet);

            // GREEDY5
            dieSet = new DieSet(5, 5, 5, 5, 5);
            cat = greedy.chooseCategory(dieSet, scoreSheet);
            scoreSheet.Score(cat, dieSet);

            // GREEDY6
            dieSet = new DieSet(6, 6, 6, 6, 6);
            cat = greedy.chooseCategory(dieSet, scoreSheet);
            Assert.AreEqual("Large Straight", cat);
            scoreSheet.Score(cat, dieSet);
            Assert.AreEqual(347, scoreSheet.CurrentScore());
        }
Exemplo n.º 5
0
 public void testGetScore()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     Assert.AreEqual(0, scoreSheet.getScore("Aces"));
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 1));
     Assert.AreEqual(5, scoreSheet.getScore("Aces"));
 }
Exemplo n.º 6
0
 public void testGetLowerScore()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 6));
     Assert.AreEqual(0, scoreSheet.getLowerScore());
     scoreSheet.Score("Chance", new DieSet(1, 1, 1, 1, 6));
     Assert.AreEqual(10, scoreSheet.getLowerScore());
     scoreSheet.Score("Twos", new DieSet(2, 2, 3, 4, 5));
     Assert.AreEqual(10, scoreSheet.getLowerScore());
     scoreSheet.Score("Three of a Kind", new DieSet(1, 1, 1, 6, 6));
     Assert.AreEqual(25, scoreSheet.getLowerScore());
     scoreSheet.Score("Threes", new DieSet(3, 3, 3, 3, 4));
     Assert.AreEqual(25, scoreSheet.getLowerScore());
     scoreSheet.Score("Four of a Kind", new DieSet(1, 1, 1, 1, 6));
     Assert.AreEqual(35, scoreSheet.getLowerScore());
     scoreSheet.Score("Fours", new DieSet(4, 4, 4, 6, 1));
     Assert.AreEqual(35, scoreSheet.getLowerScore());
     scoreSheet.Score("Full House", new DieSet(1, 1, 1, 3, 3));
     Assert.AreEqual(60, scoreSheet.getLowerScore());
     scoreSheet.Score("Fives", new DieSet(5, 5, 2, 4, 5));
     Assert.AreEqual(60, scoreSheet.getLowerScore());
     scoreSheet.Score("Small Straight", new DieSet(1, 2, 3, 4, 5));
     Assert.AreEqual(90, scoreSheet.getLowerScore());
     scoreSheet.Score("Sixes", new DieSet(6, 6, 1, 3, 6));
     Assert.AreEqual(90, scoreSheet.getLowerScore());
     scoreSheet.Score("Yahtzee", new DieSet(4, 4, 4, 4, 4));
     Assert.AreEqual(140, scoreSheet.getLowerScore());
     scoreSheet.Score("Large Straight", new DieSet(1, 2, 3, 4, 5));
     Assert.AreEqual(180, scoreSheet.getLowerScore());
 }
Exemplo n.º 7
0
 public void testSecondYahtzeeNoBonus()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     Assert.IsTrue(scoreSheet.ExtraYahtzees == 0);
     scoreSheet.Score("Yahtzee", new DieSet(6, 6, 6, 6, 5));
     Assert.IsTrue(scoreSheet.ExtraYahtzees == 0);
     Assert.IsTrue(scoreSheet.CurrentScore() == 00);
     scoreSheet.Score("Sixes", new DieSet(6, 6, 6, 6, 6));
     Assert.IsTrue(scoreSheet.ExtraYahtzees == 0);
     Assert.IsTrue(scoreSheet.CurrentScore() == 30);
 }
Exemplo n.º 8
0
        public void testScoreSheetPrintTotals()
        {
            ScoreSheet scoreSheet = new ScoreSheet();
            scoreSheet.setupGame("Yahtzee");
            List<ScoringCategory> cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(0, cats[6].FinalScore);
            Assert.AreEqual(0, cats[7].FinalScore);
            Assert.AreEqual(0, cats[15].FinalScore);
            Assert.AreEqual(0, cats[16].FinalScore);
            Assert.AreEqual(0, cats[17].FinalScore);

            scoreSheet.Score("Sixes", new DieSet(6, 6, 6, 6, 5));
            cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(24, cats[6].FinalScore);
            Assert.AreEqual(0, cats[7].FinalScore);
            Assert.AreEqual(0, cats[15].FinalScore);
            Assert.AreEqual(0, cats[16].FinalScore);
            Assert.AreEqual(24, cats[17].FinalScore);

            scoreSheet.Score("Fives", new DieSet(5, 5, 5, 5, 6));
            cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(44, cats[6].FinalScore);
            Assert.AreEqual(0, cats[7].FinalScore);
            Assert.AreEqual(0, cats[15].FinalScore);
            Assert.AreEqual(0, cats[16].FinalScore);
            Assert.AreEqual(44, cats[17].FinalScore);

            scoreSheet.Score("Fours", new DieSet(4, 4, 4, 4, 6));
            cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(60, cats[6].FinalScore);
            Assert.AreEqual(0, cats[7].FinalScore);
            Assert.AreEqual(0, cats[15].FinalScore);
            Assert.AreEqual(0, cats[16].FinalScore);
            Assert.AreEqual(60, cats[17].FinalScore);

            scoreSheet.Score("Threes", new DieSet(3, 3, 3, 3, 6));
            cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(72, cats[6].FinalScore);
            Assert.AreEqual(35, cats[7].FinalScore);
            Assert.AreEqual(0, cats[15].FinalScore);
            Assert.AreEqual(0, cats[16].FinalScore);
            Assert.AreEqual(107, cats[17].FinalScore);

            scoreSheet.Score("Yahtzee", new DieSet(1, 1, 1, 1, 1));
            cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(72, cats[6].FinalScore);
            Assert.AreEqual(35, cats[7].FinalScore);
            Assert.AreEqual(50, cats[15].FinalScore);
            Assert.AreEqual(0, cats[16].FinalScore);
            Assert.AreEqual(157, cats[17].FinalScore);

            scoreSheet.Score("Large Straight", new DieSet(6, 6, 6, 6, 6));
            cats = scoreSheet.printScoreSheet();
            Assert.AreEqual(72, cats[6].FinalScore);
            Assert.AreEqual(35, cats[7].FinalScore);
            Assert.AreEqual(90, cats[15].FinalScore);
            Assert.AreEqual(100, cats[16].FinalScore);
            Assert.AreEqual(297, cats[17].FinalScore);
        }
Exemplo n.º 9
0
 public void testInvalidCategory()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Does Not Exist", new DieSet(1, 1, 1, 1, 1));
 }
Exemplo n.º 10
0
 public void testJokerRulesNoLowerAvail()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Yahtzee", new DieSet(6, 6, 6, 6, 6));
     Assert.IsTrue(scoreSheet.CurrentScore() == 50);
     scoreSheet.Score("Sixes", new DieSet(6, 1, 1, 1, 1));
     Assert.IsTrue(scoreSheet.CurrentScore() == 56);
     scoreSheet.Score("Three of a Kind", new DieSet(1, 1, 1, 4, 5));
     Assert.IsTrue(scoreSheet.CurrentScore() == 68);
     scoreSheet.Score("Four of a Kind", new DieSet(2, 2, 2, 2, 6));
     Assert.AreEqual(82, scoreSheet.CurrentScore());
     scoreSheet.Score("Full House", new DieSet(1, 1, 1, 2, 2));
     Assert.AreEqual(107, scoreSheet.CurrentScore());
     scoreSheet.Score("Small Straight", new DieSet(1, 2, 3, 4, 6));
     Assert.AreEqual(137, scoreSheet.CurrentScore());
     scoreSheet.Score("Large Straight", new DieSet(1, 2, 3, 4, 5));
     Assert.AreEqual(177, scoreSheet.CurrentScore());
     scoreSheet.Score("Chance", new DieSet(5, 5, 5, 2, 3));
     Assert.AreEqual(197, scoreSheet.CurrentScore());
     List<String> avail = scoreSheet.GetAvailable(new DieSet(6, 6, 6, 6, 6));
     Assert.IsTrue(avail.Count == 5);
     Assert.Contains("Aces:0", avail);
     Assert.Contains("Twos:0", avail);
     Assert.Contains("Threes:0", avail);
     Assert.Contains("Fours:0", avail);
     Assert.Contains("Fives:0", avail);
     scoreSheet.Score("Aces", new DieSet(6, 6, 6, 6, 6));
     Assert.AreEqual(297, scoreSheet.CurrentScore());
 }
Exemplo n.º 11
0
 public void testJokerRulesLowerCats()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Yahtzee", new DieSet(6, 6, 6, 6, 6));
     Assert.IsTrue(scoreSheet.CurrentScore() == 50);
     scoreSheet.Score("Sixes", new DieSet(6, 1, 1, 1, 1));
     Assert.IsTrue(scoreSheet.CurrentScore() == 56);
     List<String> avail = scoreSheet.GetAvailable(new DieSet(6, 6, 6, 6, 6));
     Assert.IsTrue(avail.Count == 6);
     Assert.Contains("Three of a Kind:30", avail);
     Assert.Contains("Four of a Kind:30", avail);
     Assert.Contains("Full House:25", avail);
     Assert.Contains("Small Straight:30", avail);
     Assert.Contains("Large Straight:40", avail);
     Assert.Contains("Chance:30", avail);
     scoreSheet.Score("Large Straight", new DieSet(6, 6, 6, 6, 6));
     Assert.AreEqual(196, scoreSheet.CurrentScore());
 }
Exemplo n.º 12
0
 public void testJokerRulesForceNumberCat()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Yahtzee", new DieSet(6, 6, 6, 6, 6));
     List<String> avail = scoreSheet.GetAvailable(new DieSet(6, 6, 6, 6, 6));
     Assert.IsTrue(avail.Count == 1);
     Assert.Contains("Sixes:30", avail);
 }
Exemplo n.º 13
0
 public void testJokerRulesException()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Yahtzee", new DieSet(6, 6, 6, 6, 6));
     scoreSheet.Score("Chance", new DieSet(1, 1, 1, 1, 1));
 }
Exemplo n.º 14
0
 public void testIsScored()
 {
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     Assert.AreEqual(false, scoreSheet.isScored("Aces"));
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 1));
     Assert.AreEqual(true, scoreSheet.isScored("Aces"));
 }
Exemplo n.º 15
0
 public void testNoAvailCats()
 {
     GreedyAIStrategy greedy = new GreedyAIStrategy();
     ScoreSheet scoreSheet = new ScoreSheet();
     scoreSheet.setupGame("Yahtzee");
     scoreSheet.Score("Aces", new DieSet(1, 1, 1, 1, 2));
     scoreSheet.Score("Twos", new DieSet(2, 2, 2, 2, 3));
     scoreSheet.Score("Threes", new DieSet(3, 3, 3, 3, 4));
     scoreSheet.Score("Fours", new DieSet(4, 4, 4, 4, 5));
     scoreSheet.Score("Fives", new DieSet(5, 5, 5, 5, 6));
     scoreSheet.Score("Sixes", new DieSet(6, 6, 6, 6, 1));
     scoreSheet.Score("Three of a Kind", new DieSet(6, 6, 6, 5, 4));
     scoreSheet.Score("Four of a Kind", new DieSet(5, 6, 6, 6, 6));
     scoreSheet.Score("Full House", new DieSet(1, 1, 1, 2, 2));
     scoreSheet.Score("Small Straight", new DieSet(1, 2, 3, 4, 6));
     scoreSheet.Score("Large Straight", new DieSet(1, 2, 3, 4, 5));
     scoreSheet.Score("Yahtzee", new DieSet(1, 1, 1, 1, 1));
     scoreSheet.Score("Chance", new DieSet(6, 6, 5, 5, 4));
     greedy.chooseCategory(new DieSet(1, 2, 2, 3, 4), scoreSheet);
 }
Exemplo n.º 16
0
        public void testScore()
        {
            ScoreSheet scoreSheet = new ScoreSheet();
            scoreSheet.setupGame("Yahtzee");
            int score;

            // score ones
            DieSet dieSet = new DieSet(1, 1, 1, 1, 1);
            score = scoreSheet.Score("Aces", dieSet);
            Assert.IsTrue(score == 5);
            Assert.IsTrue(scoreSheet.CurrentScore() == 5);
            // confirm Ones are scored
            List<String> scored = scoreSheet.GetScored();
            Assert.IsTrue(scored.Count == 1);
            Assert.Contains("Aces:5", scored);
            // confirm Ones are no longer available
            List<String> available = scoreSheet.GetAvailable();
            Assert.IsTrue(available.Count == 12);
            Assert.IsFalse(available.Contains("Aces"));

            // score twos
            dieSet = new DieSet(2, 2, 2, 2, 2);
            score = scoreSheet.Score("Twos", dieSet);
            Assert.IsTrue(score == 10);
            Assert.IsTrue(scoreSheet.CurrentScore() == 15);
            // confirm Ones, Twos are scored
            scored = scoreSheet.GetScored();
            Assert.IsTrue(scored.Count == 2);
            Assert.Contains("Aces:5", scored);
            Assert.Contains("Twos:10", scored);
            // confirm Ones, Twos are no longer available
            available = scoreSheet.GetAvailable();
            Assert.IsTrue(available.Count == 11);
            Assert.IsFalse(available.Contains("Aces"));
            Assert.IsFalse(available.Contains("Twos"));

            // score threes
            dieSet = new DieSet(3, 3, 3, 3, 3);
            score = scoreSheet.Score("Threes", dieSet);
            Assert.IsTrue(score == 15);
            Assert.IsTrue(scoreSheet.CurrentScore() == 30);
            // confirm Ones, Twos, Threes are scored
            scored = scoreSheet.GetScored();
            Assert.IsTrue(scored.Count == 3);
            Assert.Contains("Aces:5", scored);
            Assert.Contains("Twos:10", scored);
            Assert.Contains("Threes:15", scored);
            // confirm Ones, Twos, Thress are no longer available
            available = scoreSheet.GetAvailable();
            Assert.IsTrue(available.Count == 10);
            Assert.IsFalse(available.Contains("Aces"));
            Assert.IsFalse(available.Contains("Twos"));
            Assert.IsFalse(available.Contains("Threes"));
        }
        public void testOptimalSampleGame2()
        {
            OptimalAIStrategy optimal = new OptimalAIStrategy();
            ScoreSheet scoreSheet = new ScoreSheet();
            scoreSheet.setupGame("Yahtzee");
            DieSet dieSet;

            // Sample Game #2 from _Advantage Yahtzee_
            // Hand 1
            dieSet = new DieSet(1, 1, 2, 3, 6);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsFalse(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[1].Value = 3;
            dieSet.Dice[2].Value = 3;
            dieSet.Dice[3].Value = 6;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[1].Value = 2;
            dieSet.Dice[2].Value = 4;
            Assert.AreEqual("Aces", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Aces", dieSet);
            Assert.AreEqual(1, scoreSheet.CurrentScore());

            // Hand 2
            dieSet = new DieSet(1, 2, 2, 2, 3);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 6;
            dieSet.Dice[4].Value = 6;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsTrue(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            Assert.AreEqual("Full House", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Full House", dieSet);
            Assert.AreEqual(26, scoreSheet.CurrentScore());

            // Hand 3
            dieSet = new DieSet(2, 3, 5, 6, 6);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[1].Value = 2;
            dieSet.Dice[2].Value = 6;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[1].Value = 1;
            Assert.AreEqual("Sixes", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Sixes", dieSet);
            Assert.AreEqual(44, scoreSheet.CurrentScore());

            // Hand 4
            dieSet = new DieSet(3, 3, 4, 4, 5);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[1].Value = 5;
            dieSet.Dice[4].Value = 5;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsFalse(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[2].Value = 5;
            dieSet.Dice[3].Value = 6;
            Assert.AreEqual("Fives", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Fives", dieSet);
            Assert.AreEqual(59, scoreSheet.CurrentScore());

            // Hand 5
            dieSet = new DieSet(1, 2, 3, 6, 6);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 3;
            dieSet.Dice[1].Value = 3;
            dieSet.Dice[2].Value = 5;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[1].Value = 5;
            Assert.AreEqual("Chance", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Chance", dieSet);
            Assert.AreEqual(83, scoreSheet.CurrentScore());

            // Hand 6
            dieSet = new DieSet(1, 2, 3, 5, 6);
            optimal.reroll(dieSet, 2, scoreSheet);
            //Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            //Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            //Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            //Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            //Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[4].Value = 6;
            optimal.reroll(dieSet, 1, scoreSheet);
            //Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            //Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            //Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            //Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            //Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 4;
            dieSet.Dice[4].Value = 6;
            Assert.AreEqual("Large Straight", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Large Straight", dieSet);
            Assert.AreEqual(123, scoreSheet.CurrentScore());

            // Hand 7
            dieSet = new DieSet(1, 2, 2, 4, 5);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsFalse(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[3].Value = 1;
            dieSet.Dice[4].Value = 2;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsFalse(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 4;
            dieSet.Dice[3].Value = 5;
            Assert.AreEqual("Twos", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Twos", dieSet);
            Assert.AreEqual(129, scoreSheet.CurrentScore());

            // Hand 8
            dieSet = new DieSet(5, 5, 6, 6, 6);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[1].Value = 4;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[1].Value = 4;
            Assert.AreEqual("Three of a Kind", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Three of a Kind", dieSet);
            Assert.AreEqual(153, scoreSheet.CurrentScore());

            // Hand 9
            dieSet = new DieSet(1, 3, 4, 5, 5);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsFalse(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[3].Value = 3;
            dieSet.Dice[4].Value = 6;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[2].Value = 4;
            dieSet.Dice[4].Value = 5;
            Assert.AreEqual("Yahtzee", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Yahtzee", dieSet);
            Assert.AreEqual(153, scoreSheet.CurrentScore());

            // Hand 10
            dieSet = new DieSet(1, 2, 2, 3, 5);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 1;
            dieSet.Dice[1].Value = 1;
            dieSet.Dice[2].Value = 4;
            dieSet.Dice[4].Value = 6;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[1].Value = 4;
            dieSet.Dice[4].Value = 6;
            Assert.AreEqual("Fours", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Fours", dieSet);
            Assert.AreEqual(161, scoreSheet.CurrentScore());

            // Hand 11
            dieSet = new DieSet(2, 3, 4, 5, 6);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsTrue(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsTrue(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            Assert.AreEqual("Small Straight", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Small Straight", dieSet);
            Assert.AreEqual(191, scoreSheet.CurrentScore());

            // Hand 12
            dieSet = new DieSet(1, 1, 2, 3, 5);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsFalse(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 2;
            dieSet.Dice[1].Value = 3;
            dieSet.Dice[2].Value = 4;
            dieSet.Dice[4].Value = 5;
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsFalse(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsFalse(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsFalse(dieSet.Dice[4].IsFrozen);
            dieSet.Dice[0].Value = 4;
            dieSet.Dice[2].Value = 5;
            dieSet.Dice[4].Value = 6;
            Assert.AreEqual("Threes", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Threes", dieSet);
            Assert.AreEqual(197, scoreSheet.CurrentScore());

            // Hand 13
            dieSet = new DieSet(2, 2, 2, 2, 5);
            optimal.reroll(dieSet, 2, scoreSheet);
            Assert.IsTrue(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            optimal.reroll(dieSet, 1, scoreSheet);
            Assert.IsTrue(dieSet.Dice[0].IsFrozen);
            Assert.IsTrue(dieSet.Dice[1].IsFrozen);
            Assert.IsTrue(dieSet.Dice[2].IsFrozen);
            Assert.IsTrue(dieSet.Dice[3].IsFrozen);
            Assert.IsTrue(dieSet.Dice[4].IsFrozen);
            Assert.AreEqual("Four of a Kind", optimal.chooseCategory(dieSet, scoreSheet));
            scoreSheet.Score("Four of a Kind", dieSet);
            Assert.AreEqual(210, scoreSheet.CurrentScore());
        }