This is our problem:
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”


This is the code I learned.
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?
And when you run the program,there is a strange problem:when you want to discard cards,you must use control+z to make system do this,or the system will not response.Why?
How to fix?


Super Beginner!