In the previous section, I talked about how our strong foundation was letting me write code very easily as I expanded my implementation. I need one last piece of foundational code in my hand class. For the Three of a Kind, Four of a Kind, and Chance rolls, the score for the rolls is the total of all dice in the hand. It seems like if I implement one more simple method to count the total of the individual dice in the hand, I’ll have a very solid foundation. Because of the way we have modeled the SimpleHand
, this is a very simple method to write also (especially if we remember that our actual hand is represented as a list of the individual dice in the hand:
class YahtzeeHand(SimpleHand): ... def get_hand_total_score(self): return sum(self.hand)
I’ve also updated my unit tests for the YahtzeeHand
class as follows:
class TestYahtzeeHand(TestCase): def test_large_straight(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([2, 1, 5, 4, 3]) self.assertTrue(h.is_large_straight()) h._force_new([2, 1, 6, 4, 3]) self.assertFalse(h.is_large_straight()) def test_small_straight(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([2, 1, 5, 4, 3]) self.assertTrue(h.is_small_straight()) h._force_new([2, 1, 6, 4, 3]) self.assertTrue(h.is_small_straight()) h._force_new([1, 2, 3, 5, 6]) self.assertFalse(h.is_small_straight()) h._force_new([1, 2, 3, 3, 4]) self.assertTrue(h.is_small_straight()) def test_full_house(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([1, 1, 5, 5, 5]) self.assertTrue(h.is_full_house()) h._force_new([2, 3, 2, 3, 2]) self.assertTrue(h.is_full_house()) h._force_new([1, 2, 3, 5, 6]) self.assertFalse(h.is_full_house()) h._force_new([1, 1, 3, 3, 4]) self.assertFalse(h.is_full_house()) def test_is_four_of_a_kind(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([1, 5, 5, 5, 5]) self.assertTrue(h.is_four_of_a_kind()) h._force_new([1, 1, 5, 5, 5]) self.assertFalse(h.is_four_of_a_kind()) h._force_new([5, 1, 5, 5, 5]) self.assertTrue(h.is_four_of_a_kind()) def test_is_triple(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([1, 5, 5, 5, 5]) self.assertTrue(h.is_triple()) h._force_new([5, 1, 1, 5, 5]) self.assertTrue(h.is_triple()) h._force_new([5, 1, 5, 2, 3]) self.assertFalse(h.is_triple()) def test_is_yahtzee(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([5, 5, 5, 5, 5]) self.assertTrue(h.is_yahtzee()) h._force_new([5, 1, 5, 5, 5]) self.assertFalse(h.is_yahtzee()) h._force_new([5, 1, 5, 2, 3]) self.assertFalse(h.is_yahtzee()) def test_get_score_for_number(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([1, 1, 2, 3, 2]) self.assertEqual(2, h.get_score_for_number(1)) self.assertEqual(0, h.get_score_for_number(5)) self.assertEqual(4, h.get_score_for_number(2)) def test_get_hand_total_score(self): h = YahtzeeHand(seed=TEST_SEED) h._force_new([1, 1, 2, 3, 2]) self.assertEqual(9, h.get_hand_total_score())
Now I think I’ve got what I need to put together a simple scoring mechanism… and that will get me close to the point where I can actually write a game!