private bool isStraight(ref int numSubRanks, ref eRankType[] subRank) { int i; eRankType lowRank = eRankType.RANK_UNKNOWN; eRankType highRank = eRankType.RANK_UNKNOWN; numSubRanks = 1; // if more than one card of the same rank // then it is not a straight for (i = 0; i < 13; i++) { if (_rankCount[i] > 1) { return(false); } // Determine highest and lowest ranked cards in hand here if (_rankCount[i] == 1) { highRank = (eRankType)Enum.ToObject(typeof(eRankType), i); if (lowRank == eRankType.RANK_UNKNOWN) { lowRank = (eRankType)Enum.ToObject(typeof(eRankType), i); } } } subRank[0] = highRank; // If the highest and lowest rank cards are within a spread of 5 cards, // and there are no pairs, then it must be straight if ((highRank - lowRank) == 4) { return(true); } // Check for Ace low straight here (special case as my code usually treats Ace as high) if ((lowRank == eRankType.RANK_TWO) && (highRank == eRankType.RANK_ACE)) { // Got Ace and Two // Check for any 6's -> K's. (If any then no straight) for (i = (int)eRankType.RANK_SIX; i <= (int)eRankType.RANK_KING; i++) { if (_rankCount[i] > 0) { return(false); } } // This is a 5 high straight subRank[0] = eRankType.RANK_FIVE; return(true); } return(false); }
isStraightFlush(ref int numSubRanks, ref eRankType[] subRank) { // These are required parameters, but can be ignored int flushNumSubRanks = 0; eRankType[] flushSubRank = new eRankType[5]; if (isStraight(ref numSubRanks, ref subRank) && isFlush(ref flushNumSubRanks, ref flushSubRank)) { return(true); } return(false); }
public Deck() { int i; for (i = 0; i < 52; i++) { eRankType rank = (eRankType)(i % 13); eSuitType suit = (eSuitType)(i / 13); Card card = new Card(rank, suit); cards[i] = card; } Shuffle(); }
private bool isTwoPair(ref int numSubRanks, ref eRankType[] subRank) { eRankType currRank; eRankType highPairRank = eRankType.RANK_UNKNOWN; eRankType lowPairRank = eRankType.RANK_UNKNOWN; eRankType oddCardRank = eRankType.RANK_UNKNOWN; int pairCount = 0; numSubRanks = 3; for (currRank = 0; (int)currRank < 13; currRank++) { if (_rankCount[(int)currRank] == 2) { pairCount++; if (highPairRank != eRankType.RANK_UNKNOWN) { lowPairRank = highPairRank; } highPairRank = currRank; } else if (_rankCount[(int)currRank] == 1) { oddCardRank = currRank; } } if (pairCount == 2) { subRank[0] = highPairRank; subRank[1] = lowPairRank; subRank[2] = oddCardRank; return(true); } return(false); }
isFullHouse(ref int numSubRanks, ref eRankType[] subRank) { int threesNumSubRanks = 0; eRankType[] threesSubRank = new eRankType[5]; int pairNumSubRanks = 0; eRankType[] pairSubRank = new eRankType[5]; if (isThrees(ref threesNumSubRanks, ref threesSubRank) && isPair(ref pairNumSubRanks, ref pairSubRank)) { numSubRanks = 2; subRank[0] = threesSubRank[0]; subRank[1] = pairSubRank[0]; return(true); } return(false); }
public Card(eRankType pRank, eSuitType pSuit) { Rank = pRank; Suit = pSuit; }
private bool isPair(ref int numSubRanks, ref eRankType[] subRank) { eRankType currRank; int currCard; int currSubRank; numSubRanks = 4; for (currRank = 0; (int)currRank < 13; currRank++) { if (_rankCount[(int)currRank] == 2) { subRank[0] = currRank; currSubRank = 1; for (currCard = 0; currCard < 5; currCard++) { if (_cards[currCard].Rank != subRank[0]) { subRank[currSubRank] = _cards[currCard].Rank; currSubRank++; } } return true; } } return false; }
private bool isTwoPair(ref int numSubRanks, ref eRankType[] subRank) { eRankType currRank; eRankType highPairRank = eRankType.RANK_UNKNOWN; eRankType lowPairRank = eRankType.RANK_UNKNOWN; eRankType oddCardRank = eRankType.RANK_UNKNOWN; int pairCount = 0; numSubRanks = 3; for (currRank = 0; (int)currRank < 13; currRank++) { if (_rankCount[(int)currRank] == 2) { pairCount++; if (highPairRank != eRankType.RANK_UNKNOWN) { lowPairRank = highPairRank; } highPairRank = currRank; } else if (_rankCount[(int)currRank] == 1) { oddCardRank = currRank; } } if (pairCount == 2) { subRank[0] = highPairRank; subRank[1] = lowPairRank; subRank[2] = oddCardRank; return true; } return false; }
private bool isStraight(ref int numSubRanks, ref eRankType[] subRank) { int i; eRankType lowRank = eRankType.RANK_UNKNOWN; eRankType highRank = eRankType.RANK_UNKNOWN; numSubRanks = 1; // if more than one card of the same rank // then it is not a straight for (i = 0; i < 13; i++) { if (_rankCount[i] > 1) { return false; } // Determine highest and lowest ranked cards in hand here if (_rankCount[i] == 1) { highRank = (eRankType)Enum.ToObject(typeof(eRankType), i); if (lowRank == eRankType.RANK_UNKNOWN) { lowRank = (eRankType)Enum.ToObject(typeof(eRankType), i); } } } subRank[0] = highRank; // If the highest and lowest rank cards are within a spread of 5 cards, // and there are no pairs, then it must be straight if ((highRank - lowRank) == 4) { return true; } // Check for Ace low straight here (special case as my code usually treats Ace as high) if ((lowRank == eRankType.RANK_TWO) && (highRank == eRankType.RANK_ACE)) { // Got Ace and Two // Check for any 6's -> K's. (If any then no straight) for (i = (int)eRankType.RANK_SIX; i <= (int)eRankType.RANK_KING; i++) { if (_rankCount[i] > 0) { return false; } } // This is a 5 high straight subRank[0] = eRankType.RANK_FIVE; return true; } return false; }
private bool isFlush(ref int numSubRanks, ref eRankType[] subRank) { int i; numSubRanks = 5; for (i = 0; i < 4; i++) { if ((_suitCount[i] != 0) && (_suitCount[i] != 5)) { return false; } } for (i = 0; i < 5; i++) { subRank[i] = _cards[i].Rank; } return true; }
isFullHouse(ref int numSubRanks, ref eRankType[] subRank) { int threesNumSubRanks = 0; eRankType[] threesSubRank = new eRankType[5]; int pairNumSubRanks = 0; eRankType[] pairSubRank = new eRankType[5]; if (isThrees(ref threesNumSubRanks, ref threesSubRank) && isPair(ref pairNumSubRanks, ref pairSubRank)) { numSubRanks = 2; subRank[0] = threesSubRank[0]; subRank[1] = pairSubRank[0]; return true; } return false; }
isFours(ref int numSubRanks, ref eRankType[] subRank) { int currRank; int currCard; numSubRanks = 2; for (currRank = 0; currRank < 13; currRank++) { if (_rankCount[currRank] == 4) { subRank[0] = (eRankType)Enum.ToObject(typeof(eRankType), currRank); for (currCard = 0; currCard < 5; currCard++) { if (_cards[currCard].Rank != subRank[0]) { subRank[1] = _cards[currCard].Rank; return true; } } } } return false; }
isStraightFlush(ref int numSubRanks, ref eRankType[] subRank) { // These are required parameters, but can be ignored int flushNumSubRanks = 0; eRankType[] flushSubRank = new eRankType[5]; if (isStraight(ref numSubRanks, ref subRank) && isFlush(ref flushNumSubRanks, ref flushSubRank)) { return true; } return false; }