Package com.poker.analyst.combination

Source Code of com.poker.analyst.combination.AvailableCombinationsTools

package com.poker.analyst.combination;

import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import com.poker.analyst.analyser.CardComparator;
import com.poker.analyst.combinations.auxil.CardRangeInComb;
import com.poker.analyst.combinations.auxil.CardValue;
import com.poker.analyst.element.Card;
import com.poker.analyst.element.CardFace;
import com.poker.analyst.element.Hand;
import com.poker.analyst.element.PlayingCards;
import com.poker.analyst.element.Suit;

public class AvailableCombinationsTools {
  AvailableCombinations availableCombinations;

  public AvailableCombinationsTools(AvailableCombinations availableCombinations) {
    super();
    this.availableCombinations = availableCombinations;
  }
 
  public List<CardValue> getCardValuesFromComb(Combination combination, Hand hand){
    List<CardValue> cardValues = null;   
    CardValue cardValue = null;   
    List<Card> combCardList = combination.getCombinationList();
   
    if (combCardList == null) return null;
    if (hand == null) return null;
    if (hand.getHandCards() == null) return null;
    if (hand.getHandCards().length != 2) return null;
           
    return updateCVRangeInALL(combination, combination.getCardValues(hand));
  }
  public List<CardValue> updateCVRangeInALL(Combination combination, List<CardValue> cardValues){
    PlayingCards plCards = availableCombinations.getPlCards();
    if (cardValues == null)
      return cardValues;
    if (combination instanceof Pair      ||
      combination instanceof TwoPairs    || 
      combination instanceof ThreeOfKind ||
      combination instanceof FourOfKind  ||
      combination instanceof FourOfKind  ||
      combination instanceof FullHouse     ){
                 
      Set<Card> allCards = new TreeSet<Card>(new CardComparator());
      for (Card card: plCards.getPlayerCards())
        if (card != null) allCards.add(new Card(Suit.forAnalyse,card.getFace()));
      for (Card card: plCards.getTableCards())
        if (card != null) allCards.add(new Card(Suit.forAnalyse,card.getFace()));
     
     
           
      for (CardValue cv: cardValues){
        int i = 0;
        for (Card card: allCards){
          if (card.getFace().equals(cv.getCard().getFace())){
            if (cv.getCardRangeInAllCards() == null){
              if (i == 0)
                cv.setCardRangeInAllCards(CardRangeInComb.TOP);
              else
              if (i == allCards.size() - 1)
                cv.setCardRangeInAllCards(CardRangeInComb.LOW);
              else
                cv.setCardRangeInAllCards(CardRangeInComb.MIDDLE);
              cv.setCardPosition(i);
            }
             
          }
          i++;
        }
        if (cardValues.size() ==2){
          if ((cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.MIDDLE &&
             cardValues.get(1).getCardRangeInAllCards() == CardRangeInComb.LOW) ||
            (cardValues.get(1).getCardRangeInAllCards() == CardRangeInComb.MIDDLE &&
             cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.LOW)){
            if (Math.abs(cardValues.get(0).getCardPositionAllCards() -
                   cardValues.get(1).getCardPositionAllCards()) == 1){
              cardValues.get(0).setCardRangeInAllCards(CardRangeInComb.LOW);
              cardValues.get(1).setCardRangeInAllCards(CardRangeInComb.LOW);
            }
          }
         
          if (cardValues.get(0).getCard().getFace().equals(cardValues.get(1).getCard().getFace())){
            if (cardValues.get(0).getCardRangeInAllCards().equals(CardRangeInComb.TOP)){
              cardValues.get(0).setCardRangeInAllCards(CardRangeInComb.HIGH);
              cardValues.get(1).setCardRangeInAllCards(CardRangeInComb.HIGH);             
            }
          }
         
        }               
      }
     
     
     
    }else
    if (combination instanceof Straight       ||
      combination instanceof StraightFlush    || 
      combination instanceof Flush       ){
      for (CardValue cv: cardValues){
        cv.setCardRangeInAllCards(cv.getCardRange());
      }
     
    }
   
   
    return cardValues;
  }
 
  public Card getKicker(List<CardValue> listCardValues){
   
    Hand hand = new Hand(availableCombinations.getPlCards().getPlayerCards());
    Card kicker = null;   
    
    if (hand == null) return null;
    if (hand.getHandCards() == null) return null;
    if (hand.getHandCards().length != 2) return null;
   
    if (listCardValues == null || listCardValues.size() == 0){
      if (hand.getHandCards()[0].getFace().getSerialNumber() >=
        hand.getHandCards()[1].getFace().getSerialNumber())
        return hand.getHandCards()[0];
      else
        return hand.getHandCards()[1];
    }
    if (listCardValues.size() == 2){
      return null;
    }
   
    boolean isNotInCV = true;
    for (int q = 0; q<2; q++){
      isNotInCV = true;
      for(CardValue cv: listCardValues){
        if (cv.getCard().equals(hand.getHandCards()[q]))
          isNotInCV = false;
      }
      if (isNotInCV)
        return hand.getHandCards()[q];     
    }   
    return kicker;
  }
 
