Java poker implementation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

OmahaHoldEm.java 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * Copyright (c) Chris 'MD87' Smith, 2007. All rights reserved.
  3. *
  4. * This code may not be redistributed without prior permission from the
  5. * aforementioned copyright holder(s).
  6. */
  7. package com.md87.cardgame.games;
  8. import com.md87.cardgame.Deck;
  9. import com.md87.cardgame.Player;
  10. import com.md87.cardgame.interfaces.Hand;
  11. import java.util.ArrayList;
  12. import java.util.Collections;
  13. import java.util.List;
  14. /**
  15. * Implements a standard (local) Omaha Hold'em game.
  16. *
  17. * @author Chris
  18. */
  19. public class OmahaHoldEm extends TexasHoldEm {
  20. public OmahaHoldEm(final int numplayers, final int bigblind, final int ante,
  21. final int raises) {
  22. super(numplayers, bigblind, ante, raises);
  23. }
  24. protected void startGame() {
  25. notifyNewGame();
  26. discardCards();
  27. shuffle();
  28. community.clear();
  29. doAntes();
  30. doBlinds();
  31. dealCard(players.get((dealer + 1) % numplayers), false);
  32. dealCard(players.get((dealer + 1) % numplayers), false);
  33. dealCard(players.get((dealer + 1) % numplayers), false);
  34. dealCard(players.get((dealer + 1) % numplayers), false);
  35. for (int i = 0; i < 5; i++) {
  36. community.add(deck.deal());
  37. }
  38. doneFlop = false;
  39. doneTurn = false;
  40. doneRiver = false;
  41. waitForBets();
  42. if (countPlayers(true, true, false) > 1) {
  43. doneFlop = true;
  44. doBettingRound();
  45. }
  46. if (countPlayers(true, true, false) > 1) {
  47. doneTurn = true;
  48. doBettingRound();
  49. }
  50. if (countPlayers(true, true, false) > 1) {
  51. doneRiver = true;
  52. doBettingRound();
  53. }
  54. if (countPlayers(true, true, false) > 1) {
  55. doShowDown();
  56. } else {
  57. doWinner();
  58. }
  59. for (Player player : players) {
  60. if (player.getCash() <= 0) {
  61. player.setOut();
  62. }
  63. }
  64. notifyEndGame();
  65. doDealerAdvance();
  66. }
  67. /** {@inheritDoc} */
  68. public int holeCardCount() {
  69. return 4;
  70. }
  71. @Override
  72. public Deck getBestDeck(final Deck cards) {
  73. if(cards.size() != 4) {
  74. System.err.println("getBestDeck(): card size != 4");
  75. new Exception().printStackTrace();
  76. return new Deck();
  77. }
  78. Deck tempCards = new Deck(cards);
  79. final List<Hand> hands = new ArrayList<Hand>();
  80. for (int i = 0; i < 4; i++) {
  81. for (int j = i + 1; j < 4; j++) {
  82. final Deck base = new Deck();
  83. base.add(tempCards.get(i));
  84. base.add(tempCards.get(j));
  85. for (int k = 0; k < 5; k++) {
  86. for (int l = k + 1; l < 5; l++) {
  87. final Deck myDeck = new Deck(getCommunityCards());
  88. myDeck.remove(getCommunityCards().get(k));
  89. myDeck.remove(getCommunityCards().get(l));
  90. myDeck.addAll(base);
  91. hands.add(getHand(myDeck));
  92. }
  93. }
  94. }
  95. }
  96. Collections.sort(hands);
  97. return hands.get(hands.size() - 1).getDeck();
  98. }
  99. }