Ejemplo n.º 1
0
def main():
    d = Deck()
    print 'hands:'
    c1 = raw_input('card1?')
    c2 = raw_input('card2?')
    c3 = raw_input('card3?')
    c4 = raw_input('card4?')
    card1 = Card(c1[0], c1[1])
    card2 = Card(c2[0], c2[1])
    card3 = Card(c3[0], c3[1])
    card4 = Card(c4[0], c4[1])
    ps = list()
    ps.append(Hand(card1, card2))
    ps.append(Hand(card3, card4))
    # ps = d.deal_players(N_PLAYERS)
    ps_str = ''
    for p in ps:
        ps_str += str(p) + ', '
    print ps_str

    wins = [0] * N_PLAYERS
    for loop in range(0, N_LOOP):
        d.reset()
        for p in ps:
            d.draw_card(p.card1)
            d.draw_card(p.card2)

        # print "community:"
        com = d.deal_community()
        com_str = ''
        for c in com:
            com_str += str(c) + ', '
        # print com_str

        ss = []
        for i in range(0, N_PLAYERS):
            ss.append(Holdem.showdown_hand_score(ps[i], com))
            # print ps[i], ss[i]
            # # if ss[i][0] == '9':
            # #     exit()
        # print 'best:'
        max_index, max_value = max(enumerate(ss), key=operator.itemgetter(1))
        # print max_index, max_value
        if ss[0] == ss[1]:
            wins[0] += 0.5
            wins[1] += 0.5
        else:
            wins[max_index] += 1  # OCOC what about ties?

    for i_wins in wins:
        print round(float(i_wins) / N_LOOP * 1000) / 10.0
Ejemplo n.º 2
0
class Session:
    def __init__(self, n_bbs, bb_size, rake_size, strategies):
        self.n_bbs = n_bbs
        self.bb_size = bb_size
        self.rake_size = rake_size

        self.n_spots = 0
        self.rake_accum = 0

        self.players = []
        for strategy in strategies:
            self.players.append(
                Player(
                    len(self.players) + 1, strategy, START_BALANCE,
                    n_bbs * bb_size))
        self.n_players = len(self.players)
        self.dealer_idx = self.n_players - 1  # Start with the first player as SB
        self.deck = Deck()

    def run(self, n_spots):
        self.report()
        for i in range(n_spots):
            self.handle_spot()
            self.dealer_idx = (self.dealer_idx + 1) % self.n_players
            self.report()
        self.report()

    def handle_spot(self):
        self.n_spots += 1
        self.deck.reset()
        hands = self.deck.deal_players(self.n_players)

        for h in hands:
            print h

        balances = [0] * self.n_players
        for i_player in range(self.n_players):
            player_idx = (self.dealer_idx + POS_UTG_VS_DEALER +
                          i_player) % self.n_players
            balances[i_player] = self.players[player_idx].table_balance

        bet_sizes = [0] * self.n_players
        pot_size = 0
        player_sb_idx = (self.dealer_idx + POS_SB_VS_DEALER) % self.n_players
        bet_sizes[player_sb_idx] = self.players[player_sb_idx].bet(
            self.bb_size / 2)  # SB
        pot_size += bet_sizes[player_sb_idx]
        player_bb_idx = (self.dealer_idx + POS_BB_VS_DEALER) % self.n_players
        bet_sizes[player_bb_idx] = self.players[player_bb_idx].bet(
            self.bb_size)  # BB
        pot_size += bet_sizes[player_bb_idx]

        allin_participants = []
        for i_player in range(self.n_players):
            if i_player == self.n_players - 1 and len(allin_participants) == 0:
                break  # When no one bet and last player to act

            player_idx = (self.dealer_idx + POS_UTG_VS_DEALER +
                          i_player) % self.n_players
            is_allin = self.players[player_idx].act(hands[player_idx],
                                                    balances,
                                                    POSITIONS_LIST[i_player],
                                                    None)
            if is_allin:
                bet_sizes[player_idx] += self.players[player_idx].go_allin()
                pot_size += bet_sizes[player_idx]
                allin_participants.append({
                    'player_idx': player_idx,
                    'hand': hands[player_idx],
                    'bet': bet_sizes[player_idx]
                })
            else:
                balances[i_player] = 0

        if len(allin_participants) == 0:
            player_idx = (self.dealer_idx + POS_BB_VS_DEALER) % self.n_players
            self.players[player_idx].eval_walk(pot_size)
        elif len(allin_participants) == 1:
            player_idx = allin_participants[0]['player_idx']
            self.players[player_idx].eval_spot_result(
                allin_participants[0]['bet'], pot_size)
        else:
            com = self.deck.deal_community()
            for c in com:
                print c
            hand_ranks = []
            for i in range(0, len(allin_participants)):
                hand_ranks.append(
                    Holdem.showdown_hand_score(allin_participants[i]['hand'],
                                               com))

            # OCOC evaluate hand ranks and side pots...
            participant_bets = [item['bet'] for item in allin_participants]
            participant_wins = Holdem.distribute_pot(hand_ranks,
                                                     participant_bets)
            for i in range(0, len(allin_participants)):
                player_idx = allin_participants[i]['player_idx']
                self.players[player_idx].eval_spot_result(
                    allin_participants[i]['bet'], participant_wins[i])

    def report(self):
        for pl in self.players:
            print pl
        print sum([p.wallet_balance + p.table_balance for p in self.players])
Ejemplo n.º 3
0
from poker import Holdem

while True:
    d = Deck()
    # d.shuffle()
    # h = Hand(d.draw_card(), d.draw_card())
    # print h, h.suited
    print 'hands:'
    ps = d.deal_players(4)
    ps_str = ''
    for p in ps:
        ps_str += str(p) + ', '
    print ps_str

    print "community:"
    com = d.deal_community()
    com_str = ''
    for c in com:
        com_str += str(c) + ', '
    print com_str

    ss = list()
    ss.append(Holdem.showdown_hand_score(ps[0], com))
    ss.append(Holdem.showdown_hand_score(ps[1], com))
    ss.append(Holdem.showdown_hand_score(ps[2], com))
    ss.append(Holdem.showdown_hand_score(ps[3], com))
    for i in range(0, 4):
        print ps[i], ss[i]
        if ss[i][0] == '9':
            exit()
    print 'sorted:'