def process_start_game(self, game_state): inp = crf.readline('enter start amount of money: ') start_money = int(inp if inp.isdigit() else '100') inp = crf.readline('enter blind: ') game_state.blind = int(inp if inp.isdigit() else '10') inp = crf.readline('enter player number: ') num = int(inp if inp.isdigit() else '2') if num < 2: print('WARNING: player number should be greater or equal to 2. Player is set to 2') num = 2 user_flag = False for i in range(0, num): inp = crf.readline('enter opponent #{0} name: '.format(i + 1)) name = inp if inp != '' else 'player{}'.format(i) prev = game_state.players[i - 1] if i > 0 else None p = players.Player(name , start_money, prev, None) if not user_flag: inp = crf.readline('enter "+" if this player is you: ') user_flag = inp == '+' if user_flag: game_state.player = p if prev: prev.next = p game_state.players.append(p) print('player "{}" with start money = {} added'.format(p, start_money)) game_state.players[0].prev = game_state.players[-1] game_state.players[-1].next = game_state.players[0] game_state.small_blind = game_state.players[0] game_state.big_blind = game_state.players[1] game_state.stage = poker.stages.nocards
def get_card(self): ''' input format - [value, suit], e.g. "2H" or "AD" ''' result = None while not result: try: card_code = crf.readline('Enter card: ') result = cards.Card(card_code[1], card_code[0]) except: print('ERROR: card input cannot be parsed') return result
def get_stakes(self, game_state): """universal method to get stakes at various round stages""" # get players who has bet less than needed without_stake = list(filter(lambda p: p.stake < game_state.bank_part, filter(lambda y: y, game_state.players))) cycle_label = game_state.last_bet_by.next current = cycle_label while current.next is not cycle_label: # if current player is not fold if current.stake >= 0: game_state.last_bet_by = current if current is game_state.player: # return process game state return else: # get other players' stakes d = crf.readline("Enter {}'s decision (f[old], c[heck/all], r[aise]/b[et], a[ll-in]: ".format(current)) if d.startswith('f'): current.stake = None elif d.startswith('c'): # check or call - autocall if you can't check diff = game_state.bank_part - current.stake current.money -= diff current.stake += diff elif d.startswith('r') or d.startswith('b'): # raise or bet # by default, bet is equal to blind + difference between required and current bank_part # may be the 2nd input for stake should be implemented diff = current.money - (game_state.bank_part - current.stake + game_state.blind) if (diff < 0): print("WARNING: get_stakes, diff is less than zero. Maybe it's all-in player") else: bet = game_state.blind if diff >= game_state.blind else diff game_state.bank_part += bet cycle_label = current # cycle starts_again elif d.startswith('a'): # all-in diff = current.money - (game_state.bank_part - current.stake) current.money = 0 game_state.bank_part += diff else: print('ERROR: wrong input') else: print('DEBUG: {} is fold'.format(current)) current = current.next return True
import data_io import cross_py_func as crf io = data_io.Manager('gui', 'gui', 'basic') print('IO: {}'.format(io)) crf.readline('press return to start game:') io.start() crf.readline('press return to close')