Beispiel #1
0
    def play_one_round(self):
        dealer = Dealer()  # Create new dealer for every round
        self.pot_ = 3  # Clear the pot by setting it to small + big blinds
        self.winner_ = None

        self.players_[0].set_blind(0)  # Player 0 is always small blind
        self.players_[1].set_blind(1)  # Player 1 is always big blind
        self.show_game_status()

        for player in self.players_:
            player.set_cards(dealer.deal_pockets())
            player.show_cards()

        if self.play_one_state(0):  # pre-flop
            dealer.deal_flop()
            self.show_game_status()
            if self.play_one_state(1):  # pre-turn
                self.show_game_status()
                dealer.deal_turn()
                if self.play_one_state(1):  # pre-river
                    dealer.deal_river()

        # Find the winner of the round
        if not self.winner_ == None:
            self.winner_.increase_stack(self.pot_)
        else:  # User winner.py
            for player in self.players_:
                player.show_cards()
            winner_id = ShowHands.Winner(self.players_[0].pocket_cards_,
                                         self.players_[1].pocket_cards_,
                                         dealer.communitycards_)
            #print("Debugging Test winner_id : " + str(winner_id))
            if not winner_id == None:
                for player in self.players_:
                    if player.check_id(winner_id + 1):
                        player.increase_stack(self.pot_)
                        self.winner_ = player
                        break
            else:  #Then it's a tie!!!
                for player in self.players_:
                    player.increase_stack(self.pot_ / 2)

        self.show_game_status()
Beispiel #2
0
class PokerGame :

	def __init__(self):
		self.p1 = Player(1)
		self.p2 = Player(2)
		self.dealer = Dealer()
		self.pot = 0 
		self.flop_cards = [] 
		self.bet_flag = False
		self.check_flag = False
		self.cur_bet = 0 
		self.cur_round = 0 
		self.cur_player = 1
		self.evaluator = FiveEval()

	def pre_flop(self):
		hands = self.dealer.deal_cards()
		self.p1.hand = hands[0]
		self.p2.hand = hands[1]
		self.cur_bet = 0 
		
		self.handle_move(self.p1.your_move(), 1)

	def flop(self):
		self.check_flag = False
		self.bet_flag = False
		self.see_pot()
		print "-----------------------------"
		print "Dealing flop"
		self.flop_cards = self.dealer.deal_flop()
		visible_flop = []
		for card in self.flop_cards:
			visible_flop.append(str(self.evaluator.number_lookup_table[self.evaluator.deckcardsFace[card]])+str(self.evaluator.suit_lookup_table[self.evaluator.deckcardsSuit[card]]))
		print "Flop: " + str(visible_flop)
		self.cur_bet = 0
		self.handle_move(self.p1.your_move(), 1)

	def see_stack_sizes(self):
		print "------------------------------"
		print "Stack Sizes"
		print("Player 1 stack: " + str(self.p1.stack))
		print("Player 2 stack: " + str(self.p2.stack))

	def see_pot(self):
		print "------------------------------"
		print "Pot Size: $" + str(self.pot)

	def handle_move(self, move, id):
		if move[0] == 'F':
			self.bet_flag = False
			print "Player " + str(move[1]) + "folded"
			self.end_round(move[1])
		elif move[0] == 'B' and self.bet_flag == False:
			self.cur_bet = move[1]
			self.pot = self.pot + self.cur_bet
			self.bet_flag = True
			print "Player " + str(move[2]) + " bet $" + str(self.cur_bet) 
			self.change_turn(move[2])
		elif move[0] == 'CA' and self.bet_flag == True:
			self.pot = self.pot + self.cur_bet
			self.bet_flag = False
			print "Player " + str(move[2]) + " called the bet"
			self.next_round()
		elif move[0] == 'C' and self.bet_flag == False:
			if self.check_flag == False:
				print "Player " + str(move[1]) + " checked"
				self.check_flag = True
				self.change_turn(move[1])
			else:
				print "Player " + str(move[1]) + " checked"
				self.check_flag = False
				self.next_round()
		else:
			print "False Move"
			self.repeat_turn()

	def change_turn(self, cur_player):
		print "-----------------------------"
		if cur_player == 1:
			self.cur_player = cur_player
			self.handle_move(self.p2.your_move(),2)
		else:
			self.cur_player = cur_player
			self.handle_move(self.p1.your_move(),1)

	def next_round(self):
		self.cur_round = self.cur_round + 1
		if self.cur_round == 1:
			self.flop()
		if self.cur_round == 2:
			self.evaluate()

	def repeat_turn(self):
		if self.cur_round == 1:
			self.handle_move(self.p1.your_move(),1)
		else:
			self.handle_move(self.p2.your_move(),2)

	def end_round(self, folded_player):
		print "Player " + str(folded_player) + " folded."

	def evaluate(self):
		self.cur_round += 1 
		self.see_pot()
		p1_hand = self.p1.hand + self.flop_cards
		p2_hand = self.p2.hand + self.flop_cards
		score_p1 = self.evaluator.getRankOfFive(p1_hand[0],p1_hand[1],p1_hand[2],p1_hand[3],p1_hand[4])
		score_p2 = self.evaluator.getRankOfFive(p2_hand[0],p2_hand[1],p2_hand[2],p2_hand[3],p2_hand[4])
		if score_p1 > score_p2:
			print "Player 1 wins $" + str(self.pot) 
			self.p1.stack += self.pot
		elif score_p2 > score_p1:
			print "Player 2 wins $" + str(self.pot) 
			self.p2.stack += self.pot
		else:
			print "Split pot"
			self.p2.stack += (0.5*self.pot)
			self.p1.stack += (0.5*self.pot)
		self.see_stack_sizes()
Beispiel #3
0
from rank import winner
Beispiel #4
0
    def play_one_round(self):
        # Create new dealer for every round
        dealer = Dealer()
        # Clear the pot by setting it to small + big blinds
        self.pot = 3
        self.winner = None

        # Player 0 is always small blind and Player 1 is always big blind
        self.players[0].set_blind(0)
        self.players[1].set_blind(1)

        self.players[0].set_cards(dealer.deal_pockets())
        self.players[1].set_cards(dealer.deal_pockets())
        self.show_game_status()

        # Three steps, they are pre-flop, pre-turn, pre-river respectively
        if self.play_one_state(0):  # pre-flop
            dealer.deal_flop()
            self.show_game_status()
            if self.play_one_state(1):  # pre-turn
                self.show_game_status()
                dealer.deal_turn()
                if self.play_one_state(1):  # pre-river
                    dealer.deal_river()
                    pass
                pass
            pass
        pass

        # Find the winner of the round
        if self.winner is not None:
            self.winner.increase_stack(self.pot)
            pass
        else:
            for player in self.players:
                player.show_cards()
                pass
            pass
            winner_id = winner(self.players[0], self.players[1],
                               dealer.communitycards)
            print("Debugging Test winner_id : " + str(winner_id))

            # Restore the original hands
            for loop_i in range(6, 1, -1):
                for player in self.players:
                    player.hands.pop(loop_i)
                    pass
                pass
            pass

            # Winner get the pot. If it's a tie, halve the pot respectively
            if winner_id is not None:
                for player in self.players:
                    if player.check_id(winner_id):
                        player.increase_stack(self.pot)
                        self.winner = player
                        break
                        pass
                    pass
                pass
            else:
                for player in self.players:
                    player.increase_stack(self.pot / 2)
                    pass
                pass
            pass

        self.show_game_status()
        pass