Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. from random import shuffle, choice, seed
  2.  
  3. # Code that defines objects
  4. values = range(1, 14)
  5. kinds = ['hearts', 'diamonds', 'spades', 'clubs']
  6.  
  7.  
  8. class Card:
  9. def __init__(self, value, kind):
  10. self.value = value
  11. self.kind = kind
  12.  
  13. def __str__(self):
  14. return '{} of {}'.format(self.value, self.kind)
  15.  
  16. def __lt__(self, other):
  17. return self.value < other.value
  18.  
  19. def __gt__(self, other):
  20. return self.value > other.value
  21.  
  22. def __eq__(self, other):
  23. return self.value == other.value
  24.  
  25. def getValue(self):
  26. return self.value
  27.  
  28. def getKind(self):
  29. return self.kind
  30.  
  31.  
  32. class Deck:
  33. def __init__(self, shuffle=False):
  34. self.deck = [Card(value, kind) for value in range(1, 14) for kind in kinds]
  35.  
  36. if shuffle:
  37. self.shuffle()
  38.  
  39. def __str__(self):
  40. deck_list = ''
  41. for card in self.deck:
  42. deck_list += '{}\n'.format(card)
  43. return deck_list
  44.  
  45. def getSize(self):
  46. return len(self.deck)
  47.  
  48. def draw(self):
  49. return self.deck.pop()
  50.  
  51. def shuffle(self):
  52. shuffle(self.deck)
  53.  
  54.  
  55. class Player:
  56. def __init__(self, deck, type='naive'):
  57. self.deck = deck
  58. self.hand = list()
  59. self.type = type
  60. self.opponents = list()
  61. self.score = 0
  62.  
  63. def setOpponents(self, players):
  64. for player in players:
  65. if player != self:
  66. self.opponents.append(player)
  67.  
  68. def draw(self):
  69. if self.deck.getSize() > 0:
  70. self.hand.append(self.deck.draw())
  71. return self.hand[-1]
  72. else:
  73. return None
  74.  
  75. def check(self, new_card):
  76. count = 0
  77. for card in self.hand:
  78. if card.getValue() == new_card.getValue():
  79. count += 1
  80. if count == 4:
  81. self.score += 1
  82. for card in list(self.hand):
  83. if card.getValue() == new_card.getValue():
  84. self.removeCard(card)
  85. return card.getValue()
  86. else:
  87. return None
  88.  
  89. def play(self):
  90. if len(self.hand) == 0:
  91. return None
  92.  
  93. if self.type == 'naive':
  94. return Option(choice(self.hand), choice(self.opponents))
  95.  
  96. def getScore(self):
  97. return self.score
  98.  
  99. def getHand(self):
  100. return self.hand
  101.  
  102. def removeCard(self, card):
  103. return self.hand.remove(card)
  104.  
  105. def addCard(self, card):
  106. self.hand.append(card)
  107.  
  108. def hasValue(self, card):
  109. value = card.getValue()
  110. for card in self.hand:
  111. if card.getValue() == value:
  112. return True
  113. return False
  114.  
  115. def __str__(self):
  116. hand_list = ''
  117. for card in self.hand:
  118. hand_list += '{}\n'.format(card)
  119. return '{}score={}\n'.format(hand_list, self.getScore())
  120.  
  121.  
  122. class Option:
  123. def __init__(self, card, player):
  124. self.card = card
  125. self.player = player
  126.  
  127. def __str__(self):
  128. return '{}'.format(self.card)
  129.  
  130. def getCard(self):
  131. return self.card
  132.  
  133. def getPlayer(self):
  134. return self.player
  135.  
  136.  
  137. class Game:
  138. def __init__(self, players=('naive', 'naive')):
  139. self.deck = Deck(shuffle=True)
  140. self.players = list()
  141. self.flag = 0
  142. self.quads = list()
  143.  
  144. for type in players:
  145. self.players.append(Player(self.deck, type))
  146.  
  147. for i in range(1, 8):
  148. for player in self.players:
  149. drawn_card = player.draw()
  150. player.check(drawn_card)
  151.  
  152. for player in self.players:
  153. player.setOpponents(self.players)
  154.  
  155. def play(self):
  156. cPlayer = self.players[self.flag]
  157. option = cPlayer.play()
  158. if option is not None:
  159. opponent = option.getPlayer()
  160. shown_card = option.getCard()
  161. if opponent.hasValue(shown_card):
  162. for card in list(opponent.getHand()):
  163. if shown_card.getValue == card.getValue:
  164. cPlayer.addCard(card)
  165. opponent.removeCard(card)
  166. check_value = cPlayer.check(shown_card)
  167. if check_value is not None:
  168. self.quads.append(check_value)
  169. else:
  170. check_value = cPlayer.check(cPlayer.draw())
  171. if check_value is not None:
  172. self.quads.append(check_value)
  173. else:
  174. check_value = cPlayer.check(cPlayer.draw())
  175. if check_value is not None:
  176. self.quads.append(check_value)
  177. self.incrementFlag()
  178. return self.check()
  179.  
  180. def check(self):
  181. if len(self.quads) == 13:
  182. return True
  183. else:
  184. return False
  185.  
  186. def incrementFlag(self):
  187. self.flag = (self.flag + 1) % len(self.players)
  188.  
  189. def __str__(self):
  190. player_list = ''
  191. for player in self.players:
  192. player_list += '{}\n'.format(player)
  193. return player_list
  194.  
  195.  
  196. game = Game()
  197.  
  198. while True:
  199. if game.play():
  200. break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement