Advertisement
tomophilia

python poker game

Apr 20th, 2018
491
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.98 KB | None | 0 0
  1.  
  2. import collections
  3. from random import choice,shuffle
  4.  
  5. Card = collections.namedtuple('Card',['rank','suit'])
  6.  
  7. class FrenchDeck():
  8.     ranks = [str(n) for n in range(2,11)] +list('JQKA')
  9.     suits = 'spades diamonds clubs hearts'.split()
  10.     def __init__(self):
  11.         self.cards = [Card(rank,suit) for suit in self.suits
  12.                                       for rank in self.ranks]
  13.     def __len__(self):
  14.         return len(self.cards)
  15.     def __getitem__(self,position):
  16.         return self.cards[position]
  17.    
  18. deck = list(FrenchDeck())
  19. class Player():
  20.     '''Create a player and deal a random hand.'''
  21.     def __init__(self,name,hand,bankroll):
  22.         self.name = name
  23.         self.hand = hand
  24.         self.bankroll = bankroll
  25.     def holding(self,hand):
  26.         return rank_the_hand(self.hand)
  27.  
  28. def deal_a_hand(dadeck,howmanycards):
  29.     hand = []
  30.     '''Deal a random hand of n length and remove those cards from the deck.'''
  31.     for i in range(howmanycards):
  32.         z = choice(dadeck)
  33.         hand.append(z)
  34.         dadeck.remove(z)
  35.     return hand
  36.  
  37.  
  38. def rank_the_hand(cards):
  39.     wheel = [14,5,4,3,2]
  40.     straight_id = [14,13,12,11,10,9,8,7,6,5,4,3,2,1]
  41.     Flush = False
  42.     Straight = False
  43.     '''Final_hand variable returns the hand type i.e. straight flush(8), quads(7) or full house(6) etc. As well as a second list to store other info.  '''
  44.     final_hand = [0,[]]
  45.     '''List of card ranks - Ace, King, 7, 3, 7 etc. (No suits) '''
  46.     card_ranks = [card.rank for card in cards]
  47.     '''List of card suits.'''
  48.     card_suits = [card.suit for card in cards]
  49.     if len(list(set(card_suits))) == 1:
  50.         Flush = True
  51.     '''Convert the ranks to numbers.'''
  52.     for i in range(len(card_ranks)):
  53.         try:
  54.             card_ranks[i] = int(card_ranks[i])
  55.         except:
  56.             if card_ranks[i] == 'J':
  57.                 card_ranks[i] = 11
  58.             elif card_ranks[i] == 'Q':
  59.                 card_ranks[i] = 12
  60.             elif card_ranks[i] == 'K':
  61.                 card_ranks[i] = 13
  62.             elif card_ranks[i]== 'A':
  63.                 card_ranks[i] = 14
  64.     card_ranks = sorted(card_ranks,reverse=True)
  65.     bernanners = collections.Counter(card_ranks)
  66.     counts = bernanners.most_common(3)
  67.    
  68.     if len(set(card_ranks))==2:
  69.         '''Four of a Kind. '''
  70.         if counts[0][1]==4:
  71.             final_hand[0]=7
  72.             final_hand[1].append(counts[0][0])
  73.         else:
  74.             '''Full House. '''
  75.             final_hand[0] = 6
  76.             final_hand[1].append(counts[0][0])
  77.    
  78.    
  79.     elif len(set(card_ranks))==3:
  80.        
  81.         if counts[0][1]==3:
  82.             print('''Three of a Kind. ''')
  83.             final_hand[0] = 3
  84.             final_hand[1].append(counts[0][0])
  85.             final_hand[1].append(card_ranks[3])
  86.             final_hand[1].append(card_ranks[4])
  87.            
  88.         else:
  89.             print('''Two Pair''')
  90.             final_hand[0] = 2
  91.             final_hand[1].append(counts[1][0])
  92.             final_hand[1].append(counts[0][0])
  93.             final_hand[1] = sorted(final_hand[1],reverse=True)
  94.             final_hand[1].append(counts[2][0])
  95.          
  96.          
  97.          
  98.        
  99.        
  100.     elif len(list(set(card_ranks)))==4:
  101.         '''One Pair.'''
  102.         print('One Pair')
  103.         final_hand[0] = 1
  104.         final_hand[1].append(card_ranks[0])
  105.         final_hand[1].append(card_ranks[2])
  106.         final_hand[1].append(card_ranks[3])
  107.         final_hand[1].append(card_ranks[4])
  108.        
  109.        
  110.        
  111.     else:
  112.         '''Nothing, Straight, Flush or, Straight Flush.  '''
  113.         '''card_ranks[0] - card_ranks[4]'''
  114.         for i in range(len(straight_id)):
  115.             if straight_id[i:i+5]==card_ranks or card_ranks==wheel:
  116.                 Straight=True
  117.             else:
  118.                 continue
  119.        
  120.         if Flush == True and Straight==True:
  121.             print('Straight Flush')
  122.             final_hand[0] = 8
  123.             if card_ranks==wheel:
  124.                 final_hand[1].append(card_ranks[1])
  125.                
  126.                
  127.             else:
  128.                 final_hand[1].append(card_ranks[0])
  129.            
  130.         else:
  131.             if Flush == True:
  132.                 print('''Flush''')
  133.                 final_hand[0] = 5
  134.                 final_hand[1].append(card_ranks[0])
  135.                 final_hand[1].append(card_ranks[1])
  136.                 final_hand[1].append(card_ranks[2])
  137.                 final_hand[1].append(card_ranks[3])
  138.                 final_hand[1].append(card_ranks[4])
  139.             elif Straight==True:
  140.                 print("""Straight""")
  141.                 final_hand[0] = 4
  142.                 if card_ranks==wheel:
  143.                     final_hand[1].append(card_ranks[1])
  144.                
  145.                
  146.                 else:
  147.                     final_hand[1].append(card_ranks[0])
  148.             else:
  149.                 '''Interpret the high card.  '''
  150.                 print('High Card')
  151.                 final_hand[0] = 0
  152.                 final_hand[1].append(card_ranks[0])
  153.                 final_hand[1].append(card_ranks[1])
  154.                 final_hand[1].append(card_ranks[2])
  155.                 final_hand[1].append(card_ranks[3])
  156.                 final_hand[1].append(card_ranks[4])
  157.     return final_hand
  158.        
  159. def winner(p1,p2):
  160.     print('Lets see all hands, please. ')
  161.     if p1[0]>p2[0]:
  162.         return p1
  163.     elif p2[0]>p1[0]:
  164.         return p2
  165.     else:
  166.         for i in range(len(p1[1])):
  167.             if p1[1][i]>p2[1][i]:
  168.                 return p1
  169.             else:
  170.                 return p2
  171.  
  172.  
  173. def players_eval(showdown):
  174.     '''Takes a list of players in Class form and returns a winner. '''
  175.     players_hands = [i.hand for i in showdown]
  176.     for i in range(len(players_hands)):
  177.         print(winner(players_hands[i],players_hands[i+1]))
  178.         return winner(players_hands[i],players_hands[i+1])
  179. shuffle(deck)          
  180.  
  181. steelwheel = rank_the_hand([Card(rank='6', suit='clubs'), Card(rank='5', suit='hearts'), Card(rank='4', suit='hearts'), Card(rank='2', suit='hearts'), Card(rank='A', suit='hearts')])      
  182. fourofakind = rank_the_hand([Card(rank='A', suit='clubs'), Card(rank='A', suit='hearts'), Card(rank='A', suit='spades'), Card(rank='A', suit='diamonds'), Card(rank='2', suit='hearts')])      
  183. fullhouse = rank_the_hand([Card(rank='Q', suit='clubs'), Card(rank='Q', suit='hearts'), Card(rank='Q', suit='diamonds'), Card(rank='2', suit='spades'), Card(rank='2', suit='hearts')])  
  184. flush = rank_the_hand([Card(rank='K', suit='hearts'), Card(rank='5', suit='hearts'), Card(rank='4', suit='hearts'), Card(rank='2', suit='hearts'), Card(rank='7', suit='hearts')])  
  185.  
  186.  
  187.  
  188. Rocky = Player('Rocky', deal_a_hand(deck,5),100)
  189. Todd = Player('Todd', deal_a_hand(deck,5),100)
  190. Dave = Player('Dave', deal_a_hand(deck,5),100)
  191. Myrna = Player('Myrna', deal_a_hand(deck,5),100)
  192. Tom = Player('Tom', deal_a_hand(deck,5),100)
  193. Larry = Player('Larry',deal_a_hand(deck,5),100)
  194.  
  195. players = [Rocky, Todd, Dave, Myrna, Tom, Larry]
  196. print(winner(fourofakind,fullhouse))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement