GIDForums  

Go Back   GIDForums > Computer Programming Forums > C++ Forum
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 25-May-2007, 19:42
blue1988tx blue1988tx is offline
New Member
 
Join Date: May 2007
Posts: 5
blue1988tx is on a distinguished road
Thumbs down

Help!For poker game simulation


There is the problem.
Quote:
Video Poker Simulation



Acme Software, Inc, has been contracted to write a Video Poker Simulation game in basic C++ that follows the following rules:



Basic Setting:

The player places an initial bet between one (1) and fifty (50) coins. The player is then dealt five (5) cards and allowed to choose which cards, if any, they wish to keep. The cards that they do not wish to keep are discarded, and replacement cards are dealt so that they again have a total of five (5) cards. The computer then determines what amount they have won, if any.



Card Ranks and Suits:

Cards are ranked, from highest to lowest:

· Ace

· King

· Queen

· Jack

· Ten

· Nine

· Eight

· Seven

· Six

· Five

· Four

· Three

· Two

· Ace

(Ace can count as either low or high. See "Royal Flush"'s scoring, below.)

The card suits are: Hearts, Clubs, Diamonds, and Spades



Hand Ranks:

When you are dealt replacement cards for your discards, your new hand is evaluated. Based on what kind of hand you're holding, you'll receive a certain number of points.

Hands are listed below, from best (highest scoring), to worst (no score):

· Royal Flush - 2000 points

A straight flush, with the Ace high.

In other words, a Ten, Jack, Queen, King and Ace, all of the same suit.

· Straight Flush - 250 points

A straight flush.

In other words, all five cards are consecutive and are the same suit.

For example: Three of Clubs, Four of Clubs, Five of Clubs, Six of Clubs and Seven of Clubs.

· Four of a Kind - 125 points

Four cards of the same value. (Obviously, each of different suits.)

· Full House - 40 points

A three of a kind and a pair at the same time.

· Flush - 25 points

All cards in your hand are the same suit.

· Straight - 20 points

All five cards are consecutive.

For example: Three of Clubs, Four of Spades, Five of Clubs, Six of Diamonds, and Seven of Hearts.

· Three of a Kind - 15 points

Three cards of the same value.

· Two Pair - 10 points

Two pairs of cards.

In other words, two cards in your hand are the same value, and two other cards in your hand are also the same value.

· Pair - 5 points

Two cards in your hand are the same value. In this version, they must be Jacks or better!

· None of the Above - 0 points

Each turn "costs" 5 dollars, so if you get a pair, no money actually end up added to your total score. If you don't get anything, you actually lose five dollars! If you bet more than one 5 dollar coin, then the returns above are multiplied by the number of coins entered to give the actual yield. This is just how handheld and Vegas video poker games actually work!



Project Requirements:

Your project must meet the following specifications:

1. Text-based display of what is in the player’s hand.
2. Read all cards to be discarded at once
3. Read from the command line as a program parameter the name of a file that contains the state of a previous game so that a player can resume a game at any point. Thus, your program must read and write to a file as well as verify that a file exists.
4. Provided adequate “help” for the player on how to play the game.
5. Score all hands correctly.
6. Know the player’s name and be “friendly”


And this the code which almost finished 50% of this project:


CPP / C++ / C Code:
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <time.h>
#include <string>
#include <fstream>

using namespace std;

void loadDeck(string suits[4], string faceValue[13])
{
     ifstream in; 
     in.open("cards.dat");
     if(in.fail())
     {
        in.close();
        cout<<"Deck of cards not found, program ending"<<endl;
        exit(1);
     }
     for(int i=0; i<4; i++)
        in>>suits[i];
     for(int i=0; i<13; i++)
        in>>faceValue[i];
     in.close();
}

void shuffle( bool cards[52], int hand[5])
{
     for(int i=0;i<52; i++)
        cards[i] = false;
     for(int i=0; i<5; i++)
        hand[i] = -1;
} 

void deal(bool card[], int hand[], int pos)
{
     int dealt;
     while(card[dealt=rand()%52]);
     hand[pos] = dealt;
     card[dealt] = true;
}

  
void initialDeal(bool card[], int hand[])
{
     for(int i=0; i<5; i++)
         deal(card, hand, i);
}

void discard(bool card[], int hand[])
{
     char str[80];
     cout<<"Which cards would you like to discard: ";
     cin.getline(str, '\n',80);
     char * pch;
     pch = strtok (str," ,.-");
     while (pch != NULL)
     {
        deal(card, hand, atoi(pch));
        pch = strtok (NULL, " ,.-");
     }
}

void display(int hand[], string suit[], string faceValue[])
{
     cout<<"The cards in your hand are: "<<endl;
     for(int i=0; i<5; i++)
        cout<<i<<".  "<<faceValue[hand[i]%13]<<" of "<<suit[hand[i]%4]<<endl;
//          cout<<hand[i]<<endl;
     cout<<endl;
}

bool again()
{
     string ans;
     cout<<"Do you want to do this again? ";
     cin>>ans;
     return (toupper(ans[0]) == 'Y');
}

int main(int argc, char *argv[])
{
    string suits[4], faceValue[13];
    bool cards[52];
    int hand[5];
    srand(time(NULL));
    loadDeck(suits, faceValue); 
    do
    {
       shuffle(cards, hand);
       initialDeal(cards, hand);
       display(hand, suits, faceValue);
       discard(cards, hand);
       display(hand, suits, faceValue);       
    }while(again());
    system("PAUSE");
    return EXIT_SUCCESS;
}



as you guys see,it finished almost the half of the project.But the last step:show the points to player.I really don't know how to do that.Can you guys show me how to do?
Last edited by admin II : 25-May-2007 at 21:36. Reason: Please surround your C++ code with [CPP] ... [/CPP]
  #2  
Old 25-May-2007, 21:38
ahbi82 ahbi82 is offline
Member
 
Join Date: Jul 2006
Posts: 143
ahbi82 will become famous soon enough

Re: Help!For poker game simulation


Quote:
Originally Posted by blue1988tx
I really don't know how to do that.Can you guys show me how to do?

First if all, do u know the poker rules (i.e the meaning of royal flush)
Let say for example "2 of a kind" means a pair.

A simple way to detect is to test for all ranls at the end of the one game.

Algorithm description for detecting pair
------------------------------------------
for all cards in hand, find any pairs.


CPP / C++ / C Code:
typedef enum
{
    RankPoints_NoPoints = 0,
    RankPoints_TwoPair = 5
} RankPoints;
 
 
RankPoints getRank( int* hand )
{
    for( int i = 0; i < 5; i++ )
    {
        for( int j = i+1; j < 5; j++ )
        {
            if( faceValue[ hand[i]%13 ] == faceValue[ hand[j]%13 ] )
            {
                // do something....... for example
                return RankPoints_TwoPair;
            }
        }
    }
    return RankPoints_NoPoint;
}

The above example i given is just finding repeating numbers in array as a start off. You may want to add features like determining what is the value of the pair. In addtion, it can also be expanded to find "3 of a kind" and "4 of a kind". A more complex algorithm is needed to determine which rank it is.

I breifly wrote this code and have not tested it myself. So kindly excuse me if there's errors.

Hope this helps!!!
  #3  
Old 25-May-2007, 22:56
blue1988tx blue1988tx is offline
New Member
 
Join Date: May 2007
Posts: 5
blue1988tx is on a distinguished road
Talking

Re: Help!For poker game simulation


Quote:
Originally Posted by ahbi82
First if all, do u know the poker rules (i.e the meaning of royal flush)
Let say for example "2 of a kind" means a pair.

A simple way to detect is to test for all ranls at the end of the one game.

Algorithm description for detecting pair
------------------------------------------
for all cards in hand, find any pairs.


CPP / C++ / C Code:
typedef enum
{
    RankPoints_NoPoints = 0,
    RankPoints_TwoPair = 5
} RankPoints;
 
 
RankPoints getRank( int* hand )
{
    for( int i = 0; i < 5; i++ )
    {
        for( int j = i+1; j < 5; j++ )
        {
            if( faceValue[ hand[i]%13 ] == faceValue[ hand[j]%13 ] )
            {
                // do something....... for example
                return RankPoints_TwoPair;
            }
        }
    }
    return RankPoints_NoPoint;
}

The above example i given is just finding repeating numbers in array as a start off. You may want to add features like determining what is the value of the pair. In addtion, it can also be expanded to find "3 of a kind" and "4 of a kind". A more complex algorithm is needed to determine which rank it is.

I breifly wrote this code and have not tested it myself. So kindly excuse me if there's errors.

Hope this helps!!!



Thanks very much,man!You are so kind!
And can others show me other cases about the showpoint?Thanks!
 
 

Recent GIDBlogProgramming ebook direct download available by crystalattice

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Computer Game Design HELP NEEDED! dcallito C++ Forum 3 01-Jun-2007 13:29
HELP!!!!HELP!!!! Design a game call “Games of Guessing” HELP!!!! tianurn C++ Forum 1 26-Mar-2007 16:38
Astroempires - Game of space strategy astroplanet Computer Software Forum - Games 0 16-Dec-2006 12:07
Fortran problem... Justin Fox Miscellaneous Programming Forum 6 24-Oct-2006 16:30
Tips for game troubleshooting pcxgamer Computer Software Forum - Games 0 02-Jan-2004 06:27

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 14:30.


vBulletin, Copyright © 2000 - 2009, Jelsoft Enterprises Ltd.