Zeppe
10/20/2008 8:26:00 AM
Dear Danier,
few advices, not exhaustive, inline.
daniel.kaner@gmail.com wrote:
> 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:
>
> #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]);
This is ugly and inefficient. You want 52 cards to be shuffled and take
six of them, so you'd better shuffle numbers from 0 to 51 in a vector
and take the first six ones.
>
> //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;
create a function to give you the rank of a card. Also, are you sure
this is the rank of a card?
>
> //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);
>
once you have your cards, the suit is not random.
> /* 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;
> }*/
> }
if you enter a value out of bound, the program doesn't realise.
>
> 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]))
> {
encapsulate different tests in to single functions (like
"isThreeOfAKind(...)") and think t better strategies to test single
conditions without enumerating all the possibilities.
Best wishes,
Zeppe