3 """Run a poker championship.
6 from table import Player, Blinds, Table
7 from deck import new_deck
10 def run(players, blinds, start_stack, hand_limit, tournaments, verbose=False):
11 for n in xrange(tournaments):
12 for player in players:
13 player.cash = start_stack
14 table = Table(deck=new_deck(), players=players, blinds=blinds,
16 while len(table.players) > 1 and table.hand_count < hand_limit:
18 # keep bots up to date, so they can think in parallel
19 for player in players:
21 player.log_flush(table.log)
22 if len(table.players) == 1:
23 print "INFO WINNER: Player %s" % table.players[0]
25 assert table.hand_count >= hand_limit
26 print "INFO Time expired"
27 for player in table.players:
28 print "INFO Tie: Player %s" % player
31 if __name__ == '__main__':
32 from optparse import OptionParser
34 usage = '%prog [options] PLAYER PLAYER ...'
35 epilog = ('`PLAYER`s should be name,brain tuples, e.g. (`a,p1.py`). '
36 'Give just the name for a human playing from the command line.')
37 p = OptionParser(usage=usage, epilog=epilog)
38 p.add_option('-s', '--start-stack', dest='stack', default=1000,
39 type='int', help='start stack (%default)')
40 p.add_option('-b', '--blinds', dest='blinds',
41 default='1,2,4,8,16,25,37,50',
42 help='blind schedule (%default)')
43 p.add_option('-c', '--hand-clock', dest='clock', default=20, type='int',
44 help='hands between blind increments (%default)')
45 p.add_option('-l', '--hand-limit', dest='limit', default=5000, type='int',
46 help='hand limit (-1 for unlimited play, %default')
47 p.add_option('-t', '--tournaments', dest='tournaments', default=1,
48 type='int', help='number of tournaments (%default)')
49 p.add_option('-v', '--verbose', dest='verbose', action='store_true',
50 help='print the log as it is written')
52 options,args = p.parse_args()
54 blinds = Blinds(blinds=[int(x) for x in options.blinds.split(',')],
55 hand_clock=options.clock)
59 fields = [x.strip() for x in arg.rsplit(',', 1)]
65 players.append(Player(name=name, brain=brain))
68 run(players=list(players), blinds=blinds, start_stack=options.stack,
69 hand_limit=options.limit, tournaments=options.tournaments,
70 verbose=options.verbose)
71 finally: # kill the bots