public function finish_hand() { // find winning hand if ($this->count_players_in_hand() == 1) { $win_player = $this->get_last_player_standing(); $this->game_log[] = '<b>-- Hand Complete, No Showdown --</b>'; if ($this->community_cards->count() > 0) { $this->game_log[] = 'Community Cards: ' . $this->render_community_cards(); } $this->game_log[] = '<b>' . $win_player->name . '</b> wins $' . $this->get_pot_value() . ' (net $' . ($this->get_pot_value() - $win_player->games[$this->id]['tot_stake']) . ')'; $win_player->games[$this->id]['balance'] += $this->get_pot_value(); } else { $this->game_log[] = '<b>*** SHOWDOWN ***</b>'; $this->game_log[] = 'Community Cards: ' . $this->render_community_cards(); $hand_pts = array(); $hand_txt = array(); foreach ($this->players as $player) { $cards = array(); for ($i = 0; $i < 5; $i++) { if ($i == 0 || $i == 1) { // get player card also! $cards[] = array('value' => $player->peek_card($i, $this->id)->get_numeric_rank(), 'suit' => $player->peek_card($i, $this->id)->get_suit()); } // get community card $cards[] = array('value' => $this->community_cards->cards[$i]->get_numeric_rank(), 'suit' => $this->community_cards->cards[$i]->get_suit()); } $engine = new Engine($cards); $hand = $engine->score($cards); $hand_text = $engine->readable_hand($hand); $this->game_log[] = '<b>' . $player->name . '</b> shows - ' . Render::player_cards($this, '', $player) . ' - ' . $hand_text; $hand_pts[$player->client_id] = $hand; $hand_txt[$player->client_id] = $hand_text; } asort($hand_pts); $tmp_pts = -1; $ways_split = 0; $split_seats = array(); $lead_seat = NULL; foreach ($hand_pts as $seat => $pts) { if ($pts > $tmp_pts) { $tmp_pts = $pts; $split_seats[$seat] = $seat; $split_pot = FALSE; $lead_seat = $seat; } elseif ($pts == $tmp_pts) { $ways_split++; $split_pot = TRUE; $split_seats[$seat] = $seat; } } if (!$split_pot) { $player = $this->get_player_by_client_id($lead_seat); $player->games[$this->id]['balance'] += $this->get_pot_value(); $this->game_log[] = '<b>' . $player->name . '</b> wins $' . $this->get_pot_value() . ' (net $' . ($this->get_pot_value() - $player->games[$this->id]['tot_stake']) . ') with ' . $hand_txt[$lead_seat]; } else { $this->game_log[] = '<b>Split Pot</b>'; $split_amt = $this->get_pot_value() / $ways_split; foreach ($this->players as $player) { $player->games[$this->id]['balance'] += $split_amt; } $this->game_log[] = 'Each player wins $' . $split_amt; } } foreach ($this->players as $player) { if ($player->games[$this->id]['balance'] == 0) { // END GAME! $this->game_over = true; } else { $player->games[$this->id]['cur_stake'] = 0; $player->games[$this->id]['tot_stake'] = 0; $player->games[$this->id]['status'] = 'WAITING'; $player->cards[$this->id] = new Card_Collection(); } } if (!$this->game_over) { // reset all cards $this->deck = new Deck(); $this->deck->shuffle(); $this->community_cards = new Card_Collection(); $this->betting_round = 1; // move dealer button $this->dealer = $this->dealer == 1 ? 0 : 1; } }
public function render_game($game, $start_hand = false, $controls = true) { $i = 0; foreach ($game->players as $player) { $alt_seat = $i == 0 ? 1 : 0; $render = array('game_id' => $game->id, 'game-' . $game->id . '-player_cards' => Render::player_cards($game, '', $player), 'game-' . $game->id . '-player_text' => Render::player_text($game, '', $player), 'game-' . $game->id . '-opponent_cards' => Render::player_cards($game, $alt_seat), 'game-' . $game->id . '-opponent_text' => Render::player_text($game, $alt_seat), 'game-' . $game->id . '-community_cards' => Render::community_cards(), 'game-' . $game->id . '-pot' => '<b>Pot: $' . $game->get_pot_value() . '</b>'); if ($game->current_turn == $i && $controls) { $render['game-' . $game->id . '-game_controls'] = Render::game_actions($game, $player); } $this->send_to_one($player->client_id, 'game_render', $render); if ($start_hand) { // send their cards to the game log $this->send_to_one($player->client_id, 'game_log', array('game_id' => $game->id, 'msgs' => array('<b>You were dealt:</b> ' . Render::player_cards($game, $i, $player)))); } $i++; } }