Exemple #1
0
 protected function processTurnActions(\GroupBot\Brains\CardGame\Enums\PlayerMove $Move)
 {
     /** @var Player $Player */
     $Player = $this->Game->getCurrentPlayer();
     $bank = $this->Transact->UserSQL->getUserFromId(COIN_BANK_ID);
     if ($Player->State == PlayerState::BlackJack) {
         $Player->no_blackjacks++;
         $this->Talk->blackjack($Player);
     } elseif ($Player->State == PlayerState::Join || $Player->State == PlayerState::Hit) {
         switch ($Move) {
             case PlayerMove::DefaultMove:
                 $Player->State = new PlayerState(PlayerState::Stand);
                 $Player->no_stands++;
                 $this->Talk->stand($Player);
                 break;
             case PlayerMove::Stand:
                 $Player->State = new PlayerState(PlayerState::Stand);
                 $Player->no_stands++;
                 $this->Talk->stand($Player);
                 break;
             case PlayerMove::Hit:
                 $Player->Hand->addCard($this->Game->Deck->dealCard());
                 $this->setPlayerState(PlayerState::Hit);
                 $Player->no_hits++;
                 $this->Talk->hit($Player);
                 break;
             case PlayerMove::DoubleDown:
                 if ($this->user->getBalance() > $Player->bet) {
                     if ($bank->getBalance() > $this->Game->betting_pool + $Player->bet) {
                         $this->Transact->transactToBank(new BankTransaction($this->user, $Player->bet, new TransactionType(TransactionType::BlackjackBet)));
                         $Player->bet = $Player->bet * 2;
                         $Player->Hand->addCard($this->Game->Deck->dealCard());
                         $this->setPlayerState(PlayerState::Stand);
                         $Player->no_doubledowns++;
                         $this->Talk->double_down($Player);
                     } else {
                         $this->Talk->double_down_dealer_not_enough_money();
                         return false;
                     }
                 } else {
                     $this->Talk->double_down_not_enough_money($Player);
                     return false;
                 }
                 break;
             case PlayerMove::Split:
                 if ($Player->State != PlayerState::Join) {
                     $this->Talk->split_wrong_turn();
                     return false;
                 } elseif ($Player->Hand->canSplit()) {
                     if ($Player->split == 0) {
                         if ($bank->getBalance() > $Player->bet) {
                             if ($bank->getBalance() > $this->Game->betting_pool + $Player->bet) {
                                 $this->Game->addPlayer($this->user, $this->Bets, $Player->bet, false, 2);
                                 $Player->Hand->addCard($this->Game->Deck->dealCard());
                                 $this->setPlayerState(PlayerState::Hit);
                                 $Player->split = 1;
                                 $Player->no_splits++;
                                 $this->Talk->split($Player, $this->Game->getPlayer($Player->player_no + 1));
                             } else {
                                 $this->Talk->split_dealer_not_enough_money();
                                 return false;
                             }
                         } else {
                             $this->Talk->split_not_enough_money($Player);
                             return false;
                         }
                     } else {
                         $this->Talk->split_only_once();
                         return false;
                     }
                 } else {
                     $this->Talk->split_wrong_cards();
                     return false;
                 }
                 break;
             case PlayerMove::Surrender:
                 if ($Player->free_bet) {
                     $Player->State = new PlayerState(PlayerState::Surrender);
                     $Player->no_surrenders++;
                     $Player->game_result = new GameResult(GameResult::Loss);
                     $this->Talk->surrender_free($Player);
                 } elseif ($Player->State == PlayerState::Join) {
                     $this->Bets->taxationBodyTransact($Player, $Player->bet * 0.5);
                     $Player->State = new PlayerState(PlayerState::Surrender);
                     $Player->no_surrenders++;
                     $Player->game_result = new GameResult(GameResult::Loss);
                     $Player->bet_result = $Player->bet * -0.5;
                     $this->Talk->surrender($Player);
                 } else {
                     $this->Talk->surrender_wrong_turn();
                     return false;
                 }
                 break;
         }
     }
     return true;
 }