public boolean isSlap() { int potSize = stackPot.size(); boolean pair = potSize >= 2 && Card.getRank(stackPot.get(0)) == Card.getRank(stackPot.get(1)); boolean sandwich = potSize >= 3 && Card.getRank(stackPot.get(0)) == Card.getRank(stackPot.get(2)); return pair || sandwich; }
private String topFiveCards() { String ranks = ""; int num = 0; while (num < 5 && num < stackPot.size()) { ranks += Card.toString(stackPot.get(num)) + ", "; num++; } return ranks; }
public void trySlap(int player) { log.finer(getPlayerName(player) + " is trying to slap: " + topFiveCards()); if (isSlap()) { // successful slap log.fine(getPlayerName(player) + " just slapped some cards!"); pickupPot(player); GamePanel.playNoiseSlap(); gamePanel.addRenderable( new RenderableImageKinetic(this, RenderableImageKinetic.SLAP, player)); } else if (player == topFacecardOwner && isFacecardPickup()) { // successful pickup log.fine(getPlayerName(player) + " picked up some cards"); pickupPot(player); GamePanel.playNoisePickup(); gamePanel.addRenderable( new RenderableImageKinetic(this, RenderableImageKinetic.PICKUP, player)); AI.registerEvent(AI.TYPENOTHING); // so the AI will make a move if it is their turn now } else if (stackPot.isEmpty()) { // if they slapped an empty pot // we don't punish them because this probably just means there was a slap, but someone else // has already picked it up. log.finer(getPlayerName(player) + " slapped an empty pot. (They did not have to burn)"); } else { burn(player); } }
public void tryFlip(int player) { if (player == playerTurn && !isFacecardPickup()) { // flipping GamePanel.playNoiseFlip(); stackPot.addToTop(playerCards.get(player).removeTopCard()); log.finer(getPlayerName(player) + " flipped the " + Card.toString(stackPot.getTopCard())); if (Card.isFaceCard(stackPot.getTopCard())) { topFacecardOwner = player; topFacecardMaxSize = Card.getRank(stackPot.getTopCard()); switch (topFacecardMaxSize) { case Card.ACE: topFacecardMaxSize = stackPot.size() + 4; break; case Card.KING: topFacecardMaxSize = stackPot.size() + 3; break; case Card.QUEEN: topFacecardMaxSize = stackPot.size() + 2; break; case Card.JACK: topFacecardMaxSize = stackPot.size() + 1; break; default: throw new RuntimeException( "This should never happen. A face card was not an ace, king, queen, or jack."); } turnIncrement(); } else if (topFacecardOwner == -1) { // if no facecards have been played this hand turnIncrement(); } if (playerCards.get(player).isEmpty()) { log.fine(getPlayerName(player) + " is eliminated because they flipped their last card"); eliminatePlayer(player); } if (isSlap()) { AI.registerEvent(AI.TYPESLAP); } else { AI.registerEvent(AI.TYPEFLIP); } } else { // flipping out of turn if (playerCards.get(player).isEmpty()) { // flipping out of turn but have no cards log.finer( getPlayerName(player) + " tried to flip a card even though they have no cards..."); } else { // flipping out of turn so burning log.fine(getPlayerName(player) + " tried to flip a card illegally and had to burn a card"); burn(player); } } }
private void pickupPot(int player) { playerTurn = player; // these operations get the same results as you would have IRL, even though we pretended that // stackBurn is facedown. stackPot.addToBottom(stackBurn); playerCards.get(player).addToBottom(stackPot); topFacecardMaxSize = -1; topFacecardOwner = -1; }
public void burn(int player) { CardStack playerCardStack = playerCards.get(player); if (playerCardStack.size() == 0) { JOptionPane.showMessageDialog( gamePanel, "A player with zero cards has to burn. This part of the game has not yet been coded, so they're being let off with no penalty.", "ERROR", JOptionPane.ERROR_MESSAGE); log.warning("Player with zero cards has to burn"); return; } else { stackBurn.addToTop(playerCardStack.removeTopCard()); if (playerCardStack.size() == 0 && playerTurn == player) { turnIncrement(); // if it's player's turn and they just burned their last card, it is now // the // next player's turn. AI.registerEvent(AI.TYPENOTHING); // so that if the next player is an AI, they will know its // their turn. eliminatePlayer(player); } } GamePanel.playNoiseBurn(); gamePanel.addRenderable(new RenderableImageKinetic(this, RenderableImageKinetic.BURN, player)); }
public boolean isFacecardPickup() { return topFacecardMaxSize == stackPot.size(); }