  public Combination getTopCombination(){
   
    if (availableCombinations.getStraightFlushes() != null)
      return availableCombinations.getStraightFlushes().get(0);
    if (availableCombinations.getFourOfKinds() != null)
      return availableCombinations.getFourOfKinds().get(0);
    if (availableCombinations.getFullHouses() != null)
      return availableCombinations.getFullHouses().get(0);
    if (availableCombinations.getFlushs() != null)
      return availableCombinations.getFlushs().get(0);
    if (availableCombinations.getStraights() != null)
      return availableCombinations.getStraights().get(0);
    if (availableCombinations.getThreeOfKinds() != null)
      return availableCombinations.getThreeOfKinds().get(0);
    if (availableCombinations.getTwoPairs() != null)
      return availableCombinations.getTwoPairs().get(0);
    if (availableCombinations.getPairs() != null)
      return availableCombinations.getPairs().get(0);
    if (availableCombinations.getHighCard() != null)
      return availableCombinations.getHighCard().get(0);
   
    return null;
  }
 
  public Flush analyzeFlush(boolean isDraw){   
   
    Hand hand = new Hand(availableCombinations.getPlCards().getPlayerCards());
    Flush topFlush = null;
    List<CardValue> cardValues = null;
    List<Flush> listFlushes;
    if (isDraw)
      listFlushes = availableCombinations.getFlushDraws();
    else
      listFlushes = availableCombinations.getFlushs();
       
   
   
    boolean tmp = false;
   
    if (listFlushes != null && listFlushes.size() != 0){     
      topFlush = listFlushes.get(0);
     
      cardValues = getCardValuesFromComb(topFlush, hand);
      if (cardValues == null)
        topFlush = null;
      else{
        if (listFlushes.size() > 1){
          tmp = false;
          for(CardValue cv: cardValues){
            if (cv.getCard().getFace() == CardFace.ACE || cv.getCard().getFace() == CardFace.KING)
              tmp = true;
          }
          if (!tmp)
            topFlush = null;
        }else{         
          if (cardValues.size() == 1){
            if (cardValues.get(0).getCard().getFace() != CardFace.ACE &&
              cardValues.get(0).getCard().getFace() != CardFace.KING  &&
              cardValues.get(0).getCard().getFace() != CardFace.QUEEN)
                topFlush = null;
          }else{
            if (cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.LOW &&
              cardValues.get(1).getCardRangeInAllCards() == CardRangeInComb.LOW)
            topFlush = null;
          }         
         
        }               
      }
    }
    return topFlush;
 
  public Straight analyzeStraight(boolean isDraw){   
   
    Hand hand = new Hand(availableCombinations.getPlCards().getPlayerCards());
    Straight topStraight = null;
    List<CardValue> cardValues = null;
    List<Straight> listStraights;
    if (isDraw)
      listStraights = availableCombinations.getStraightOesds();
    else
      listStraights = availableCombinations.getStraights();         
   
    boolean tmp = false;
   
    if (listStraights != null && listStraights.size() != 0){     
      topStraight = listStraights.get(0);
     
      cardValues = getCardValuesFromComb(topStraight, hand);
      if (cardValues == null)
        topStraight = null;
      else{               
        if (cardValues.size() == 1 && cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.LOW)
          topStraight = null;                                   
      }
    }
    return topStraight;
 
 
  public Combination cutNotHeroCombination(Combination combination){
    Hand hand = new Hand(availableCombinations.getPlCards().getPlayerCards());
    if (combination == null) return null;
    List<CardValue> cardValues = getCardValuesFromComb(combination, hand);
    if (cardValues == null || cardValues.size() == 0)
      return null;   
   
    return combination;
  }
  public Combination analyzePair(Combination combination,
                  boolean isTop, boolean isMiddle,
                  CardFace kickerTop,CardFace kickerMiddle){ 
   
    Hand hand = new Hand(availableCombinations.getPlCards().getPlayerCards());
    Pair pair = (Pair)combination;
    List<CardValue> cardValues = getCardValuesFromComb(combination, hand);
    Card kicker;
   
    if (cardValues == null)
      combination = null;
    else
    if (cardValues.size() == 1){
      if (cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.LOW)
        combination = null;
     
      if (isTop && cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.TOP &&
        getKicker(cardValues).getFace().getSerialNumber()<  kickerTop.getSerialNumber())
        combination = null;
     
      if (isMiddle){
        kicker = getKicker(cardValues);
        if  (cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.MIDDLE &&
          kicker != null && kicker.getFace().getSerialNumber() < kickerMiddle.getSerialNumber())
          combination = null;
        else
        if  (cardValues.get(0).getCardPositionAllCards() >1)
          combination = null;
      }
     
    }else
    if (cardValues.size() == 2){
      if (cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.LOW ||
        cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.MIDDLE)
        combination = null;
    }
 
    return combination;
  }
  public Combination analyzeTwoPair(Combination combination, boolean isMiddle){ 

    Hand hand = new Hand(availableCombinations.getPlCards().getPlayerCards());
    TwoPairs pair = (TwoPairs) combination;
    List<CardValue> cardValues = getCardValuesFromComb(combination, hand);
    if (cardValues == null)
      combination = null;
    else
      if (cardValues.size() == 1){
        if (cardValues.get(0).getCardRangeInAllCards() == CardRangeInComb.LOW)
          combination = null;

        if (isMiddle){
          if  (cardValues.get(0).getCardPositionAllCards() > 1)
            combination = null;
        }else
        {
          if  (cardValues.get(0).getCardRangeInAllCards() ==  CardRangeInComb.MIDDLE)
            combination = null;
        }

      }

    return combination;
  }

}












TOP

Related Classes of com.poker.analyst.combination.AvailableCombinationsTools

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.