From b984f3246d3e18fa246be87da308cea09075d74b Mon Sep 17 00:00:00 2001 From: Matias Bertani Date: Thu, 18 Aug 2022 14:03:11 -0300 Subject: [PATCH] fixing complexity action --- poker/hand.py | 159 ++++++++++++++++++++++++++++---------------------- 1 file changed, 90 insertions(+), 69 deletions(-) diff --git a/poker/hand.py b/poker/hand.py index 7339841..0129000 100644 --- a/poker/hand.py +++ b/poker/hand.py @@ -75,88 +75,109 @@ def take_action(self, action, bet=0): self.turn = PLAYER if (self.turn == CPU) else CPU elif action == BET: - if self.last_action == RAISE: - result = "You can't bet now" - elif self.turn == PLAYER and self.players[0].money < bet: - result = "You don't have enough money" - else: - self.last_action = action - self.pot += bet - self.last_bet = bet - if self.turn == PLAYER: - if self.players[0].money == bet: - self.all_in_value = True - self.players[0].money -= bet - self.turn = PLAYER if (self.turn == CPU) else CPU - result = 'All In Done' - else: - self.players[0].money -= bet - else: - self.players[1].money -= bet - self.turn = PLAYER if (self.turn == CPU) else CPU + result = self.action_bet(bet) elif action == CALL: + result = self.action_call() + + elif action == FOLD: + result = self.action_fold() + + elif action == RAISE: if self.last_action == BET or self.last_action == RAISE: - if self.turn == PLAYER: - self.players[0].money -= self.last_bet - elif self.turn == CPU: - self.players[1].money -= self.last_bet - self.pot += self.last_bet - if self.all_in_value: - result = self.all_in() + result = self.action_raise(bet) + + return result + + def action_bet(self, bet) -> str: + result = BET + ' done!' + + if self.last_action == RAISE: + result = "You can't bet now" + elif self.turn == PLAYER and self.players[0].money < bet: + result = "You don't have enough money" + else: + self.last_action = BET + self.pot += bet + self.last_bet = bet + if self.turn == PLAYER: + if self.players[0].money == bet: + self.all_in_value = True + self.players[0].money -= bet + self.turn = PLAYER if (self.turn == CPU) else CPU + result = 'All In Done' else: - res = self.next_stage() - if res: - result = res + self.players[0].money -= bet else: - result = "You can't CALL now" + self.players[1].money -= bet + self.turn = PLAYER if (self.turn == CPU) else CPU + return result - elif action == FOLD: - if self.last_action == BET or self.last_action == RAISE: - if self.turn == CPU: - self.players[0].money += self.pot - elif self.turn == PLAYER: - self.players[1].money += self.pot - result = "the {} win".format(PLAYER if (self.turn == CPU) - else CPU) + def action_call(self) -> str: + + result = "You can't CALL now" + if self.last_action == BET or self.last_action == RAISE: + index = 0 if self.turn == PLAYER else 1 + self.players[index].money -= self.last_bet + self.pot += self.last_bet + + if self.all_in_value: + result = self.all_in() else: - result = "You can't FOLD now" + result = self.next_stage() - elif action == RAISE: + if not result: + result = CALL + ' done!' + return result - if self.last_action == BET or self.last_action == RAISE: - turn_money = None + def action_fold(self) -> str: - if self.turn == PLAYER: + if self.last_action == BET or self.last_action == RAISE: + if self.turn == CPU: + self.players[0].money += self.pot + elif self.turn == PLAYER: + self.players[1].money += self.pot + result = "the {} win".format(PLAYER if (self.turn == CPU) + else CPU) + else: + result = "You can't FOLD now" - turn_money = self.players[0].money + return result - else: - turn_money = self.players[1].money - - if self.turn == PLAYER and self.players[0].money < bet: - result = "You don't have enough money" - elif bet >= (2 * self.last_bet): - self.last_action = action - self.pot += bet - self.last_bet = bet - self.last_bet - if self.turn == PLAYER: - self.players[0].money -= bet - else: - self.players[1].money -= bet - self.turn = PLAYER if (self.turn == CPU) else CPU + def action_raise(self, bet) -> str: + result = '' + turn_money = None - elif bet < (2 * self.last_bet) and bet == turn_money: - self.last_action = action - self.pot += turn_money - self.last_bet = turn_money - if self.turn == PLAYER: - self.players[0].money -= turn_money - else: - self.players[1].money -= turn_money - result = self.all_in() - else: - result = "You must raise at least twice last bet" + if self.turn == PLAYER: + turn_money = self.players[0].money + + else: + turn_money = self.players[1].money + + if self.turn == PLAYER and self.players[0].money < bet: + result = "You don't have enough money" + + elif bet >= (2 * self.last_bet): + self.last_action = RAISE + self.pot += bet + self.last_bet = bet - self.last_bet + if self.turn == PLAYER: + self.players[0].money -= bet + else: + self.players[1].money -= bet + self.turn = PLAYER if (self.turn == CPU) else CPU + + elif bet < (2 * self.last_bet) and bet == turn_money: + self.last_action = RAISE + self.pot += turn_money + self.last_bet = turn_money + if self.turn == PLAYER: + self.players[0].money -= turn_money + else: + self.players[1].money -= turn_money + result = self.all_in() + else: + result = "You must raise at least twice last bet" return result