From 52cb6b4a45ed9b730f063ae3395daea8e5c6c0a8 Mon Sep 17 00:00:00 2001 From: imate Date: Fri, 17 Apr 2015 12:50:00 +0200 Subject: [PATCH] =?UTF-8?q?#15=20Kombin=C3=A1ci=C3=B3ban=20lev=C5=91=20k?= =?UTF-8?q?=C3=A1rty=C3=A1k=20kigy=C5=B1jt=C3=A9se=20list=C3=A1ba?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Az 'orderedCardList' változó visszaadja a legjobb 5 lapot rendezett formában; --- .../org/git_egylet/tools/RankComparator.java | 21 +++++++++ src/main/java/org/git_egylet/tools/Tools.java | 10 ++++ .../org/leanpoker/player/CheckConditions.java | 6 +-- .../leanpoker/player/checkCards/Check.java | 25 +++++++--- .../player/checkCards/CheckDrill.java | 41 +++++++++++++---- .../player/checkCards/CheckFlush.java | 36 +++++++++++---- .../player/checkCards/CheckFull.java | 37 ++++++++++++--- .../player/checkCards/CheckHighCard.java | 30 ++++++++---- .../player/checkCards/CheckOnePair.java | 40 +++++++++++++--- .../player/checkCards/CheckPoker.java | 39 +++++++++++++--- .../player/checkCards/CheckResult.java | 21 ++++++--- .../player/checkCards/CheckRiver.java | 8 ++-- .../player/checkCards/CheckRoyalFlush.java | 37 +++++++++++---- .../player/checkCards/CheckStraight.java | 46 ++++++++++++++----- .../player/checkCards/CheckStraightFlush.java | 42 ++++++++++++----- .../player/checkCards/CheckTwoPair.java | 36 +++++++++++++-- .../checkCards/{Hand.java => HandRank.java} | 2 +- .../leanpoker/player/strategies/Strategy.java | 4 +- .../org/leanpoker/player/CheckRiverTest.java | 6 +-- .../org/leanpoker/player/HandCheckerTest.java | 26 +++++------ 20 files changed, 393 insertions(+), 120 deletions(-) create mode 100644 src/main/java/org/git_egylet/tools/RankComparator.java rename src/main/java/org/leanpoker/player/checkCards/{Hand.java => HandRank.java} (88%) diff --git a/src/main/java/org/git_egylet/tools/RankComparator.java b/src/main/java/org/git_egylet/tools/RankComparator.java new file mode 100644 index 0000000..76827eb --- /dev/null +++ b/src/main/java/org/git_egylet/tools/RankComparator.java @@ -0,0 +1,21 @@ +package org.git_egylet.tools; + +import com.wcs.poker.gamestate.Card; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +/** + * + * @author imate + */ +public class RankComparator implements Comparator { + + private static final List ranks = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"); + + @Override + public int compare(Card c1, Card c2) { + return ranks.indexOf(c2.getRank()) - ranks.indexOf(c1.getRank()); + } + +} diff --git a/src/main/java/org/git_egylet/tools/Tools.java b/src/main/java/org/git_egylet/tools/Tools.java index 26ceaaf..42b7adb 100644 --- a/src/main/java/org/git_egylet/tools/Tools.java +++ b/src/main/java/org/git_egylet/tools/Tools.java @@ -1,8 +1,11 @@ package org.git_egylet.tools; import com.wcs.poker.gamestate.Card; +import java.util.AbstractList; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; /** @@ -31,4 +34,11 @@ public static List makeCardList(String... cards) { } return holeCards; } + + public static List orderCards(List cards) { + List orderedCards = new ArrayList<>(); + orderedCards.addAll(cards); + Collections.sort(orderedCards,new RankComparator()); + return orderedCards; + } } diff --git a/src/main/java/org/leanpoker/player/CheckConditions.java b/src/main/java/org/leanpoker/player/CheckConditions.java index ee7687c..c8716e7 100644 --- a/src/main/java/org/leanpoker/player/CheckConditions.java +++ b/src/main/java/org/leanpoker/player/CheckConditions.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; import org.leanpoker.player.checkCards.CheckResult; -import org.leanpoker.player.checkCards.Hand; +import org.leanpoker.player.checkCards.HandRank; import org.leanpoker.player.checkCards.HandChecker; import org.leanpoker.player.strategies.*; @@ -57,7 +57,7 @@ public int check() { private void preFlop() { HandChecker handChecker = new HandChecker(); CheckResult checkResult = handChecker.getResult(gameState); - Hand hand = checkResult.getHand(); + HandRank hand = checkResult.getHand(); String highRank1 = checkResult.getHighRank1(); switch (hand) { @@ -101,7 +101,7 @@ private void preFlop() { private void afterPreFlop() { HandChecker handChecker = new HandChecker(); CheckResult checkResult = handChecker.getResult(gameState); - Hand hand = checkResult.getHand(); + HandRank hand = checkResult.getHand(); String highRank1 = checkResult.getHighRank1(); String highRank2 = checkResult.getHighRank2(); diff --git a/src/main/java/org/leanpoker/player/checkCards/Check.java b/src/main/java/org/leanpoker/player/checkCards/Check.java index 2df8479..68918d0 100644 --- a/src/main/java/org/leanpoker/player/checkCards/Check.java +++ b/src/main/java/org/leanpoker/player/checkCards/Check.java @@ -1,6 +1,7 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -13,31 +14,41 @@ public abstract class Check { protected static final List ranks = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"); protected static final List suits = Arrays.asList("clubs", "diamonds", "hearts", "spades"); protected List cards; - protected Hand hand; + protected List orderedCardList; + protected HandRank handRank; protected String highRank1; protected String highRank2; protected int myCardsOfHand; public CheckResult getResult(List cards) { - hand = null; - highRank1 = ""; - highRank2 = ""; - myCardsOfHand = 0; + initValues(); this.cards = cards; check(); - if (hand == null) { + if (handRank == null) { return null; } else { - return new CheckResult(hand, highRank1, highRank2, myCardsOfHand); + return new CheckResult(handRank, orderedCardList, highRank1, highRank2, myCardsOfHand); } } protected abstract void check(); + protected abstract void calcMyCardsOfHand(); + + protected abstract void makeOrderedCardList(); + public boolean isApplicable(List cards) { return getResult(cards) != null; } + private void initValues() { + handRank = null; + highRank1 = ""; + highRank2 = ""; + myCardsOfHand = 0; + orderedCardList = new ArrayList<>(); + } + protected int countRank(String rank) { int i = 0; for (Card card : cards) { diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckDrill.java b/src/main/java/org/leanpoker/player/checkCards/CheckDrill.java index e96dcc4..2d3ef5f 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckDrill.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckDrill.java @@ -1,6 +1,7 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -13,18 +14,42 @@ public class CheckDrill extends Check { protected void check() { for (String rank : ranks) { if (countRank(rank) == 3) { - hand = Hand.DRILL; + handRank = HandRank.DRILL; highRank1 = rank; } } - - //myCardsOfHand kiszámítása: - if (hand != null) { - for (Card card : cards) { - if (card.isInMyHand() && card.getRank().equals(highRank1)) { - myCardsOfHand++; - } + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + for (Card card : cards) { + if (card.isInMyHand() && card.getRank().equals(highRank1)) { + myCardsOfHand++; + } + } + } + + @Override + protected void makeOrderedCardList() { + for (Card card : cards) { + if (card.isEqualRank(highRank1)) { + orderedCardList.add(card); + //cards.remove(card); ez sajnos nem jött be (ConcurrentModificationException) + } + } + cards = Tools.orderCards(cards); + int i = 0; + Card actCard; + while (orderedCardList.size() < 5) { + actCard = cards.get(i); + if (!actCard.isEqualRank(highRank1)) { + orderedCardList.add(actCard); } + i++; } } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckFlush.java b/src/main/java/org/leanpoker/player/checkCards/CheckFlush.java index eab731b..6196439 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckFlush.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckFlush.java @@ -1,6 +1,8 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import java.util.List; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -9,17 +11,18 @@ */ public class CheckFlush extends Check { + private String flushSuit = ""; + @Override protected void check() { - String flushSuit = ""; for (String suit : suits) { if (countSuit(suit) >= 5) { - hand = Hand.FLUSH; + handRank = HandRank.FLUSH; flushSuit = suit; } } //legmagasabb lap kiszámítása flush esetén - if (hand == hand.FLUSH) { + if (handRank == handRank.FLUSH) { for (String rank : ranks) { if (countRank(rank) > 0) { highRank1 = rank; @@ -27,14 +30,29 @@ protected void check() { } } - //myCardsOfHand kiszámítása: - if (hand != null) { - for (Card card : cards) { - if (card.isInMyHand() && card.getSuit().equals(flushSuit)) { - myCardsOfHand++; - } + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + for (Card card : cards) { + if (card.isInMyHand() && card.getSuit().equals(flushSuit)) { + myCardsOfHand++; + } + } + } + + @Override + protected void makeOrderedCardList() { + for (Card card : cards) { + if (card.isEqualSuit(flushSuit)) { + orderedCardList.add(card); } } + orderedCardList = Tools.orderCards(orderedCardList); } } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckFull.java b/src/main/java/org/leanpoker/player/checkCards/CheckFull.java index 5019c20..cde7520 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckFull.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckFull.java @@ -1,6 +1,8 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import java.util.ArrayList; +import java.util.List; import static org.leanpoker.player.checkCards.Check.*; /** @@ -24,19 +26,40 @@ protected void check() { for (String rank : ranks) { if (countRank(rank) == 2) { highRank2 = rank; - hand = Hand.FULL; + handRank = HandRank.FULL; } } } - //myCardsOfHand kiszámítása: - if (hand != null) { - for (Card card : cards) { - if (card.isInMyHand() && (card.getRank().equals(highRank1) || card.getRank().equals(highRank2))) { - myCardsOfHand++; - } + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + for (Card card : cards) { + if (card.isInMyHand() && (card.getRank().equals(highRank1) || card.getRank().equals(highRank2))) { + myCardsOfHand++; + } + } + } + + @Override + protected void makeOrderedCardList() { + List drillCards = new ArrayList<>(); + List pairCards = new ArrayList<>(); + for (Card card : cards) { + if (card.isEqualRank(highRank1)) { + drillCards.add(card); + } + if (card.isEqualRank(highRank2)) { + pairCards.add(card); } } + orderedCardList.addAll(drillCards); + orderedCardList.addAll(pairCards); } } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckHighCard.java b/src/main/java/org/leanpoker/player/checkCards/CheckHighCard.java index 169cdd6..b142b04 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckHighCard.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckHighCard.java @@ -1,7 +1,6 @@ package org.leanpoker.player.checkCards; -import com.wcs.poker.gamestate.Card; -import static org.leanpoker.player.checkCards.Check.*; +import org.git_egylet.tools.Tools; /** * @@ -11,13 +10,26 @@ public class CheckHighCard extends Check { @Override protected void check() { - for (String rank : ranks) { - for (Card card : cards) { - if (card.isInMyHand() && card.isEqualRank(rank)) { - highRank1 = rank; - hand = Hand.HIGH_CARD; - myCardsOfHand = 1; - } + handRank = HandRank.HIGH_CARD; + makeOrderedCardList(); + highRank1 = orderedCardList.get(0).getRank(); + highRank2 = orderedCardList.get(1).getRank(); + } + + @Override + protected void calcMyCardsOfHand() { + } + + @Override + protected void makeOrderedCardList() { + cards = Tools.orderCards(cards); + int i = 0; + if (cards.size() == 2) { + orderedCardList.addAll(cards); + } else { + while (orderedCardList.size() < 5) { + orderedCardList.add(cards.get(i)); + i++; } } } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckOnePair.java b/src/main/java/org/leanpoker/player/checkCards/CheckOnePair.java index 5592c8d..fd65a3b 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckOnePair.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckOnePair.java @@ -1,6 +1,7 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -13,19 +14,46 @@ public class CheckOnePair extends Check { protected void check() { for (String rank : ranks) { if (countRank(rank) == 2) { - hand = Hand.ONE_PAIR; + handRank = HandRank.ONE_PAIR; highRank1 = rank; } } - //myCardsOfHand kiszámítása: - if (hand != null) { + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + for (Card card : cards) { + if (card.isInMyHand() && card.getRank().equals(highRank1)) { + myCardsOfHand++; + } + } + } + + @Override + protected void makeOrderedCardList() { + cards = Tools.orderCards(cards); + if (cards.size() == 2) { + orderedCardList.addAll(cards); + } else { for (Card card : cards) { - if (card.isInMyHand() && card.getRank().equals(highRank1)) { - myCardsOfHand++; + if (card.isEqualRank(highRank1)) { + orderedCardList.add(card); } } + int i = 0; + Card actCard; + while (orderedCardList.size() < 5) { + actCard = cards.get(i); + if (!actCard.isEqualRank(highRank1)) { + orderedCardList.add(actCard); + } + i++; + } } } - } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckPoker.java b/src/main/java/org/leanpoker/player/checkCards/CheckPoker.java index 08333ba..9f43ca9 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckPoker.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckPoker.java @@ -1,6 +1,7 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -13,18 +14,42 @@ public class CheckPoker extends Check { protected void check() { for (String rank : ranks) { if (countRank(rank) == 4) { - hand = Hand.POKER; + handRank = HandRank.POKER; highRank1 = rank; } } - //myCardsOfHand kiszámítása: - if (hand != null) { - for (Card card : cards) { - if (card.isInMyHand() && card.getRank().equals(highRank1)) { - myCardsOfHand++; - } + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + for (Card card : cards) { + if (card.isInMyHand() && card.getRank().equals(highRank1)) { + myCardsOfHand++; + } + } + } + + @Override + protected void makeOrderedCardList() { + for (Card card : cards) { + if (card.isEqualRank(highRank1)) { + orderedCardList.add(card); + } + } + cards = Tools.orderCards(cards); + int i = 0; + Card actCard; + while (orderedCardList.size() < 5) { + actCard = cards.get(i); + if (!actCard.isEqualRank(highRank1)) { + orderedCardList.add(actCard); } + i++; } } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckResult.java b/src/main/java/org/leanpoker/player/checkCards/CheckResult.java index 9f5e771..57e7e7e 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckResult.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckResult.java @@ -1,27 +1,38 @@ package org.leanpoker.player.checkCards; +import com.wcs.poker.gamestate.Card; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + /** * * @author imate */ public class CheckResult { - private Hand hand; + private HandRank hand; private String highRank1; private String highRank2; private int myCardsOfHand; + private final Collection cards; - public CheckResult(Hand hand, String highRank1, String highRank2, int myCardsOfHand) { + public CheckResult(HandRank hand, List cards, String highRank1, String highRank2, int myCardsOfHand) { this.hand = hand; this.highRank1 = highRank1; this.highRank2 = highRank2; this.myCardsOfHand = myCardsOfHand; + this.cards = Collections.unmodifiableCollection(cards); } - public Hand getHand() { + public HandRank getHand() { return hand; } + public Collection getCards() { + return cards; + } + public String getHighRank1() { return highRank1; } @@ -34,10 +45,6 @@ public int getMyCardsOfHand() { return myCardsOfHand; } - public void setMyCardsOfHand(int myCardsOfHand) { - this.myCardsOfHand = myCardsOfHand; - } - @Override public String toString() { return "CheckResult{" + "hand=" + hand + ", highRank1=" + highRank1 + ", highRank2=" + highRank2 + '}'; diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckRiver.java b/src/main/java/org/leanpoker/player/checkCards/CheckRiver.java index 09d4bfc..d254bf5 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckRiver.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckRiver.java @@ -27,12 +27,12 @@ public CheckRiver(GameState gState) { - public Hand mayCombination(){ - Hand combination=null; + public HandRank mayCombination(){ + HandRank combination=null; CheckResult result=cPair.getResult(gState.getCommunityCards()); if (result!=null) { - combination=Hand.DRILL; + combination=HandRank.DRILL; } @@ -45,7 +45,7 @@ public Hand mayCombination(){ } } if (count==4) { - combination=Hand.ROYAL_FLUSH; + combination=HandRank.ROYAL_FLUSH; } count=0; } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckRoyalFlush.java b/src/main/java/org/leanpoker/player/checkCards/CheckRoyalFlush.java index d5137a2..2c85aa5 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckRoyalFlush.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckRoyalFlush.java @@ -8,11 +8,12 @@ * @author imate */ public class CheckRoyalFlush extends Check { - + + private String[] royalRanks = {"10", "J", "Q", "K", "A"}; + private String flushSuit = ""; + @Override protected void check() { - String[] royalRanks = {"10", "J", "Q", "K", "A"}; - String flushSuit = ""; boolean royalFlush; for (String suit : suits) { royalFlush = true; @@ -24,13 +25,20 @@ protected void check() { } if (royalFlush) { flushSuit = suit; - hand = Hand.ROYAL_FLUSH; + handRank = HandRank.ROYAL_FLUSH; break; } } - - //myCardsOfHand kiszámítása: - if (hand != null) { + + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + if (handRank != null) { for (Card card : cards) { for (String rank : royalRanks) { if (card.isInMyHand() && card.equals(rank, flushSuit)) { @@ -40,4 +48,17 @@ protected void check() { } } } -} + + @Override + protected void makeOrderedCardList() { + String rank; + for (int i = royalRanks.length - 1; i >= 0; i--) { + rank = royalRanks[i]; + for (Card card : cards) { + if (card.isEqualRank(rank)&& card.isEqualSuit(flushSuit)) { + orderedCardList.add(card); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckStraight.java b/src/main/java/org/leanpoker/player/checkCards/CheckStraight.java index 3243f5e..b8db05d 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckStraight.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckStraight.java @@ -1,6 +1,7 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -9,6 +10,8 @@ */ public class CheckStraight extends Check { + private String[] ranksOfStraight; + @Override protected void check() { int straightCounter = 0; @@ -31,24 +34,17 @@ protected void check() { } if (isStraight) { - hand = Hand.STRAIGHT; + handRank = HandRank.STRAIGHT; } - //myCardsOfHand kiszámítása: - if (hand != null) { - String[] ranksOfStraight = getRanksOfStraight(ranks.indexOf(highRank1)); - for (Card card : cards) { - for (String rank : ranksOfStraight) { - if (card.isInMyHand() && card.isEqualRank(rank)) { - myCardsOfHand++; - } - } - } + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); } } private String[] getRanksOfStraight(int highRankIndex) { - String[] ranksOfStraight = new String[5]; + ranksOfStraight = new String[5]; ranksOfStraight[4] = ranks.get(highRankIndex); ranksOfStraight[3] = ranks.get(highRankIndex - 1); ranksOfStraight[2] = ranks.get(highRankIndex - 2); @@ -61,4 +57,30 @@ private String[] getRanksOfStraight(int highRankIndex) { return ranksOfStraight; } + @Override + protected void calcMyCardsOfHand() { + ranksOfStraight = getRanksOfStraight(ranks.indexOf(highRank1)); + for (Card card : cards) { + for (String rank : ranksOfStraight) { + if (card.isInMyHand() && card.isEqualRank(rank)) { + myCardsOfHand++; + } + } + } + } + + @Override + protected void makeOrderedCardList() { + String rank; + for (int i = ranksOfStraight.length - 1; i >= 0; i--) { + rank = ranksOfStraight[i]; + for (Card card : cards) { + if (card.isEqualRank(rank)) { + orderedCardList.add(card); + break; + } + } + } + } + } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckStraightFlush.java b/src/main/java/org/leanpoker/player/checkCards/CheckStraightFlush.java index 160f828..d3bdcce 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckStraightFlush.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckStraightFlush.java @@ -2,6 +2,7 @@ import com.wcs.poker.gamestate.Card; import java.util.Arrays; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -10,11 +11,12 @@ */ public class CheckStraightFlush extends Check { + private String flushSuit = ""; + private String[] ranksOfStraight = null; + @Override protected void check() { CheckResult straightCheckResult = new CheckStraight().getResult(cards); - String[] ranksOfStraight = null; - String flushSuit = ""; if (straightCheckResult != null) { boolean isFlush = false; int highRankIndex = ranks.indexOf(straightCheckResult.getHighRank1()); @@ -34,22 +36,18 @@ protected void check() { } if (isFlush) { highRank1 = straightCheckResult.getHighRank1(); - hand = Hand.STRAIGH_FLUSH; + handRank = HandRank.STRAIGH_FLUSH; } - //myCardsOfHand kiszámítása: - if (hand != null) { - for (Card card : cards) { - if (card.isInMyHand() && card.isEqualSuit(flushSuit) && Arrays.asList(ranksOfStraight).contains(card.getRank())) { - myCardsOfHand++; - } - } + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); } } } private String[] getRanksOfStraight(int highRankIndex) { - String[] ranksOfStraight = new String[5]; + ranksOfStraight = new String[5]; ranksOfStraight[4] = ranks.get(highRankIndex); ranksOfStraight[3] = ranks.get(highRankIndex - 1); ranksOfStraight[2] = ranks.get(highRankIndex - 2); @@ -62,4 +60,26 @@ private String[] getRanksOfStraight(int highRankIndex) { return ranksOfStraight; } + @Override + protected void calcMyCardsOfHand() { + for (Card card : cards) { + if (card.isInMyHand() && card.isEqualSuit(flushSuit) && Arrays.asList(ranksOfStraight).contains(card.getRank())) { + myCardsOfHand++; + } + } + } + + @Override + protected void makeOrderedCardList() { + String rank; + for (int i = ranksOfStraight.length - 1; i >= 0; i--) { + rank = ranksOfStraight[i]; + for (Card card : cards) { + if (card.isEqualRank(rank) && card.isEqualSuit(flushSuit)) { + orderedCardList.add(card); + break; + } + } + } + } } diff --git a/src/main/java/org/leanpoker/player/checkCards/CheckTwoPair.java b/src/main/java/org/leanpoker/player/checkCards/CheckTwoPair.java index c2e7b8f..55f55d3 100644 --- a/src/main/java/org/leanpoker/player/checkCards/CheckTwoPair.java +++ b/src/main/java/org/leanpoker/player/checkCards/CheckTwoPair.java @@ -1,6 +1,9 @@ package org.leanpoker.player.checkCards; import com.wcs.poker.gamestate.Card; +import java.util.ArrayList; +import java.util.List; +import org.git_egylet.tools.Tools; import static org.leanpoker.player.checkCards.Check.*; /** @@ -21,11 +24,18 @@ protected void check() { } } if (numberOfPairs >= 2) { - hand = Hand.TWO_PAIR; + handRank = HandRank.TWO_PAIR; } - //myCardsOfHand kiszámítása: - if (hand != null) { + if (handRank != null) { + calcMyCardsOfHand(); + makeOrderedCardList(); + } + } + + @Override + protected void calcMyCardsOfHand() { + if (handRank != null) { for (Card card : cards) { if (card.isInMyHand() && (card.getRank().equals(highRank1) || card.getRank().equals(highRank2))) { myCardsOfHand++; @@ -34,4 +44,24 @@ protected void check() { } } + @Override + protected void makeOrderedCardList() { + List pair1Cards = new ArrayList<>(); + List pair2Cards = new ArrayList<>(); + Card lastCard = null; + cards = Tools.orderCards(cards); + for (Card card : cards) { + if (card.isEqualRank(highRank1)) { + pair1Cards.add(card); + } else if (card.isEqualRank(highRank2)) { + pair2Cards.add(card); + } else if (lastCard == null) { + lastCard = card; + } + } + orderedCardList.addAll(pair1Cards); + orderedCardList.addAll(pair2Cards); + orderedCardList.add(lastCard); + } + } diff --git a/src/main/java/org/leanpoker/player/checkCards/Hand.java b/src/main/java/org/leanpoker/player/checkCards/HandRank.java similarity index 88% rename from src/main/java/org/leanpoker/player/checkCards/Hand.java rename to src/main/java/org/leanpoker/player/checkCards/HandRank.java index cf5004c..e93dbd4 100644 --- a/src/main/java/org/leanpoker/player/checkCards/Hand.java +++ b/src/main/java/org/leanpoker/player/checkCards/HandRank.java @@ -4,7 +4,7 @@ * * @author imate */ -public enum Hand { +public enum HandRank { HIGH_CARD, ONE_PAIR, TWO_PAIR, DRILL, STRAIGHT, FLUSH, FULL, POKER, STRAIGH_FLUSH, ROYAL_FLUSH } diff --git a/src/main/java/org/leanpoker/player/strategies/Strategy.java b/src/main/java/org/leanpoker/player/strategies/Strategy.java index b4b8e6c..b9350bd 100644 --- a/src/main/java/org/leanpoker/player/strategies/Strategy.java +++ b/src/main/java/org/leanpoker/player/strategies/Strategy.java @@ -7,7 +7,7 @@ import com.wcs.poker.gamestate.GameState; import org.leanpoker.player.checkCards.CheckResult; -import org.leanpoker.player.checkCards.Hand; +import org.leanpoker.player.checkCards.HandRank; import org.leanpoker.player.checkCards.HandChecker; /** @@ -16,7 +16,7 @@ */ public abstract class Strategy { - protected Hand hand; + protected HandRank hand; protected String highRank1; protected String highRank2; protected int myCardsOfHand; diff --git a/src/test/java/org/leanpoker/player/CheckRiverTest.java b/src/test/java/org/leanpoker/player/CheckRiverTest.java index 1354169..7d0b22c 100644 --- a/src/test/java/org/leanpoker/player/CheckRiverTest.java +++ b/src/test/java/org/leanpoker/player/CheckRiverTest.java @@ -10,7 +10,7 @@ import org.junit.Test; import static org.junit.Assert.*; import org.leanpoker.player.checkCards.CheckRiver; -import org.leanpoker.player.checkCards.Hand; +import org.leanpoker.player.checkCards.HandRank; /** * @@ -25,7 +25,7 @@ public void testMayPair(){ CheckRiver cRiver=new CheckRiver(gameState); - assertTrue(cRiver.mayCombination()==Hand.DRILL); + assertTrue(cRiver.mayCombination()==HandRank.DRILL); } @Test @@ -35,7 +35,7 @@ public void testMayRoyalFlush(){ CheckRiver cRiver=new CheckRiver(gameState); - assertTrue(cRiver.mayCombination()==Hand.ROYAL_FLUSH); + assertTrue(cRiver.mayCombination()==HandRank.ROYAL_FLUSH); } } diff --git a/src/test/java/org/leanpoker/player/HandCheckerTest.java b/src/test/java/org/leanpoker/player/HandCheckerTest.java index 872ae01..2182a2f 100644 --- a/src/test/java/org/leanpoker/player/HandCheckerTest.java +++ b/src/test/java/org/leanpoker/player/HandCheckerTest.java @@ -7,7 +7,7 @@ import com.wcs.poker.gamestate.Player; import org.git_egylet.tools.Tools; import org.leanpoker.player.checkCards.CheckResult; -import org.leanpoker.player.checkCards.Hand; +import org.leanpoker.player.checkCards.HandRank; import org.leanpoker.player.checkCards.HandChecker; /** @@ -27,9 +27,9 @@ public void testHighCard() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.HIGH_CARD); - assertEquals(result.getHighRank1(), "J"); - assertEquals(result.getHighRank2(), ""); + assertEquals(result.getHand(), HandRank.HIGH_CARD); + assertEquals(result.getHighRank1(), "Q"); + assertEquals(result.getHighRank2(), "J"); } @Test @@ -39,7 +39,7 @@ public void testOnePair() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.ONE_PAIR); + assertEquals(result.getHand(), HandRank.ONE_PAIR); assertEquals(result.getHighRank1(), "4"); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 1); @@ -52,7 +52,7 @@ public void testTwoPair() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.TWO_PAIR); + assertEquals(result.getHand(), HandRank.TWO_PAIR); assertEquals(result.getHighRank1(), "6"); assertEquals(result.getHighRank2(), "2"); assertEquals(result.getMyCardsOfHand(), 2); @@ -66,7 +66,7 @@ public void testDrill() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.DRILL); + assertEquals(result.getHand(), HandRank.DRILL); assertEquals(result.getHighRank1(), "J"); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 2); @@ -79,7 +79,7 @@ public void testStraight() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.STRAIGHT); + assertEquals(result.getHand(), HandRank.STRAIGHT); assertEquals(result.getHighRank1(), "9"); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 1); @@ -92,7 +92,7 @@ public void testFlush() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.FLUSH); + assertEquals(result.getHand(), HandRank.FLUSH); assertEquals(result.getHighRank1(), "J"); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 1); @@ -105,7 +105,7 @@ public void testFull() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.FULL); + assertEquals(result.getHand(), HandRank.FULL); assertEquals(result.getHighRank1(), "J"); assertEquals(result.getHighRank2(), "5"); assertEquals(result.getMyCardsOfHand(), 1); @@ -119,7 +119,7 @@ public void testPoker() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.POKER); + assertEquals(result.getHand(), HandRank.POKER); assertEquals(result.getHighRank1(), "8"); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 2); @@ -132,7 +132,7 @@ public void testStraightFlush() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.STRAIGH_FLUSH); + assertEquals(result.getHand(), HandRank.STRAIGH_FLUSH); assertEquals(result.getHighRank1(), "7"); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 2); @@ -145,7 +145,7 @@ public void testRoyalFlush() { gameState.setPlayers(Arrays.asList(player1)); CheckResult result = handChecker.getResult(gameState); - assertEquals(result.getHand(), Hand.ROYAL_FLUSH); + assertEquals(result.getHand(), HandRank.ROYAL_FLUSH); assertEquals(result.getHighRank1(), ""); assertEquals(result.getHighRank2(), ""); assertEquals(result.getMyCardsOfHand(), 1);