Advertisement
Guest User

Untitled

a guest
Jan 12th, 2017
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.76 KB | None | 0 0
  1. import itertools, random, sys, math
  2. #from Tkinter import *
  3. from random import randint
  4.  
  5.  
  6. def game():
  7.     gRound = 0
  8.     quit = False
  9.     reset = False
  10.     print "Welcome to texas holdem!"
  11.     while quit == False:
  12.         print "You are on round: " + str(gRound)
  13.         if gRound == 0 or reset == True:
  14.             setupGame()
  15.             gRound = 0
  16.         CardPile().reset()
  17.         getCards()
  18.         print "Congratulations " + playGame() + ", you won!"
  19.         print "The score is: AI: " + str(ai.score) + " | " + str(human.score) + " :HUMAN"
  20.         gRound = gRound + 1
  21.         if raw_input("Would you like to reset the game? (y/n):") == 'y':
  22.             reset = True
  23.         else:
  24.             reset = False
  25.         if raw_input("Would you like to quit the game? (y/n):") == 'y':
  26.             quit = True
  27.         else:
  28.             quit = False
  29.     sys.exit()
  30.  
  31. def setupGame():
  32.     human.money = 50000
  33.     ai.money = 50000
  34.     Table.pot = 0
  35.     human.score = 0
  36.     ai.score = 0
  37.     Table.entrymoney = 100
  38.  
  39. class CardPile:
  40.     __deck = [r+s for r in '23456789TJQKA' for s in 'SHDC']
  41.     __usedCards  = []
  42.     def getCard(self):
  43.         while True:
  44.             __randCard = self.__deck[randint(0,51)]
  45.             if __randCard not in self.__usedCards:
  46.                 self.__usedCards.append(__randCard)
  47.                 return __randCard
  48.                 break
  49.     def reset(self):
  50.         self.__usedCards = []
  51.  
  52. class Table:
  53.     flop1 = list
  54.     flop2 = list
  55.     flop3 = list
  56.     turn = list
  57.     river = list
  58.     pot = int
  59.     entrymoney = int
  60.     winner = None
  61.  
  62. class human:
  63.     card1 = list
  64.     card2 = list
  65.     money = int
  66.     score = int
  67.  
  68. class ai:
  69.     card1 = list
  70.     card2 = list
  71.     money = int
  72.     score = int
  73.  
  74. def getCards():
  75.         Table.flop1 = CardPile().getCard()
  76.         Table.flop2 = CardPile().getCard()
  77.         Table.flop3 = CardPile().getCard()
  78.         Table.turn = CardPile().getCard()
  79.         Table.river = CardPile().getCard()
  80.         ai.card1 = CardPile().getCard()
  81.         ai.card2 = CardPile().getCard()
  82.         human.card1 = CardPile().getCard()
  83.         human.card2 = CardPile().getCard()
  84.  
  85. def bettingRoundHuman():
  86.         print "Human, your cards are: " + str(human.card1) + ", " + str(human.card2)
  87.         action = raw_input("What is your move? (r/c/f): ")
  88.         if action == 'f':
  89.             ai.score = ai.score + 1
  90.             Table.winner = "Ai"
  91.             bettingRound().won = True
  92.             return True
  93.         elif action == 'r':
  94.             raiseAmount = input("Raise by: ")
  95.             if bettingRoundHuman().action == 'r':
  96.                 human.money = human.money - bettingRoundAi().raiseAmount - raiseAmount
  97.                 Table.pot = Table.pot +  bettingRoundAi().raiseAmount + raiseAmount
  98.                 bettingRound().won = False
  99.                 return False
  100.             elif bettingRoundHuman().action == 'c':
  101.                 human.money = human.money - raiseAmount
  102.                 Table.pot = Table.pot + raiseAmount
  103.                 bettingRound().won = False
  104.                 return False
  105.             else:
  106.                 human.money = human.money - raiseAmount
  107.                 Table.pot = Table.pot + raiseAmount
  108.                 bettingRound().won = False
  109.                 return False
  110.         elif action == 'c':
  111.             if bettingRoundAi().action == 'c':
  112.                 bettingRound().won = False
  113.                 return True
  114.             elif bettingRoundAi().action ==  'r':
  115.                 human.money = human.money -  bettingRoundAi().raiseAmount
  116.                 Table.pot = Table.pot +  bettingRoundAi().raiseAmount
  117.                 bettingRound().won = False
  118.                 return False
  119.             else:
  120.                 bettingRound().won = False
  121.                 return False
  122.  
  123. def bettingRoundAi():
  124.     print "Ai, your cards are: " + str(ai.card1) + ", " + str(ai.card2)
  125.     action = raw_input("What is your move? (r/c/f): ")
  126.     if action == 'f':
  127.         human.score = human.score + 1
  128.         Table.winner = 'Human'
  129.         bettingRound().won = True
  130.         return True
  131.     elif action == 'r':
  132.         raiseAmount = input("Raise by: ")
  133.         if bettingRoundHuman().action == 'r':
  134.             ai.money = ai.money - bettingRoundHuman().raiseAmount - raiseAmount
  135.             Table.pot = Table.pot +  bettingRoundHuman().raiseAmount + raiseAmount
  136.             bettingRound().won = False
  137.             return False
  138.         elif bettingRoundHuman().action == 'c':
  139.             ai.money = ai.money - raiseAmount
  140.             Table.pot = Table.pot + raiseAmount
  141.             bettingRound().won = False
  142.             return False
  143.     elif action == 'c':
  144.         if bettingRoundHuman().action ==  'r':
  145.             ai.money = ai.money -  bettingRoundHuman().raiseAmount
  146.             Table.pot = Table.pot +  bettingRoundHuman().raiseAmount
  147.             bettingRound().won = False
  148.             return False
  149.         elif bettingRoundHuman().action == 'c':
  150.             bettingRound().won = False
  151.             return True
  152.         else:
  153.             bettingRound().won = False
  154.             return False
  155.  
  156. def playGame():
  157.     startPlayer = bettingRoundOrder()
  158.     human.money = human.money - Table.entrymoney
  159.     ai.money = ai.money - Table.entrymoney
  160.     Table.pot = (Table.pot + 2*Table.entrymoney)
  161.  
  162.     if bettingRound() == False:
  163.         print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3)
  164.         if bettingRound() == False:
  165.             print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3) + ", " + str(Table.turn)
  166.             if bettingRound() == False:
  167.                 print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3) + ", " + str(Table.turn) + ", " + str(Table.river)
  168.                 if bettingRound() == False:
  169.                     return cardCompare()
  170.     else: return Table.winner
  171.  
  172. def bettingRoundOrder():
  173.     if randint(0,100) >= 50:
  174.         return 1
  175.     else:
  176.         return 2
  177.  
  178. def bettingRound():
  179.     won = False
  180.     if playGame().startPlayer == 1:
  181.         while flag == False:
  182.             finishH = bettingRoundHuman()
  183.             finishA = bettingRoundAi()
  184.             if finishH == True or finishA == True:
  185.                 flag = True
  186.             else: flag = False
  187.     elif playGame().startPlayer == 2:
  188.         while flag == False:
  189.             finishA = bettingRoundAi()
  190.             finishH = bettingRoundHuman()
  191.             if finishH == True or finishA == True:
  192.                 flag = True
  193.             else: flag = flase
  194.     if won == True: return True
  195.     else: return False
  196.  
  197. def cardCompare():
  198.     allHcards = [human.card1, human.card2, Table.flop1, Table.flop2, Table.flop3, Table.turn, Table.river]
  199.     allAcards = [ai.card1, ai.card2, Table.flop1, Table.flop2, Table.flop3, Table.turn, Table.river]
  200.     print evaluateCard(allHcards)
  201.     print evaluateCard(allAcards)
  202.     if evaluateCard(allHcards) > evaluateCard(allAcards):
  203.         human.money = human.money + Table.pot
  204.         Table.pot = 0
  205.         human.score = human.score + 1
  206.         return str(human)[9:]
  207.     elif evaluateCard(allAcards) > evaluateCard(allHcards):
  208.         ai.money = ai.money + Table.pot
  209.         Table.pot = 0
  210.         ai.score = ai.score + 1
  211.         return str(ai)[9:]
  212.     else:
  213.         human.money = human.money + (Table.pot/2)
  214.         ai.money = ai.money + (Table.pot/2)
  215.         Table.pot = 0
  216.         return "no-one"
  217.  
  218. def evaluateCard(hand):
  219.     groups = group(['--23456789TJQKA'.index(r) for r, s in hand])
  220.     counts, ranks = zip(*groups)
  221.     if ranks == (14, 5, 4, 3, 2):
  222.         ranks = (5, 4, 3, 2, 1)
  223.     straight = len(ranks) == 5 and max(ranks)-min(ranks) == 4
  224.     flush = len(set([s for r, s in hand])) == 1
  225.     return (
  226.         9 if (5, ) == counts else
  227.         8 if straight and flush else
  228.         7 if (4, 1) == counts else
  229.         6 if (3, 2) == counts else
  230.         5 if flush else
  231.         4 if straight else
  232.         3 if (3, 1, 1) == counts else
  233.         2 if (2, 2, 1) == counts else
  234.         1 if (2, 1, 1, 1) == counts else
  235.         0), ranks
  236.  
  237. def group(items):
  238.     groups = [(items.count(x), x) for x in set(items)]
  239.     return sorted(groups, reverse = True)
  240.  
  241. def card_ranks(hand):
  242.     ranks = [14 if r == 'A' else
  243.              13 if r == 'K' else
  244.              12 if r == 'Q' else
  245.              11 if r == 'J' else
  246.              10 if r == 'T' else
  247.              int(r)
  248.              for r, s in hand]
  249.     ranks.sort(reverse = True)
  250.     return ranks if ranks != [14, 5, 4, 3, 2] else [5, 4, 3, 2, 1]
  251.  
  252. def straight(ranks):
  253.     return sum(ranks) - min(ranks)*5 == 10
  254.  
  255. def flush(hand):
  256.     suits = [s for r, s in hand]
  257.     return len(set(suits)) == 1
  258.  
  259. def two_pair(ranks):
  260.     result = [r for r in set(ranks) if ranks.count(r) == 2]
  261.     if len(result) == 2:
  262.         return (max(result), min(result))
  263.  
  264. def kind(n, ranks):
  265.     for r in set(ranks):
  266.         if ranks.count(r) == n:
  267.             return r
  268.     return None
  269.  
  270. game()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement