class GoalOnes: "One point for each one" used = False def prompt(self, dice): potential_score = self.score(dice) return f"Ones ({potential_score})" def score(self, dice): total = 0 for die in dice: if die.face == 1: total += 1 return total class GoalTwos: "Two points for each two" used = False def prompt(self, dice): potential_score = self.score(dice) return f"Twos ({potential_score})" def score(self, dice): total = 0 for die in dice: if die.face == 2: total += 2 return total class GoalThrees: "Three points for each three" used = False def prompt(self, dice): potential_score = self.score(dice) return f"Threes ({potential_score})" def score(self, dice): total = 0 for die in dice: 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