package game; import com.biotools.meerkat.Card; import com.biotools.meerkat.Hand; import com.biotools.meerkat.HandEval; import common.handeval.klaatu.PartialStageFastEval; /** * Implementation of the Meerkat HandEval interface. * We delegate to Klaatus-FastEval who is the fastest known for random * hands * */ public class HandEvalImpl implements HandEval { private int cardToKlaatuIndex(Card card) { return PartialStageFastEval.encode(card.getRank(), card.getSuit()); } @Override public int rankHand(Hand hand) { switch (hand.size()) { case 5: return rankHand5(hand); case 6: return rankHand6(hand); case 7: return rankHand7(hand); default: throw new IllegalStateException("hand of size " + hand.size() + " not supported"); } } @Override public int rankHand5(Hand hand) { return PartialStageFastEval.toBrecher5(PartialStageFastEval.eval5(cardToKlaatuIndex(hand.getCard(1)), cardToKlaatuIndex(hand.getCard(2)), cardToKlaatuIndex(hand.getCard(3)), cardToKlaatuIndex(hand.getCard(4)), cardToKlaatuIndex(hand.getCard(5)))); } @Override public int rankHand6(Hand hand) { return PartialStageFastEval .toBrecher6(PartialStageFastEval.eval6(cardToKlaatuIndex(hand.getCard(1)), cardToKlaatuIndex(hand.getCard(2)), cardToKlaatuIndex(hand.getCard(3)), cardToKlaatuIndex(hand.getCard(4)), cardToKlaatuIndex(hand.getCard(5)), cardToKlaatuIndex(hand.getCard(6)))); } @Override public int rankHand7(Hand hand) { return PartialStageFastEval.toBrecher7(PartialStageFastEval.eval7(cardToKlaatuIndex(hand.getCard(1)), cardToKlaatuIndex(hand.getCard(2)), cardToKlaatuIndex(hand.getCard(3)), cardToKlaatuIndex(hand.getCard(4)), cardToKlaatuIndex(hand.getCard(5)), cardToKlaatuIndex(hand.getCard(6)), cardToKlaatuIndex(hand.getCard(7)))); } }