def eval_post_flop_current(hole_cards, community_cards): board = [] hand = [] remaining_cards = all_cards[:] for card in hole_cards: new_card = Card.new(card[1] + card[0].lower()) hand.append(new_card) remaining_cards.remove(new_card) for card in community_cards: new_card = Card.new(card[1] + card[0].lower()) board.append(new_card) remaining_cards.remove(new_card) score = evaluator.evaluate(board, hand) rounds = 0 wins = 0 draws = 0 for i in xrange(0, len(remaining_cards)): for j in xrange(i + 1, len(remaining_cards)): rounds += 1 opp_hand = [remaining_cards[i], remaining_cards[j]] opp_score = evaluator.evaluate(board, opp_hand) if (opp_score > score): wins += 1 # elif(evaluator.evaluate(board, opp_hand) < score): # loses += 1 elif (opp_score == score): draws += 1 # print("Rounds played: " + str(rounds) + " Wins: " + str(wins) + " Draws: " + str(draws)) return 100.0 * (float(wins) / rounds)
def eval_post_flop_rank(hole_cards, community_cards): board = [] hand = [] for card in hole_cards: hand.append(Card.new(card[1] + card[0].lower())) # 9c, Ah, Kd etc.. for card in community_cards: board.append(Card.new(card[1] + card[0].lower())) score = evaluator.evaluate(board, hand) return ( 7462 - score + 1 ) / 7462.0 * 100 # there are only 7642 distinctly ranked hands in poker
def GetFullDeck(): if Deck._FULL_DECK: return list(Deck._FULL_DECK) # create the standard 52 card deck for rank in Card.STR_RANKS: for suit, val in Card.CHAR_SUIT_TO_INT_SUIT.iteritems(): Deck._FULL_DECK.append(Card.new(rank + suit)) return list(Deck._FULL_DECK)
def eval_post_flop_true(hole_cards, community_cards): board = [] hand = [] remaining_cards = all_cards[:] for card in hole_cards: new_card = Card.new(card[1] + card[0].lower()) hand.append(new_card) remaining_cards.remove(new_card) for card in community_cards: new_card = Card.new(card[1] + card[0].lower()) board.append(new_card) remaining_cards.remove(new_card) rounds = 0 wins = 0 draws = 0 if (len(community_cards) == 5): # (45 choose 2) = 990 iterations score = evaluator.evaluate(board, hand) for i in xrange(0, len(remaining_cards)): for j in xrange(i + 1, len(remaining_cards)): rounds += 1 opp_hand = [remaining_cards[i], remaining_cards[j]] opp_score = evaluator.evaluate(board, opp_hand) if (opp_score > score): wins += 1 # elif(evaluator.evaluate(board, opp_hand) < score): # loses += 1 elif (opp_score == score): draws += 1 print("Rounds played: " + str(rounds) + " Wins: " + str(wins) + " Draws: " + str(draws)) return (float(wins) / rounds) * 100.0 elif (len(community_cards) == 4 ): # (46 choose 3) * (3 choose 1) = 45540 iterations for i in range(0, len(remaining_cards)): temp_board = board + [remaining_cards[i]] for j in xrange(0, len(remaining_cards)): if (i == j): continue else: for k in xrange(j + 1, len(remaining_cards)): if ((i == k) or (j == k)): continue else: rounds += 1 opp_hand = [remaining_cards[j], remaining_cards[k]] opp_score = evaluator.evaluate( temp_board, opp_hand) score = evaluator.evaluate(temp_board, hand) if (opp_score > score): wins += 1 # elif(evaluator.evaluate(board, opp_hand) < score): # loses += 1 elif (opp_score < score): draws += 1 print("Rounds played: " + str(rounds) + " Wins: " + str(wins) + " Draws: " + str(draws)) return (float(wins) / rounds) * 100.0 elif (len(community_cards) == 3 ): # (47 choose 4) * (4 choose 2) = 1070190 iterations for h in xrange(0, len(remaining_cards)): temp_board = board + [remaining_cards[h]] for i in xrange(h + 1, len(remaining_cards)): temp_board_2 = temp_board + [remaining_cards[i]] for j in xrange(0, len(remaining_cards)): if ((i == j) or (h == j)): continue else: for k in xrange(j + 1, len(remaining_cards)): if ((i == k) or (h == k)): continue else: rounds += 1 # print(rounds) opp_hand = [ remaining_cards[j], remaining_cards[k] ] opp_score = evaluator.evaluate( temp_board_2, opp_hand) score = evaluator.evaluate(temp_board_2, hand) if (opp_score > score): wins += 1 # elif(evaluator.evaluate(board, opp_hand) < score): # loses += 1 elif (opp_score < score): draws += 1 print("Rounds played: " + str(rounds) + " Wins: " + str(wins) + " Draws: " + str(draws)) return (float(wins) / rounds) * 100.0 else: print("ERROR")
# https://github.com/worldveil/deuces # e.g. hole_cards = ['SA', 'C2'], community_cards = ['D9', 'H3', 'C5', 'S6', 'D4'] from Group02_card import Card import Group02_evaluator evaluator = Group02_evaluator.Evaluator() all_cards = [] all_cards.append(Card.new('Ad')) for i in xrange(8): all_cards.append(Card.new(str(i + 2) + 'd')) all_cards.append(Card.new('Td')) all_cards.append(Card.new('Jd')) all_cards.append(Card.new('Qd')) all_cards.append(Card.new('Kd')) all_cards.append(Card.new('Ac')) for i in xrange(8): all_cards.append(Card.new(str(i + 2) + 'c')) all_cards.append(Card.new('Tc')) all_cards.append(Card.new('Jc')) all_cards.append(Card.new('Qc')) all_cards.append(Card.new('Kc')) all_cards.append(Card.new('Ah')) for i in xrange(8): all_cards.append(Card.new(str(i + 2) + 'h')) all_cards.append(Card.new('Th')) all_cards.append(Card.new('Jh')) all_cards.append(Card.new('Qh')) all_cards.append(Card.new('Kh'))