Exemplo n.º 1
0
  /** Rotates dealer and blinds, eliminates players, and prepares table for next hand. */
  public void handEnd() {
    // Begin end hand phase
    phase = PokerPhase.HAND_END;

    // Eliminate players with no money
    for (PokerPlayer player : new ArrayList<>(getPlayers())) {
      if (player.getChips() == 0) {
        removePlayer(player);
      }
    }

    int playersLeft = getPlayers().size();
    if (playersLeft > 0) {
      // Rotate dealer, small blind, and big blind
      getPlayers().add(0, getPlayers().remove(getPlayerCount() - 1));

      // Eliminate players that can't afford blind
      while (playersLeft > 1) {
        PokerPlayer smallBlind = getSmallBlind();
        if (smallBlind.getChips() < settings.getSmallBlind()) {
          removePlayer(smallBlind);
          playersLeft--;
          continue;
        }
        break;
      }
      while (playersLeft > 2) {
        PokerPlayer bigBlind = getBigBlind();
        if (bigBlind.getChips() < settings.getBigBlind()) {
          removePlayer(bigBlind);
          playersLeft--;
          continue;
        }
        break;
      }
    }

    // Reset deck, open table, and wait to start next game
    deck.reset();
    tableCards.clear();
    for (PokerPlayer player : getPlayers()) {
      player.nextHand();
    }
    setOpen(true);
    phase = PokerPhase.STANDBY;
  }