Example #1
0
  @Override
  public void start() {
    // Close table
    setOpen(false);

    // Begin first phase
    phase = PokerPhase.PREFLOP;

    // Create pot
    pot = newPot(0, new HashSet<>(getPlayers()));

    // Post blinds
    blinds();

    // Deal 2 cards to each player
    deck.shuffle();
    for (PokerPlayer player : getPlayers()) {
      player.dealCard(deck.draw(player), deck.draw(player));
    }

    // Start betting with player left of big blind
    playerTurn = getPlayerCount() - 2;
    nextPlayer();
    for (PokerPlayer player : getPlayers()) {
      player.requireAction();
    }
    betting();
  }
Example #2
0
  /** Starts next player's turn until betting is over, then advances to next phase. */
  public void betting() {
    // Begin showdown phase if no players have to make remaining decisions
    int playersLeft = 0;
    int remaining = 0;
    for (PokerPlayer player : getPlayers()) {
      if (player.isInPlay()) {
        playersLeft++;
        if (!player.hasActed()) {
          remaining++;
        }
      }
    }
    if (playersLeft == 0 || (playersLeft == 1 && remaining == 0)) {
      showdown(false);
      return;
    }

    // Start next player's turn
    int playerCount = getPlayerCount();
    PokerPlayer nextPlayer = getPlayerTurn();
    int i = 0;
    while ((!nextPlayer.isInPlay() || nextPlayer.hasActed()) && i < playerCount) {
      nextPlayer();
      nextPlayer = getPlayerTurn();
      i++;
    }
    if (nextPlayer.isInPlay() && !nextPlayer.hasActed()) {
      nextPlayer.turnStart();
      return;
    }

    // Start next phase
    nextPhase();
  }
Example #3
0
  /**
   * Deals cards to the table's community cards and continues betting.
   *
   * @param cards The amount of cards to deal
   */
  public void bettingRound(int cards) {
    // Deal cards to the table
    dealTableCards(cards);

    // Start betting with player left of dealer (small blind)
    playerTurn = getPlayerCount() - 1;
    for (PokerPlayer player : getPlayers()) {
      player.requireAction();
    }
    betting();
  }
Example #4
0
  /** Posts blinds to the table's current small and big blind. */
  public void blinds() {
    int smallBlind = settings.getSmallBlind();
    PokerPlayer player = getSmallBlind();
    player.removeChips(smallBlind);
    player.raiseBet(smallBlind);
    pot.addChips(smallBlind);

    player = getBigBlind();
    int bigBlind = settings.getBigBlind();
    player.removeChips(bigBlind);
    player.raiseBet(bigBlind);
    pot.addChips(bigBlind);

    pot.raiseBet(bigBlind);
  }
Example #5
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;
  }