コード例 #1
0
ファイル: data_input.py プロジェクト: dlinov/pythonpoker
	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
コード例 #2
0
ファイル: data_input.py プロジェクト: dlinov/pythonpoker
	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
コード例 #3
0
ファイル: data_input.py プロジェクト: dlinov/pythonpoker
	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
コード例 #4
0
ファイル: main.py プロジェクト: dlinov/pythonpoker
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')