Need help writing a program to classify a poker hand

Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
Reply

Join Date: Nov 2004
Posts: 2
Reputation: alanna is an unknown quantity at this point 
Solved Threads: 0
alanna alanna is offline Offline
Newbie Poster

Need help writing a program to classify a poker hand

 
0
  #1
Nov 28th, 2004
I'm writing a program that generates 5 cards, and I need it to tell me what type of poker hand it is.

I really need help with this as soon as possible, so any suggestions that you could give me would be appreciated SO SO SO SO SO much. I saw that someone posted a very similar question, but that person got no responses.

This is my code, some of it is commented out because I wasn't sure about those parts.

public class Poker {
public static void main(String ars[]) throws IOException {
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));

int i, temp, pos1, pos2;
int card, cardsuit, cardrank;
int deck[] = new int [52];
String suit[] = {"Hearts", "Diamonds", "Clubs", "Spades"};
String rank[] = {"Ace", "Deuce", "Trey", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
int hand[] = new int [7];
int temptotals[] = new int [0];
int flush[] = new int [4];
boolean swap = true, flushtest = false;
int n = 0;
// int rank[] = new int [10];

for(i = 0; i < 52; i++){
deck[i] = i;
}

//shuffling deck
for(i = 1; i <= 2515; i++){
pos1 = (int) (Math.random() * 52);
pos2 = (int) (Math.random() * 52);
temp = deck[pos1];
deck[pos1] = deck[pos2];
deck[pos2] = temp;
}

//deal 5 cards
for(i = 0; i <= 4; i++) {
card = deck [i];
cardrank = card % 13;
cardsuit = card / 13;
System.out.println ("Card # " + (i + 1) + " is a " + rank [cardrank] + " of " + suit[cardsuit]);
}


//sort hand
while (swap) {
swap = false;
for (i = 0; i < 4; i++) {
if (hand[i] > hand [i + 1]) {
temp = hand[i];
hand[i] = hand[i + 1];
hand[i + 1] = temp;
swap = true;
}
}
}

//flush test
/* for (i = 0; i < 4; i++) {
flush[i] = 0;
}
for (i = 0; i < 7; i++) {
n = hand[i] / 13; //suit of each card in array
flush[n]++;

// for (i = 0; i < 4; i++) { //5 cards with same suit = flush
if (flush[i] > 4) {
flushtest = true;
System.out.print("FLUSH \n");
} else if (flush[i] <= 4) {
flushtest = false;
System.out.print("not \n");
}*/
}
}
Reply With Quote Quick reply to this message  
Join Date: Sep 2004
Posts: 84
Reputation: jerbo is an unknown quantity at this point 
Solved Threads: 1
jerbo jerbo is offline Offline
Junior Poster in Training

Re: Need help writing a program to classify a poker hand

 
0
  #2
Nov 29th, 2004
Please clarify by what you mean by 'what type of poker hand it is'?

Are you refering to the type of hand (i.e. Straight, flush, full house, ... ) ?
Reply With Quote Quick reply to this message  
Join Date: Aug 2004
Posts: 13
Reputation: glSuccinct is an unknown quantity at this point 
Solved Threads: 2
glSuccinct's Avatar
glSuccinct glSuccinct is offline Offline
Newbie Poster

Re: Need help writing a program to classify a poker hand

 
0
  #3
Nov 29th, 2004
Well, you've already broken your hand up into suits and ranks, that's a good start. Now you just need to retain that info after you do print your output.

For a flush, by far the easiest solution is to take a histogram of the suits. If the entry for any one suit is 5, you have a flush.

I don't know java, but the c++ would be something like:

  1. // vRanks is your array of
  2. enum ESuit { eS_HEARTS, eS_DIAMONDS, eS_CLUBS, eS_SPADES, eS_LAST };
  3. size_t vSuitCount[eS_LAST];
  4. memset(vSuitCount, 0, sizeof vSuitCount);
  5. for (unsigned i = 0; i < 5; ++i)
  6. ++vSuitCount[vRanks[i]];
  7.  
  8. bool bFlush = false;
  9. for (unsigned i = 0; i < eS_LAST; ++i)
  10. {
  11. if (vSuitCount[i] == 5)
  12. {
  13. bFlush = true;
  14. break;
  15. }
  16. }

Furthermore, in addition to having the normally ordered rank histogram, I'd also have a 2nd one that is sorted in descending order so that you can easily find what the highest numbers of the same card number are in the hand. I'd do the same with the suits, because then testing for a flush is cake.

So, lets start at the bottom:
Two of a kind: index 0 of sorted ranks is 2, index 1 is 1, and index 0 of the sorted suits is any rank is 2, index 1 is 1
Two pair: indices 0 and 1 of the sorted ranks is 2
Three of a kind: index 0 of the sorted ranks is 3, index 1 is 1
Straight: using the unsorted rank histogram,
1) any run of 5, starting between ace and 9, is all 1 or
2) the run from 10 to K are all 1, and ace is 1
Flush: index 0 of the sorted suits is 5
Full House: index 0 of the sorted ranks is 3 and index 1 is 2
Four of a kind: index 0 of sorted ranks is 4
Straight Flush: Straight and Flush
Royal Flush: Straight and Flush, in ordered ranks 10 and K are both 1


An example:

After running your histogram, you have this:

Rank
Ace 0
2 0
3 0
4 2
5 0
6 0
7 0
8 0
9 0
10 3
J 0
Q 0
K 0

Then, your second, sorted version of the ranks would be like this:
3
2
0
0
0
0
0
0
0
0
0
0
0

The test for a full house is just:
  1. bool bFullHouse = (vSortedRanks[0] == 3) && (vSortedRanks[1] == 2);

Good luck!
-don't listen to me-
Reply With Quote Quick reply to this message  
Join Date: Nov 2004
Posts: 2
Reputation: alanna is an unknown quantity at this point 
Solved Threads: 0
alanna alanna is offline Offline
Newbie Poster

Re: Need help writing a program to classify a poker hand

 
0
  #4
Nov 29th, 2004
Sorry. Yes, that's what I was referring to.
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC