diff --git a/__pycache__/yahtzee.cpython-311.pyc b/__pycache__/yahtzee.cpython-311.pyc index 1af0e20..ac8e705 100644 Binary files a/__pycache__/yahtzee.cpython-311.pyc and b/__pycache__/yahtzee.cpython-311.pyc differ diff --git a/__pycache__/yahtzee_goals.cpython-311.pyc b/__pycache__/yahtzee_goals.cpython-311.pyc index e53a6a0..417cfca 100644 Binary files a/__pycache__/yahtzee_goals.cpython-311.pyc and b/__pycache__/yahtzee_goals.cpython-311.pyc differ diff --git a/play.py b/play.py index a8e683c..df547b9 100644 --- a/play.py +++ b/play.py @@ -3,12 +3,26 @@ from yahtzee_goals import ( GoalOnes, GoalTwos, GoalThrees, + ThreeOfAKind, + FourOfAKind, + FullHouse, + SmallStraight, + LargeStraight, + Yahtzee, + Chance ) goals = [ GoalOnes(), GoalTwos(), GoalThrees(), + ThreeOfAKind(), + FourOfAKind(), + FullHouse(), + SmallStraight(), + LargeStraight(), + Yahtzee(), + Chance() ] game = Yachtzee(goals) diff --git a/yahtzee_goals.py b/yahtzee_goals.py index fce4e5a..cdce267 100644 --- a/yahtzee_goals.py +++ b/yahtzee_goals.py @@ -43,3 +43,238 @@ class GoalThrees: if die.face == 3: total += 3 return total + +class GoalFours: + "Four points for each four" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Fours ({potential_score})" + + def score(self,dice): + total = 0 + for die in dice: + if die.face == 4: + total+= 4 + return total + +class GoalFives: + "Five points for each five" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Fives ({potential_score})" + + def score(self,dice): + total = 0 + for die in dice: + if die.face == 5: + total+= 5 + return total + +class GoalSixes: + "Six points for each Six" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Sixes ({potential_score})" + + def score(self,dice): + total = 0 + for die in dice: + if die.face == 6: + total+= 6 + return total + +class ThreeOfAKind: + "Total of all six dice, if there are at least three of one number" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Three of a Kind ({potential_score})" + + def is_three_of_a_kind(self,dice): + facesList = [] + for die in dice: + facesList += die.face() + facesList.sort() + if facesList[0]==facesList[2]: + return True + elif facesList[1]==facesList[3]: + return True + elif facesList[3]==facesList[5]: + return True + else: + return False + + def score(self,dice): + if self.is_three_of_a_kind(dice): + total = 0 + for die in dice: + if die.face == 6: + total+= 6 + return total + else: + return 0 + +class FourOfAKind: + "Total of all six dice, if there are at least four of one number" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Four of a Kind ({potential_score})" + + def is_four_of_a_kind(self, dice): + facesList = [] + for die in dice: + facesList += die.face() + if facesList[0]==facesList[3]: + return True + elif facesList[1]==facesList[4]: + return True + else: + return False + + def score(self,dice): + if self.is_four_of_a_kind(dice): + total = 0 + for die in dice: + if die.face == 6: + total+= 6 + return total + else: + return 0 + +class FullHouse: + "If there are two of one number and three of another, earn 25 points" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Full House ({potential_score})" + + def is_full_house(self, dice): + facesList = [] + for die in dice: + facesList += die.face() + if facesList[0] == facesList[1] and facesList[2] == facesList[4]: + return True + elif facesList[0] == facesList[2] and facesList[3] == facesList[4]: + return True + else: + return False + + def score(self, dice): + if self.is_full_house(dice): + return 25 + else: + return 0 + + +class SmallStraight: + "If there is any sequence of four numbers, earn 30 points" + used = False + + def prompt(self, dice): + potential_score = self.score(dice) + return f"Small Straight ({potential_score})" + + def is_small_straight(self,dice): + facesList = [] + for die in dice: + facesList += die.face() + count = 0 + for i in range(0,3): + if facesList[i] == facesList[i+1] - 1: + count += 1 + if count >= 4: + return True + else: + return False + + def score(self,dice): + if self.is_small_straight(dice): + return 30 + else: + return 0 + + + +class LargeStraight: + "If there is any sequence of 5 numbers, earn 40 points" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Large Straignt ({potential_score})" + + def is_Large_Straight(self,dice): + facesList = [] + for die in dice: + facesList += die.face() + count = 0 + for i in range(0,3): + if facesList[i] != facesList[i+1] - 1: + count += 1 + if count == 5: + return True + else: + return False + + def score(self,dice): + if self.is_Large_straight(dice): + return 40 + else: + return 0 + +class Chance: + "Total of all 5 dice" + used = False + + def prompt(self,dice): + potential_score = self.score(dice) + return f"Chance ({potential_score})" + + def score(self,dice): + total = 0 + for die in dice: + total += die.face + return total + + +class Yahtzee: + "Six of a Kind 50 points, 100 points for yahtzees after the first" + used = False + + def prompt(self,dice): + + potential_score = self.score(dice) + return f"Yahtzee ({potential_score})" + + def is_yahtzee(self): + facesList = [] + for die in dice: + facesList += die.face() + + if facesList[0] == facesList[4]: + return True + else: + return False + + def score(self,dice): + if self.is_yahtzee(dice) and used == True: + return 100 + elif self.is_yahtzee(dice) and used != True: + return 50 + else: + return 0 + + + + + \ No newline at end of file