package com.bassoli.poker; public class PocketBoardAnalyzer { public static boolean pairedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); if (cards[0].getValueInt() == cards[1].getValueInt()) return true; for (int i = 0 ; i < cards.length ; i++) { for (int j = 0 ; j < boards.length ; j++) { if (cards[i].getValueInt() == boards[j].getValueInt()) return true; } } return false; } public static boolean pairOnBoard(Hand board) { if (HandAnalyzer.pairWinCode(board.getCards()) != null) return true; else return false; } public static boolean twoPairedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); boolean[] trigger = new boolean[2]; if (cards[0].getValueInt() == cards[1].getValueInt()) return false; for (int i = 0 ; i < cards.length ; i++) { trigger[i] = false; for (int j = 0 ; j < boards.length ; j++) { if (cards[i].getValueInt() == boards[j].getValueInt()) trigger[i] = true; } } return trigger[0]&&trigger[1]; } public static boolean tripledUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); if (cards[0].getValueInt() == cards[1].getValueInt()) { for (int i = 0 ; i < boards.length ; i++) { if (cards[0].getValueInt() == boards[i].getValueInt()) return true; } return false; } else { for (int i = 0 ; i < cards.length ; i++) { int count = 0; for (int j = 0 ; j < boards.length ; j++) { if (cards[i].getValueInt() == boards[j].getValueInt()) count++; } if (count > 1) return true; } return false; } } public static boolean trippleOnBoard(Hand board) { if (HandAnalyzer.threeKindWinCode(board.getCards()) != null) return true; else return false; } public static boolean fullHousedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards.length ; i++) { newHand.addCard(cards[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } String winCode; if ((winCode = HandAnalyzer.fullHouseWinCode(newHand.getCards())) != null) { for (int i = 2 ; i < 4 ; i++) { char alpha = winCode.charAt(i); int value = Card.getValueInt(alpha); for (int j = 0 ; j < cards.length ; j++) { if (cards[j].getValueInt() == value) return true; } } return false; } else return false; } public static boolean quadedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards.length ; i++) { newHand.addCard(cards[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } String winCode; if ((winCode = HandAnalyzer.fourKindWinCode(newHand.getCards())) != null) { char alpha = winCode.charAt(2); int value = Card.getValueInt(alpha); for (int j = 0 ; j < cards.length ; j++) { if (cards[j].getValueInt() == value) return true; } return false; } else return false; } public static boolean insideStraight(Card[] pocket, Card[] cards) { Card[] newCards = SortHand.removeDuplicates(cards); SortHand.sort(newCards); for (int i = 0 ; i < newCards.length-3 ; i++) { if (newCards[i].getValueInt() - newCards[i+3].getValueInt() < 5) { for (int j = 0 ; j < pocket.length ; j++) { if ((pocket[j].getValueInt() <= newCards[i].getValueInt())&&(pocket[j].getValueInt() >= newCards[i+3].getValueInt())) return true; } return false; } } SortHand.sort_aceProvision(newCards); for (int i = 0 ; i < newCards.length-3 ; i++) { if (newCards[i].getValueInt()%13 - newCards[i+3].getValueInt()%13 < 5) { for (int j = 0 ; j < pocket.length ; j++) { if ((pocket[j].getValueInt()%13 <= newCards[i].getValueInt()%13)&&(pocket[j].getValueInt()%13 >= newCards[i+3].getValueInt()%13)) return true; } return false; } } return false; } public static boolean insideStraight(Hand hand, Hand board) { Card[] cards2 = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards2.length ; i++) { newHand.addCard(cards2[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } Card[] cards = newHand.getCards(); Card[] newCards = SortHand.removeDuplicates(cards); SortHand.sort(newCards); for (int i = 0 ; i < newCards.length-3 ; i++) { if (newCards[i].getValueInt() - newCards[i+3].getValueInt() < 5) { for (int j = 0 ; j < cards2.length ; j++) { if ((cards2[j].getValueInt() <= newCards[i].getValueInt())&&(cards2[j].getValueInt() >= newCards[i+3].getValueInt())) return true; } return false; } } SortHand.sort_aceProvision(newCards); for (int i = 0 ; i < newCards.length-3 ; i++) { if (newCards[i].getValueInt()%13 - newCards[i+3].getValueInt()%13 < 5) { for (int j = 0 ; j < cards2.length ; j++) { if ((cards2[j].getValueInt()%13 <= newCards[i].getValueInt()%13)&&(cards2[j].getValueInt()%13 >= newCards[i+3].getValueInt()%13)) return true; } return false; } } return false; } public static boolean outsideStraight(Card[] pocket, Card[] cards) { Card[] newCards = SortHand.removeDuplicates(cards); SortHand.sort(newCards); if (newCards.length < 4) return false; int combo = 0; int prev = 0; //for 2345 for (int i = 0 ; i < newCards.length ; i++) { if (newCards[i].getValueInt() == 13) continue; if (prev-1 == newCards[i].getValueInt()) combo++; else combo = 0; prev = newCards[i].getValueInt(); if (combo > 2) return true; } //for A3457 if (newCards.length < 5) return false; for (int i = 0 ; i < newCards.length - 4 ; i++) { if (newCards[i].getValueInt()-2 != newCards[i+1].getValueInt()) continue; if (newCards[i+1].getValueInt()-1 != newCards[i+2].getValueInt()) continue; if (newCards[i+2].getValueInt()-1 != newCards[i+3].getValueInt()) continue; if (newCards[i+3].getValueInt()-2 == newCards[i+4].getValueInt()) { for (int j = 0 ; j < pocket.length ; j++) { if (newCards[i].getValueInt() == pocket[j].getValueInt()) { for (int x = 0 ; x < pocket.length ; x++) { if (newCards[i+4].getValueInt() == pocket[x].getValueInt()) return true; } } if (newCards[i+1].getValueInt() == pocket[j].getValueInt()) return true; if (newCards[i+2].getValueInt() == pocket[j].getValueInt()) return true; if (newCards[i+3].getValueInt() == pocket[j].getValueInt()) return true; if (newCards[i+4].getValueInt() == pocket[j].getValueInt()) { for (int x = 0 ; x < pocket.length ; x++) { if (newCards[i].getValueInt() == pocket[x].getValueInt()) return true; } } } return false; //return true; } } SortHand.sort_aceProvision(newCards); for (int i = 0 ; i < newCards.length - 4 ; i++) { if (newCards[i].getValueInt()-2 != newCards[i+1].getValueInt()%13) continue; if (newCards[i+1].getValueInt()-1 != newCards[i+2].getValueInt()%13) continue; if (newCards[i+2].getValueInt()-1 != newCards[i+3].getValueInt()%13) continue; if (newCards[i+3].getValueInt()-2 == newCards[i+4].getValueInt()%13) { for (int j = 0 ; j < pocket.length ; j++) { if (newCards[i].getValueInt() == pocket[j].getValueInt()) { for (int x = 0 ; x < pocket.length ; x++) { if (newCards[i+4].getValueInt() == pocket[x].getValueInt()) return true; } } if (newCards[i+1].getValueInt() == pocket[j].getValueInt()) return true; if (newCards[i+2].getValueInt() == pocket[j].getValueInt()) return true; if (newCards[i+3].getValueInt() == pocket[j].getValueInt()) return true; if (newCards[i+4].getValueInt() == pocket[j].getValueInt()) { for (int x = 0 ; x < pocket.length ; x++) { if (newCards[i].getValueInt() == pocket[x].getValueInt()) return true; } } } return false; //return true; } } return false; } public static boolean outsideStraight(Hand hand, Hand board) { Card[] cards2 = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards2.length ; i++) { newHand.addCard(cards2[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } Card[] cards = newHand.getCards(); Card[] newCards = SortHand.removeDuplicates(cards); SortHand.sort(newCards); if (newCards.length < 4) return false; int combo = 0; int prev = 0; //for 2345 for (int i = 0 ; i < newCards.length ; i++) { if (newCards[i].getValueInt() == 13) continue; if (prev-1 == newCards[i].getValueInt()) combo++; else combo = 0; prev = newCards[i].getValueInt(); if (combo > 2) { for (int j = 0 ; j < cards2.length ; j++) { for (int x = i - combo ; x <= i ; x++) { if (cards2[j].getValueInt() == newCards[x].getValueInt()) return true; } } return false; //return true; } } //for A3457 if (newCards.length < 5) return false; for (int i = 0 ; i < newCards.length - 4 ; i++) { if (newCards[i].getValueInt()-2 != newCards[i+1].getValueInt()) continue; if (newCards[i+1].getValueInt()-1 != newCards[i+2].getValueInt()) continue; if (newCards[i+2].getValueInt()-1 != newCards[i+3].getValueInt()) continue; if (newCards[i+3].getValueInt()-2 == newCards[i+4].getValueInt()) { for (int j = 0 ; j < cards2.length ; j++) { if (newCards[i].getValueInt() == cards2[j].getValueInt()) { for (int x = 0 ; x < cards2.length ; x++) { if (newCards[i+4].getValueInt() == cards2[x].getValueInt()) return true; } } if (newCards[i+1].getValueInt() == cards2[j].getValueInt()) return true; if (newCards[i+2].getValueInt() == cards2[j].getValueInt()) return true; if (newCards[i+3].getValueInt() == cards2[j].getValueInt()) return true; if (newCards[i+4].getValueInt() == cards2[j].getValueInt()) { for (int x = 0 ; x < cards2.length ; x++) { if (newCards[i].getValueInt() == cards2[x].getValueInt()) return true; } } } return false; //return true; } } SortHand.sort_aceProvision(newCards); for (int i = 0 ; i < newCards.length - 4 ; i++) { if (newCards[i].getValueInt()-2 != newCards[i+1].getValueInt()%13) continue; if (newCards[i+1].getValueInt()-1 != newCards[i+2].getValueInt()%13) continue; if (newCards[i+2].getValueInt()-1 != newCards[i+3].getValueInt()%13) continue; if (newCards[i+3].getValueInt()-2 == newCards[i+4].getValueInt()%13) { for (int j = 0 ; j < cards2.length ; j++) { if (newCards[i].getValueInt() == cards2[j].getValueInt()) { for (int x = 0 ; x < cards2.length ; x++) { if (newCards[i+4].getValueInt() == cards2[x].getValueInt()) return true; } } if (newCards[i+1].getValueInt() == cards2[j].getValueInt()) return true; if (newCards[i+2].getValueInt() == cards2[j].getValueInt()) return true; if (newCards[i+3].getValueInt() == cards2[j].getValueInt()) return true; if (newCards[i+4].getValueInt() == cards2[j].getValueInt()) { for (int x = 0 ; x < cards2.length ; x++) { if (newCards[i].getValueInt() == cards2[x].getValueInt()) return true; } } } return false; } } return false; } public static boolean straightedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards.length ; i++) { newHand.addCard(cards[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } String winCode; if ((winCode = HandAnalyzer.straightWinCode(newHand.getCards())) != null) { char alpha = winCode.charAt(2); int value = Card.getValueInt(alpha); for (int j = 0 ; j < cards.length ; j++) { if ((cards[j].getValueInt() <= value)&&(cards[j].getValueInt() >= value-4)) return true; } return false; } else return false; } public static boolean twoToFlush(Hand hand, Hand board) { Card[] cards2 = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards2.length ; i++) { newHand.addCard(cards2[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } Card[] cards = newHand.getCards(); if (cards.length < 3) { return false; } String clubBucket = ""; String spadeBucket = ""; String diamondBucket = ""; String heartBucket = ""; SortHand.sort(cards); for (int i = 0 ; i < cards.length ; i++) { if (cards[i].getSuit().equals("C")) { clubBucket = clubBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("S")) { spadeBucket = spadeBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("D")) { diamondBucket = diamondBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("H")) { heartBucket = heartBucket + cards[i].getValue(); } } if (clubBucket.length() > 2) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("C")) return true; } return false; } else if (spadeBucket.length() > 2) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("S")) return true; } return false; } else if (diamondBucket.length() > 2) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("D")) return true; } return false; } else if (heartBucket.length() > 2) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("H")) return true; } return false; } else { return false; } } public static boolean oneToFlush(Hand hand, Hand board) { Card[] cards2 = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards2.length ; i++) { newHand.addCard(cards2[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } Card[] cards = newHand.getCards(); if (cards.length < 4) { return false; } String clubBucket = ""; String spadeBucket = ""; String diamondBucket = ""; String heartBucket = ""; SortHand.sort(cards); for (int i = 0 ; i < cards.length ; i++) { if (cards[i].getSuit().equals("C")) { clubBucket = clubBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("S")) { spadeBucket = spadeBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("D")) { diamondBucket = diamondBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("H")) { heartBucket = heartBucket + cards[i].getValue(); } } if (clubBucket.length() > 3) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("C")) return true; } return false; } else if (spadeBucket.length() > 3) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("S")) return true; } return false; } else if (diamondBucket.length() > 3) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("D")) return true; } return false; } else if (heartBucket.length() > 3) { for (int i = 0 ; i < cards2.length ; i++) { if (cards2[i].getSuit().equals("H")) return true; } return false; } else { return false; } } public static boolean flushedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards.length ; i++) { newHand.addCard(cards[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } String winCode; if ((winCode = HandAnalyzer.flushWinCode(newHand.getCards())) != null) { for (int i = 2 ; i < 7 ; i++) { String value = winCode.substring(i,i+1); String suit = winCode.substring(1,2); for (int j = 0 ; j < cards.length ; j++) { if (cards[j].toString().equals(suit+value)) return true; } } return false; } else return false; } public static boolean outsideStraightFlush(Hand hand, Hand board) { Card[] cards2 = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards2.length ; i++) { newHand.addCard(cards2[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } Card[] cards = newHand.getCards(); if (cards.length < 4) { return false; } String clubBucket = ""; String spadeBucket = ""; String diamondBucket = ""; String heartBucket = ""; SortHand.sort(cards); for (int i = 0 ; i < cards.length ; i++) { if (cards[i].getSuit().equals("C")) { clubBucket = clubBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("S")) { spadeBucket = spadeBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("D")) { diamondBucket = diamondBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("H")) { heartBucket = heartBucket + cards[i].getValue(); } } if (clubBucket.length() > 3) { Card[] tempCards = new Card[clubBucket.length()]; for (int i = 0 ; i < clubBucket.length() ; i++) { tempCards[i] = new Card("C" + clubBucket.substring(i,i+1)); } return PocketBoardAnalyzer.outsideStraight(cards2,tempCards); } else if (spadeBucket.length() > 3) { Card[] tempCards = new Card[spadeBucket.length()]; for (int i = 0 ; i < spadeBucket.length() ; i++) { tempCards[i] = new Card("S" + spadeBucket.substring(i,i+1)); } return PocketBoardAnalyzer.outsideStraight(cards2,tempCards); } else if (diamondBucket.length() > 3) { Card[] tempCards = new Card[diamondBucket.length()]; for (int i = 0 ; i < diamondBucket.length() ; i++) { tempCards[i] = new Card("D" + diamondBucket.substring(i,i+1)); } return PocketBoardAnalyzer.outsideStraight(cards2,tempCards); } else if (heartBucket.length() > 3) { Card[] tempCards = new Card[heartBucket.length()]; for (int i = 0 ; i < heartBucket.length() ; i++) { tempCards[i] = new Card("H" + heartBucket.substring(i,i+1)); } return PocketBoardAnalyzer.outsideStraight(cards2,tempCards); } else { return false; } } public static boolean insideStraightFlush(Hand hand, Hand board) { Card[] cards2 = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards2.length ; i++) { newHand.addCard(cards2[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } Card[] cards = newHand.getCards(); if (cards.length < 4) { return false; } String clubBucket = ""; String spadeBucket = ""; String diamondBucket = ""; String heartBucket = ""; SortHand.sort(cards); for (int i = 0 ; i < cards.length ; i++) { if (cards[i].getSuit().equals("C")) { clubBucket = clubBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("S")) { spadeBucket = spadeBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("D")) { diamondBucket = diamondBucket + cards[i].getValue(); } else if (cards[i].getSuit().equals("H")) { heartBucket = heartBucket + cards[i].getValue(); } } if (clubBucket.length() > 3) { Card[] tempCards = new Card[clubBucket.length()]; for (int i = 0 ; i < clubBucket.length() ; i++) { tempCards[i] = new Card("C" + clubBucket.substring(i,i+1)); } return PocketBoardAnalyzer.insideStraight(cards2,tempCards); } else if (spadeBucket.length() > 3) { Card[] tempCards = new Card[spadeBucket.length()]; for (int i = 0 ; i < spadeBucket.length() ; i++) { tempCards[i] = new Card("S" + spadeBucket.substring(i,i+1)); } return PocketBoardAnalyzer.insideStraight(cards2,tempCards); } else if (diamondBucket.length() > 3) { Card[] tempCards = new Card[diamondBucket.length()]; for (int i = 0 ; i < diamondBucket.length() ; i++) { tempCards[i] = new Card("D" + diamondBucket.substring(i,i+1)); } return PocketBoardAnalyzer.insideStraight(cards2,tempCards); } else if (heartBucket.length() > 3) { Card[] tempCards = new Card[heartBucket.length()]; for (int i = 0 ; i < heartBucket.length() ; i++) { tempCards[i] = new Card("H" + heartBucket.substring(i,i+1)); } return PocketBoardAnalyzer.insideStraight(cards2,tempCards); } else { return false; } } public static boolean straightFlushedUp(Hand hand, Hand board) { Card[] cards = hand.getCards(); Card[] boards = board.getCards(); Hand newHand = new Hand(); for (int i = 0 ; i < cards.length ; i++) { newHand.addCard(cards[i].toString()); } for (int i = 0 ; i < boards.length ; i++) { newHand.addCard(boards[i].toString()); } String winCode; if ((winCode = HandAnalyzer.straightFlushWinCode(newHand.getCards())) != null) { String suit = winCode.substring(1,2); for (int j = 0 ; j < cards.length ; j++) { if (cards[j].toString().substring(0,1).equals(suit)) { char alpha = winCode.charAt(2); int val = Card.getValueInt(alpha); if ((cards[j].getValueInt() <= val)&&(cards[j].getValueInt() >= val-4)) return true; } } return false; } else return false; } }