Winning Conditions for Poker.

Discussion in 'C' started by dankbc1, Oct 19, 2008.

  1. dankbc1

    dankbc1 New Member

    Joined:
    Oct 19, 2008
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    0
    I've written the winning conditions for pair, high card and three of a kind. However, I am very confused on how to write the winning conditions for a royal flush, straight flush, four of a kind, full house, flush, and straight. Can anyone here please point me in the right direction? I would greatly appreciate it.

    My code is below:

    Code:
    #include <iostream>
    #include <ctime>
    #include <cmath>
    #include <windows.h>
    #include <cstdlib>
    
    using namespace std;
               
        int compMONEYONE, compMONEYTWO, compMONEYTHREE, compMONEYFINAL;
        int compMONEY = 1000;
    	int playerMONEY = 1000;
    	int compBETONE, compBETTWO, compBETTHREE, compBETFINAL;
    	int placeBETONE, placeBETTWO, placeBETTHREE, placeBETFINAL;
    	int card[7];
    	int suitC[7];
    	int rankC[7];
    	
    	const char* rank[] = {"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
    	const char* suit[] = {"Hearts!", "Spades!", "Diamonds!", "Shamrock!"};
    
    	int numPlayers;
    //	int random;
    	
    	char choice; 
    	char PlayAgain;
    	char winner;
    
    void preGame()
    {
            srand(GetTickCount());
        
            //loop so that all the cards are different, if one is the same as another, the loop restarts   
        	do
        	{
        	    //random number from 1-52 which is a card deck
        	    card[0] = ((rand() % 52) + 1);
        	    //cout << card[0] << endl;
                card[1] = ((rand() % 52) + 1);
                card[2] = ((rand() % 52) + 1);
                card[3] = ((rand() % 52) + 1);
                card[4] = ((rand() % 52) + 1);
                card[5] = ((rand() % 52) + 1);
                card[6] = ((rand() % 52) + 1);
        	}while(card[0] == card[1] || card[0] == card[2] || card[0] == card[3] || card[0] == card[4] || card[0] == card[5] || card[0] == card[6] || card[1] == card[2] || card[1] == card[3] || card[1] == card[4] || card[1] == card[5] || card[1] == card[6] || card[2] == card[3] || card[2] == card[4] || card[2] == card[5] || card[2] == card[6] || card[3] == card[4] || card[3] == card[5] || card[3] == card[6] || card[4] == card[5] || card[4] == card[6] || card[5] == card[6]);
        	
        	//ranks - ace, one, two, three, four, five, six, seven, eight, nine, ten, jack, queen, king
        	//remainder of number which then goes through the console testing loop
        	//ranks are all different or loop restarts
        	
            	rankC[0] = (card[0] % 13);
            	//cout << rank[0] << endl;
            	rankC[1] = (card[1] % 13);
                //cout << rank[1] << endl;
            	rankC[2] = (card[2] % 13);
            	//cout << rank[2] << endl;
            	rankC[3] = (card[3] % 13);
            	//cout << rank[3] << endl;
            	rankC[4] = (card[4] % 13);
            	//cout << rank[4] << endl; 
            	rankC[5] = (card[5] % 13);
            	//cout << rank[5] << endl; 
            	rankC[6] = (card[6] % 13);
            	//cout << rank[6] << endl; 
    
        	//4 suits - hearts, spades, shamrocks, diamonds
        	suitC[0] = (rand() % 4);
        	suitC[1] = (rand() % 4);
        	suitC[2] = (rand() % 4);
        	suitC[3] = (rand() % 4);
        	suitC[4] = (rand() % 4);
        	suitC[5] = (rand() % 4);
        	suitC[6] = (rand() % 4);
        	
        /*	if(numPlayers > 5 || numPlayers < 1)
        	{
        	    cout << "Please enter the number of players that you would like to include in this game(no more than 5): ";
        	    cin >> numPlayers;
        	}*/
    }
    
    void betGame()
    {
     	
            cout << "Player Money Total: $" << playerMONEY << endl;
            cout << "Computer Money Total: $" << compMONEY << endl;
    //    random = (rand() % 1);
    
    //    if(random == 0)
    //    {
            cout << "Small blind: $25 put up by the computer." << endl;
            cout << "Big blind: $50 put up by the player." << endl;
            cout << "Player Money Total: $" << playerMONEY - 50 << endl;
            cout << "Computer Money Total: $" << compMONEY - 25 << endl;
            compMONEYONE = compMONEY - 25;
    /*    }
            else
            {
                cout << "Small blind: $25 put up by the player." << endl;
                cout << "Big blind: $50 put up by the computer." << endl;
                cout << "Player Money Total: $" << playerMONEY - 25 << endl;
                cout << "Computer Money Total: $" << compMONEY - 50 << endl;
            }*/
            
        cout << "Player's First Card: " << rank[rankC[0]] << " of " << suit[suitC[0]] << endl;
        
        cout << "Player's Second Card: " << rank[rankC[1]] << " of " << suit[suitC[1]] << endl;
     
    //SECOND YOU FLIP 1 CARD AND YOU SEE YOUR CARDS AND 1 CARD -- BET #2
    
                cout << "How much would you like to bet?";
                cin >> placeBETONE;
                compBETONE = (rand() % compMONEYONE);
                cout << "Computer bet: " << compBETONE << endl;
                cout << "Player Money Total: $" << playerMONEY - 50 - placeBETONE << endl;
                cout << "Computer Money Total: $" << compMONEY - 25 - compBETONE << endl;
                compMONEYTWO = compMONEY - 25 - compBETONE;
                
                
                cout << "Flop First Card: " << rank[rankC[2]] << " of " << suit[suitC[2]] << endl;
        
                cout << "Flop Second Card: " << rank[rankC[3]] << " of " << suit[suitC[3]] << endl;
            
                cout << "Flop Third Card: " << rank[rankC[4]] << " of " << suit[suitC[4]] << endl;
                
                
            placeBETTWO = -1;
            while(placeBETTWO < 0 || placeBETTWO > 25)
            {
                cout << "How much would you like to bet?";
                cin >> placeBETTWO;
                compBETTWO = (rand() % compMONEYTWO);
                cout << "Computer bet: " << compBETTWO << endl;
                cout << "Player Money Total: $" << playerMONEY - 50 - placeBETONE - placeBETTWO << endl;
                cout << "Computer Money Total: $" << compMONEY - 25 - compBETONE - compBETTWO << endl;
                compMONEYTHREE = compMONEY - 25 - compBETONE - compBETTWO;
                
                cout << "Turn Card: " << rank[rankC[5]] << " of " << suit[suitC[5]] << endl;     
             }
             
            placeBETTHREE = -1;
            while(placeBETTHREE < 0 || placeBETTHREE > 25)
            {
                cout << "How much would you like to bet?";
                cin >> placeBETTHREE;
                compBETTHREE = (rand() % compMONEYTHREE);
                cout << "Computer bet: " << compBETTHREE << endl;
                cout << "Player Money Total: $" << playerMONEY - 50 - placeBETONE - placeBETTWO - placeBETTHREE << endl;
                cout << "Computer Money Total: $" << compMONEY - 25 - compBETONE - compBETTWO - compBETTHREE << endl;
                compMONEYFINAL = compMONEY - 25 - compBETONE - compBETTWO - compBETTHREE;
               
                cout << "River Card: " << rank[rankC[6]] << " of " << suit[suitC[6]] << endl;;
             }
             
            placeBETFINAL = -1;
            while(placeBETFINAL < 0 || placeBETFINAL > 25)
            {
                cout << "How much would you like to bet?";
                cin >> placeBETFINAL;        
                compBETFINAL = (rand() % compMONEYFINAL);
                cout << "Computer bet: " << compBETFINAL << endl;
                cout << "Player Money Total: $" << playerMONEY - 50 - placeBETONE - placeBETTWO - placeBETTHREE - placeBETFINAL << endl;
                cout << "Computer Money Total: $" << compMONEY - 25 - compBETONE - compBETTWO - compBETTHREE - compBETFINAL << endl;
            }
            
            //WINNING CONDITIONS
            
            
            if((suitC[0] == suitC[1] && suitC[1] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[4]) || (suitC[0] == suitC[1] && suitC[1] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[5]) || (suitC[0] == suitC[1] && suitC[1] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[6]) || (suitC[0] == suitC[1] && suitC[1] == suitC[2] && suitC[2] == suitC[4] && suitC[4] == suitC[5]) || (suitC[0] == suitC[1] && suitC[1] == suitC[2] && suitC[2] == suitC[4] && suitC[4] == suitC[6]) || (suitC[0] == suitC[1] && suitC[1] == suitC[2] && suitC[2] == suitC[5] && suitC[5] == suitC[6]) || (suitC[0] == suitC[1] && suitC[1] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[5]) || (suitC[0] == suitC[1] && suitC[1] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[6]) || (suitC[0] == suitC[1] && suitC[1] == suitC[3] && suitC[3] == suitC[5] && suitC[5] == suitC[6]) || (suitC[0] == suitC[1] && suitC[1] == suitC[4] && suitC[4] == suitC[5] && suitC[5] == suitC[6]) || (suitC[0] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[5]) || (suitC[0] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[6]) || (suitC[0] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[5] && suitC[5] == suitC[6]) || (suitC[0] == suitC[2] && suitC[2] == suitC[4] && suitC[4] == suitC[5] && suitC[5] == suitC[6]) || (suitC[0] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[5] && suitC[5] == suitC[6]) || (suitC[1] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[5]) || (suitC[1] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[6]) || (suitC[1] == suitC[2] && suitC[2] == suitC[3] && suitC[3] == suitC[5] && suitC[5] == suitC[6]) || (suitC[1] == suitC[2] && suitC[2] == suitC[4] && suitC[4] == suitC[5] && suitC[5] == suitC[6]) || (suitC[1] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[5] && suitC[5] == suitC[6]) || (suitC[2] == suitC[3] && suitC[3] == suitC[4] && suitC[4] == suitC[5] && suitC[5] == suitC[6]))
            {
                 if()
            } 
            //THREE OF A KIND
            if((rankC[0] == rankC[1] && rankC[1] == rankC[2]) || (rankC[0] == rankC[1] && rankC[1] == rankC[3]) || (rankC[0] == rankC[1] && rankC[1] == rankC[4]) || (rankC[0] == rankC[1] && rankC[1] == rankC[5]) || (rankC[0] == rankC[1] && rankC[1] == rankC[6]) || (rankC[0] == rankC[2] && rankC[2] == rankC[3]) || (rankC[0] == rankC[2] && rankC[2] == rankC[4]) || (rankC[0] == rankC[2] && rankC[2] == rankC[5]) || (rankC[0] == rankC[2] && rankC[2] == rankC[6]) || (rankC[0] == rankC[3] && rankC[3] == rankC[4]) || (rankC[0] == rankC[3] && rankC[3] == rankC[5]) || (rankC[0] == rankC[3] && rankC[3] == rankC[6]) || (rankC[0] == rankC[4] && rankC[4] == rankC[5]) || (rankC[0] == rankC[4] && rankC[4] == rankC[6]) || (rankC[0] == rankC[5] && rankC[5] == rankC[6]) || (rankC[1] == rankC[2] && rankC[2] == rankC[3]) || (rankC[1] == rankC[2] && rankC[2] == rankC[4]) || (rankC[1] == rankC[2] && rankC[2] == rankC[5]) || (rankC[1] == rankC[2] && rankC[2] == rankC[6]) || (rankC[1] == rankC[3] && rankC[3] == rankC[4]) || (rankC[1] == rankC[3] && rankC[3] == rankC[5]) || (rankC[1] == rankC[3] && rankC[3] == rankC[6]) || (rankC[1] == rankC[4] && rankC[4] == rankC[5]) || (rankC[1] == rankC[4] && rankC[4] == rankC[6]) || (rankC[1] == rankC[5] && rankC[5] == rankC[6]) || (rankC[2] == rankC[3] && rankC[3] == rankC[4]) || (rankC[2] == rankC[3] && rankC[3] == rankC[5]) || (rankC[2] == rankC[3] && rankC[3] == rankC[6]) || (rankC[2] == rankC[4] && rankC[4] == rankC[5]) || (rankC[2] == rankC[4] && rankC[4] == rankC[6]) || (rankC[2] == rankC[5] && rankC[5] == rankC[6]) || (rankC[3] == rankC[4] && rankC[4] == rankC[5]) || (rankC[3] == rankC[4] && rankC[4] == rankC[6]) || (rankC[3] == rankC[5] && rankC[5] == rankC[6]) || (rankC[4] == rankC[5] && rankC[5] == rankC[6])) 
            {
                 cout << winner << " wins with a three of a kind!" << endl;
            }
            //PAIR
            else
                if((rankC[0] == rankC[1]) || (rankC[0] == rankC[2]) || (rankC[0] == rankC[3]) || (rankC[0] == rankC[4]) || (rankC[0] == rankC[5]) || (rankC[0] == rankC[6]) || (rankC[0] == rankC[7]) || (rankC[1] == rankC[2]) || (rankC[1] == rankC[3]) || (rankC[1] == rankC[4]) || (rankC[1] == rankC[5]) || (rankC[1] == rankC[6]) || (rankC[2] == rankC[3]) || (rankC[2] == rankC[4]) || (rankC[2] == rankC[5]) || (rankC[2] == rankC[6]) || (rankC[3] == rankC[4]) || (rankC[3] == rankC[5]) || (rankC[3] == rankC[6]) || (rankC[4] == rankC[5]) || (rankC[4] == rankC[6]) || (rankC[5] == rankC[6]))
                {
                     cout << winner << " wins with a pair!" << endl;
                }
                //HIGH CARD
                else
                    if(rankC[0] > rankC[1] && rankC[0] > rankC[2] && rankC[0] > rankC[3] && rankC[0] > rankC[4] && rankC[0] > rankC[5] && rankC[0] > rankC[6])
                    {
                          cout << winner << " wins with a high card: " << rankC[0] << endl;  
                    }
                    else
                        if(rankC[1] > rankC[0] && rankC[1] > rankC[2] && rankC[1] > rankC[3] && rankC[1] > rankC[4] && rankC[1] > rankC[5] && rankC[1] > rankC[6])
                        {
                              cout << winner << " wins with a high card: " << rankC[0] << endl;
                        }
            
            cout << "Do You Want To Play Again: " << endl;
            cin >> PlayAgain;
    }
    
    int main()
    {
        do
        {
            cout << "Welcome to Texas Hold 'Em!" << endl;
    
            preGame();
            betGame();
              
         }while(PlayAgain == 'y');  
    
    }
     
  2. oogabooga

    oogabooga New Member

    Joined:
    Jan 9, 2008
    Messages:
    115
    Likes Received:
    11
    Trophy Points:
    0
    If you are under no pressure to do this particular task, you may want to get a book or find a tutorial online and learn more about function arguments and processing arrays with loops.

    For example, the deck should be an array of ints that is actually shuffled, which obivates the need to test for duplicate cards.
    Code:
    #define VALUE(card) ((card) % 13)  // Values 0 to 12 (real value
                                       //   is VALUE() + 1
    #define SUIT(card) ((card) / 4)    // Suits 0 to 3
    
    void deck_init (int *deck)
    {
        srand (time (0));                 // init rand()
        for (int i = 0; i < 52; ++i)      // fill deck with 0 to 51
            deck[i] = i;
    }
    
    void deck_shuffle (int *deck)
    {
        for (int i = 51; i > 1; --i)      // for each card in the deck
        {
            int r = rand() % (i + 1);     // choose a random position
            int temp = deck[i];           // swap the cards
            deck[i] = deck[r];
            deck[r] = temp;
        }
    }
    
    In analyzing the hands, you would use arrays to count the values and suits:
    Code:
    int value[14];
    int suit[4];
    
    zero (value, 13);
    zero (suit, 4);
    
    for (int i = 0; i < CardsInHand; ++i)
    {
        ++value[VALUE(hand[i])];
        ++suit[SUIT(hand[i])];
    }
    
    You can then process the value and suit arrays to determine if the hand is a straight or flush or whatever.
     
  3. oogabooga

    oogabooga New Member

    Joined:
    Jan 9, 2008
    Messages:
    115
    Likes Received:
    11
    Trophy Points:
    0
    In deck_shuffle() it should be:
    for (int i = 51; i > 0; --i)
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice