Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import itertools, random, sys, math
- #from Tkinter import *
- from random import randint
- def game():
- gRound = 0
- quit = False
- reset = False
- print "Welcome to texas holdem!"
- while quit == False:
- print "You are on round: " + str(gRound)
- if gRound == 0 or reset == True:
- setupGame()
- gRound = 0
- CardPile().reset()
- getCards()
- print "Congratulations " + playGame() + ", you won!"
- print "The score is: AI: " + str(ai.score) + " | " + str(human.score) + " :HUMAN"
- gRound = gRound + 1
- if raw_input("Would you like to reset the game? (y/n):") == 'y':
- reset = True
- else:
- reset = False
- if raw_input("Would you like to quit the game? (y/n):") == 'y':
- quit = True
- else:
- quit = False
- sys.exit()
- def setupGame():
- human.money = 50000
- ai.money = 50000
- Table.pot = 0
- human.score = 0
- ai.score = 0
- Table.entrymoney = 100
- class CardPile:
- __deck = [r+s for r in '23456789TJQKA' for s in 'SHDC']
- __usedCards = []
- def getCard(self):
- while True:
- __randCard = self.__deck[randint(0,51)]
- if __randCard not in self.__usedCards:
- self.__usedCards.append(__randCard)
- return __randCard
- break
- def reset(self):
- self.__usedCards = []
- class Table:
- flop1 = list
- flop2 = list
- flop3 = list
- turn = list
- river = list
- pot = int
- entrymoney = int
- winner = None
- class human:
- card1 = list
- card2 = list
- money = int
- score = int
- class ai:
- card1 = list
- card2 = list
- money = int
- score = int
- def getCards():
- Table.flop1 = CardPile().getCard()
- Table.flop2 = CardPile().getCard()
- Table.flop3 = CardPile().getCard()
- Table.turn = CardPile().getCard()
- Table.river = CardPile().getCard()
- ai.card1 = CardPile().getCard()
- ai.card2 = CardPile().getCard()
- human.card1 = CardPile().getCard()
- human.card2 = CardPile().getCard()
- def bettingRoundHuman():
- print "Human, your cards are: " + str(human.card1) + ", " + str(human.card2)
- action = raw_input("What is your move? (r/c/f): ")
- if action == 'f':
- ai.score = ai.score + 1
- Table.winner = "Ai"
- bettingRound().won = True
- return True
- elif action == 'r':
- raiseAmount = input("Raise by: ")
- if bettingRoundHuman().action == 'r':
- human.money = human.money - bettingRoundAi().raiseAmount - raiseAmount
- Table.pot = Table.pot + bettingRoundAi().raiseAmount + raiseAmount
- bettingRound().won = False
- return False
- elif bettingRoundHuman().action == 'c':
- human.money = human.money - raiseAmount
- Table.pot = Table.pot + raiseAmount
- bettingRound().won = False
- return False
- else:
- human.money = human.money - raiseAmount
- Table.pot = Table.pot + raiseAmount
- bettingRound().won = False
- return False
- elif action == 'c':
- if bettingRoundAi().action == 'c':
- bettingRound().won = False
- return True
- elif bettingRoundAi().action == 'r':
- human.money = human.money - bettingRoundAi().raiseAmount
- Table.pot = Table.pot + bettingRoundAi().raiseAmount
- bettingRound().won = False
- return False
- else:
- bettingRound().won = False
- return False
- def bettingRoundAi():
- print "Ai, your cards are: " + str(ai.card1) + ", " + str(ai.card2)
- action = raw_input("What is your move? (r/c/f): ")
- if action == 'f':
- human.score = human.score + 1
- Table.winner = 'Human'
- bettingRound().won = True
- return True
- elif action == 'r':
- raiseAmount = input("Raise by: ")
- if bettingRoundHuman().action == 'r':
- ai.money = ai.money - bettingRoundHuman().raiseAmount - raiseAmount
- Table.pot = Table.pot + bettingRoundHuman().raiseAmount + raiseAmount
- bettingRound().won = False
- return False
- elif bettingRoundHuman().action == 'c':
- ai.money = ai.money - raiseAmount
- Table.pot = Table.pot + raiseAmount
- bettingRound().won = False
- return False
- elif action == 'c':
- if bettingRoundHuman().action == 'r':
- ai.money = ai.money - bettingRoundHuman().raiseAmount
- Table.pot = Table.pot + bettingRoundHuman().raiseAmount
- bettingRound().won = False
- return False
- elif bettingRoundHuman().action == 'c':
- bettingRound().won = False
- return True
- else:
- bettingRound().won = False
- return False
- def playGame():
- startPlayer = bettingRoundOrder()
- human.money = human.money - Table.entrymoney
- ai.money = ai.money - Table.entrymoney
- Table.pot = (Table.pot + 2*Table.entrymoney)
- if bettingRound() == False:
- print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3)
- if bettingRound() == False:
- print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3) + ", " + str(Table.turn)
- if bettingRound() == False:
- print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3) + ", " + str(Table.turn) + ", " + str(Table.river)
- if bettingRound() == False:
- return cardCompare()
- else: return Table.winner
- def bettingRoundOrder():
- if randint(0,100) >= 50:
- return 1
- else:
- return 2
- def bettingRound():
- won = False
- if playGame().startPlayer == 1:
- while flag == False:
- finishH = bettingRoundHuman()
- finishA = bettingRoundAi()
- if finishH == True or finishA == True:
- flag = True
- else: flag = False
- elif playGame().startPlayer == 2:
- while flag == False:
- finishA = bettingRoundAi()
- finishH = bettingRoundHuman()
- if finishH == True or finishA == True:
- flag = True
- else: flag = flase
- if won == True: return True
- else: return False
- def cardCompare():
- allHcards = [human.card1, human.card2, Table.flop1, Table.flop2, Table.flop3, Table.turn, Table.river]
- allAcards = [ai.card1, ai.card2, Table.flop1, Table.flop2, Table.flop3, Table.turn, Table.river]
- print evaluateCard(allHcards)
- print evaluateCard(allAcards)
- if evaluateCard(allHcards) > evaluateCard(allAcards):
- human.money = human.money + Table.pot
- Table.pot = 0
- human.score = human.score + 1
- return str(human)[9:]
- elif evaluateCard(allAcards) > evaluateCard(allHcards):
- ai.money = ai.money + Table.pot
- Table.pot = 0
- ai.score = ai.score + 1
- return str(ai)[9:]
- else:
- human.money = human.money + (Table.pot/2)
- ai.money = ai.money + (Table.pot/2)
- Table.pot = 0
- return "no-one"
- def evaluateCard(hand):
- groups = group(['--23456789TJQKA'.index(r) for r, s in hand])
- counts, ranks = zip(*groups)
- if ranks == (14, 5, 4, 3, 2):
- ranks = (5, 4, 3, 2, 1)
- straight = len(ranks) == 5 and max(ranks)-min(ranks) == 4
- flush = len(set([s for r, s in hand])) == 1
- return (
- 9 if (5, ) == counts else
- 8 if straight and flush else
- 7 if (4, 1) == counts else
- 6 if (3, 2) == counts else
- 5 if flush else
- 4 if straight else
- 3 if (3, 1, 1) == counts else
- 2 if (2, 2, 1) == counts else
- 1 if (2, 1, 1, 1) == counts else
- 0), ranks
- def group(items):
- groups = [(items.count(x), x) for x in set(items)]
- return sorted(groups, reverse = True)
- def card_ranks(hand):
- ranks = [14 if r == 'A' else
- 13 if r == 'K' else
- 12 if r == 'Q' else
- 11 if r == 'J' else
- 10 if r == 'T' else
- int(r)
- for r, s in hand]
- ranks.sort(reverse = True)
- return ranks if ranks != [14, 5, 4, 3, 2] else [5, 4, 3, 2, 1]
- def straight(ranks):
- return sum(ranks) - min(ranks)*5 == 10
- def flush(hand):
- suits = [s for r, s in hand]
- return len(set(suits)) == 1
- def two_pair(ranks):
- result = [r for r in set(ranks) if ranks.count(r) == 2]
- if len(result) == 2:
- return (max(result), min(result))
- def kind(n, ranks):
- for r in set(ranks):
- if ranks.count(r) == n:
- return r
- return None
- game()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement