Question

(Card Shuffling and Dealing) Modify the program below so that the card-dealing function deals a five-card...

(Card Shuffling and Dealing) Modify the program below so that the card-dealing function deals a five-card poker hand.

Then write the following additional functions:

a) Determine whether the hand contains two pairs

b) Determine whether the hand contains a full house (i.e., three of a kind with pair).

c) Determinewhetherthehandcontainsastraight flush (i.e.,fivecardsofconsecutivefacevalues).

d) Determine whether the hand contains a flush (i.e., five of the same suit)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define SUITS 4

#define FACES 13

#define CARDS 52

// prototypes

void shuffle(unsigned int wDeck[][FACES]); // shuffling modifies wDeck

void deal(unsigned int wDeck[][FACES], const char *wFace[],

const char *wSuit[]); // dealing doesn't modify the arrays

int main(void)

{

// initialize deck array

unsigned int deck[SUITS][FACES] = { 0 };

srand(time(NULL)); // seed random-number generator

shuffle(deck); // shuffle the deck

// initialize suit array

const char *suit[SUITS] =

{"Hearts", "Diamonds", "Clubs", "Spades"};

// initialize face array

const char *face[FACES] =

{"Ace", "Deuce", "Three", "Four",

"Five", "Six", "Seven", "Eight",

"Nine", "Ten", "Jack", "Queen", "King"};

deal(deck, face, suit); // deal the deck

}

// shuffle cards in deck

void shuffle(unsigned int wDeck[][FACES])

{

// for each of the cards, choose slot of deck randomly

for (size_t card = 1; card <= CARDS; ++card) {

size_t row; // row number

size_t column; // column number

// choose new random location until unoccupied slot found

do {

row = rand() % SUITS;

column = rand() % FACES;

} while(wDeck[row][column] != 0); // end do...while

// place card number in chosen slot of deck

wDeck[row][column] = card;

}

}

// deal cards in deck

void deal(unsigned int wDeck[][FACES], const char *wFace[],

const char *wSuit[])

{

// deal each of the cards

for (size_t card = 1; card <= CARDS; ++card) {

// loop through rows of wDeck

for (size_t row = 0; row < SUITS; ++row) {

// loop through columns of wDeck for current row

for (size_t column = 0; column < FACES; ++column) {

// if slot contains current card, display card

if (wDeck[row][column] == card) {

printf("%5s of %-8s%c", wFace[column], wSuit[row],

card % 2 == 0 ? '\n' : '\t'); // 2-column format

}

}

}

}

}

0 0
Add a comment Improve this question Transcribed image text
Answer #1

Here i am adding some additional feature also for your reference like... Determine whether the hand contains a pairs , Determine whether the hand contains four of a kind ..etc. you can easily remove it if you don't want it as i wrote in a separate function for all type of possibilties regarding this problem.

I also used a file handling to write it into separate file.

I just write for your reference. i hope you like it.

Source code:-

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SUITS 4
#define FACES 13
#define CARDS 52

//Function Prototypes
void shuffle(int wDeck[][FACES]);
void deal(const int wDeck[][FACES], const char *wface[], const char *wSuit[], FILE *p, char *result[], unsigned int rindex);
void display(const char *wfFace[], const char *wfSuit[], const char *wsFace[], const char *wsSuit[], FILE *p);

int main(void) {

   //Print ouput into a text file
   FILE *p;
   FILE *r;

   p = fopen("projectLog.txt", "w");       //Includes all 100 rounds of the poker game
   r = fopen("projectResult.txt", "w");   //Includes the results from eval in an array

   //initialize suit array
   const char *suit[SUITS] = {"Hearts", "Diamonds", "Clubs", "Spades"};

   //initialize face array
   const char *face[FACES] = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
                               "Eight", "Nine", "Ten", "Jack", "Queen", "King"};

   char *result[100];

   //initialize deck array
   int deck[SUITS][FACES] = {0};

   srand(time(0));

   //Plays the poker game 100 times
   for(unsigned int hand = 1; hand <= 100; hand++) {

       fprintf(p, "ROUND %u: \n", hand);

       shuffle(deck);   //Shuffles the deck
       deal(deck, face, suit, p, result, hand-1);   //deal the deck

       fprintf(r, "%s\n", result[hand-1]);

       for(int i = 0; i < SUITS; i++) {
           for(int j = 0; j < FACES; j++) {
               deck[i][j] = 0;
           }
       }

   }

   fclose(p);
   fclose(r);

}

//shuffle cards in deck
void shuffle(int wDeck[][FACES]) {
   int row, column, card;

   //for each card, choose slot of deck randomly
   for(card = 1; card <= CARDS; card++) {
       //choose new random location until unoccupied slot found
       do {
           row = rand() % SUITS;
           column = rand() % FACES;
       }
       while(wDeck[row][column] != 0);

       //place card number in chosen slot of deck
       wDeck[row][column] = card;
   }
}

//deal 5-cards poker hand in deck
void deal(const int wDeck[][FACES], const char *wFace[], const char *wSuit[], FILE *p, char *result[], unsigned int rindex) {

   //operational functions
   void pair(const char *wfFace[], const char *wfSuit[], int result[], FILE *p);
   void twoPair(const char *wfFace[], const char *wfSuit[], int result[], FILE *p);
   void threeKind(const char *wfFace[], const char *wfSuit[], int result[], FILE *p);
   void fourKind(const char *wfFace[], const char *wfSuit[], int result[], FILE *p);
   void flush(const char *wfFace[], const char *wfSuit[], int result[], FILE *p);
   void straight(const char *wfFace[], const char *wfSuit[], const char *wFace[], int result[], FILE *p);
   void eval(const int firstResult[], const int secondResult[], FILE *p, char *result[], unsigned int rindex);


   int card, row, column, i, j = 0;

   /*Storage for the two five-hand cards
      Boolean Result:
          0 = Pair
          1 = Two Pair
          2 = Three of a kind
          3 = Four of a kind
          4 = Flush
          5 = Straight
   */

   //FIRST HAND
   char *fSuit[5];
   char *fFace[5];
   int fResult[6] = {0};

   //SECOND HAND
   char *sSuit[5];
   char *sFace[5];
   int sResult[6] = {0};


   //deal 5-card poker hand
   for(card = 1, i = 0; card <= 10; card++, i++){
       for(row = 0; row < 4; row++){
           for(column = 0; column < 13; column++){
               if(wDeck[ row ][ column ] == card && i < 5){
                   fSuit[ i ] = wSuit[ row ];
                    fFace[ i ] = wFace[ column ];
               }else if(wDeck[ row ][ column ] == card && i > 4){
                   sSuit[ j ] = wSuit[ row ];
                    sFace[ j ] = wFace[ column ];
                    j++;
               }
           }
       }
   }

   //display 5-card poker hand
   display(fFace, fSuit, sFace, sSuit, p);

   //EVALUATE
   fprintf(p,"\n******************\nEvaluate both hand\n******************\n\nFirst hand\n**********\n\n");
   pair( fFace, fSuit, fResult, p);
   //fprintf(p,"\n fResult[ 0 ] = %d\n", fResult[ 0 ] );
   twoPair( fFace, fSuit, fResult, p);
   //fprintf(p,"\n fResult[ 1 ] = %d\n", fResult[ 1 ] );
   threeKind( fFace, fSuit, fResult, p);
   //fprintf(p,"\n fResult[ 2 ] = %d\n", fResult[ 2 ] );
   fourKind( fFace, fSuit, fResult, p);
   //fprintf(p,"\n fResult[ 3 ] = %d\n", fResult[ 3 ] );
   flush( fFace, fSuit, fResult, p);
   //fprintf(p,"\n fResult[ 4 ] = %d\n", fResult[ 4 ] );
   straight( fFace, fSuit, wFace, fResult, p);
   //fprintf(p,"\n fResult[ 5 ] = %d\n", fResult[ 5 ] );

   fprintf(p,"\nSecond hand\n***********\n\n");
   pair( sFace, sSuit, sResult, p);
   //fprintf(p,"\n sResult[ 0 ] = %d\n", sResult[ 0 ] );
   twoPair( sFace, sSuit, sResult, p);
   //fprintf(p,"\n sResult[ 1 ] = %d\n", sResult[ 1 ] );
   threeKind( sFace, sSuit, sResult, p);
   //fprintf(p,"\n sResult[ 2 ] = %d\n", sResult[ 2 ] );
   fourKind( sFace, sSuit, sResult, p);
   //fprintf(p,"\n sResult[ 3 ] = %d\n", sResult[ 3 ] );
   flush( sFace, sSuit, sResult, p);
   //fprintf(p,"\n sResult[ 4 ] = %d\n", sResult[ 4 ] );
   straight( sFace, sSuit, wFace, sResult, p);
   //fprintf(p,"\n sResult[ 5 ] = %d\n", sResult[ 5 ] );

   eval(fResult, sResult, p, result, rindex);

}

//Displays the two hands
void display(const char *wfFace[], const char *wfSuit[], const char *wsFace[], const char *wsSuit[], FILE *p) {
   int i;

   fprintf(p,"*************************\nYour five-card poker hand\n*************************\n\nFirst hand %28s\n********** %28s\n\n", "Second hand", "***********");

   for(i = 0; i < 5; i++) {
       fprintf(p,"%10s of %-8s %10s of %-8s\n", wfFace[i], wfSuit[i], wsFace[i], wsSuit[i]);
   }
}

//Determine whether the hand contains a pair
void pair(const char *wfFace[], const char *wfSuit[], int result[], FILE *p) {
   int card;
   int i, j = 0, k;
   int pair[5] = {0};

   fprintf(p,"\nPair...\n");
   for(card = 0; card < 5; card++) {
       for(i = card + 1; i < 5; i++) {
           if(wfFace[card] == wfFace[i]) {
               j++;
               pair[card] = i;
           }
       }
   }

   if(j == 1) {
       for(card = 0; card < 5; card++) {
           if(pair[card] != 0) {
               k = pair[card];
               fprintf(p,"\n%10s of %-8s and %5s of %-8s\n", wfFace[card], wfSuit[card], wfFace[k], wfSuit[k]);
               result[0] = 1;
           }
       }
   } else {
       fprintf(p,"\n Your five-hand card does not contain any pair. \n");
   }
}

//Determine whether the hand contains two pairs
void twoPair(const char *wfFace[], const char *wfSuit[], int result[], FILE *p) {
    int card;
   int i, j = 0, k;
    int pair[5] = {0};

    //compute whether the five-hand card contains two pair
    fprintf(p,"\nTwo-pair...\n");
    for(card = 0; card < 5; card++) {
        for(i = card + 1; i < 5; i++) {
           if(wfFace[card] == wfFace[i]){
             j++;
             pair[card] = i;
           }
        }
    }

    //display result
    if(j == 2) {
       for(card = 0; card < 5; card++) {
          if(pair[card] != 0) {
             k = pair[card];
             fprintf(p,"\n%10s of %-8s and %5s of %-8s\n", wfFace[card], wfSuit[card], wfFace[k], wfSuit[k]);
          }
       }
    } else {
       fprintf(p,"\n Your five-hand card does not contains two pair.\n");
    }
}

//Determine whether the hand contains three of a kind
void threeKind(const char *wfFace[], const char *wfSuit[], int result[], FILE *p) {
   int card;
   int i, j = 0, k, x;
   int pair[3] = {0};

   fprintf(p,"\nThree of a kind...\n");
        for(card = 0; card < 3; card++) {
            for(i = card + 1; i < 5; i++) {
               if(wfFace[card] == wfFace[i]) {
                  for(x = i + 1; x < 5; x++){
                     if(wfFace[i] == wfFace[x]) {
                        j++;
                        pair[0] = card;
                        pair[1] = i;
                        pair[2] = x;
                     }
                  }
               }
            }
        }

   if(j == 1) {
           for(card = 0; card < 3; card++) {
                 k = pair[card];
                 fprintf(p,"\n%10s of %-8s\n", wfFace[k], wfSuit[k]);
           }
        } else {
           fprintf(p,"\n Your five-hand card doesn't contains three of a kind.\n");
        }
}

//Determine whether the hand contains four of a kind
void fourKind(const char *wfFace[], const char *wfSuit[], int result[], FILE *p) {
   int card;
   int i, index = 0;
   int pair[5] = {0};

   fprintf(p,"\nFour of a kind...\n");
   for(card = 0; card < 2; ++card) {
       for(i = card + 1; i < 5; i++) {
               if(wfFace[card] == wfFace[i]) {
                   index++;
                   if(index == 1)
                       pair[i - 1] = 1;
                   pair[i] = 1;
               }
       }
       if(index == 3)
           break;
       else if(index > 3)
           break;
       else {
           index = 0;
           for(i = 0; i < 5; i++)
               pair[i] = 0;
       }
   }

   if(index == 3) {
       for(i = 0; i < 5; i++) {
           if(pair[1] == 1)
               fprintf(p,"\n%5s of %-9s\n", wfFace[i], wfSuit[i]);
       }
       fprintf(p,"\n");
   } else {
       fprintf(p,"\n Your five-hand card doesn't contains four-of-a-kind.\n");
   }
}

//Determines if the hand is a flush
void flush (const char *wfFace[], const char *wfSuit[], int result[], FILE *p) {
   int i, j = 0;

   //compute whether your five-hand card contains a flush
   fprintf(p,"\nFlush...\n");
   for(i = 0; i < 5; i++) {
      if(wfSuit[0] == wfSuit[i])
         j++;
   }

   if(j == 4) {
       result[4] = 1;
       for(i = 0; i < 5; i++) {
           fprintf(p,"\n %5s of %-8s\n", wfFace[i], wfSuit[i]);
       }
   }
   else {
       fprintf(p,"\n Not flush\n");
   }
}

//Determines if the hand is a straight
void straight(const char *wfFace[], const char *wfSuit[], const char *wFace[], int result[], FILE *p) {
   int i, j, k;
   int pass, count, hold, check = 1;
   int faceValue[5] = {0};

   fprintf(p,"\nStraight...\n");
   //locate face value and store in an array
   for(i = 0 ; i < 5; i++) {
      for(j = 0 ; j < 13; j++) {
         if(wfFace[i] == wFace[ j ]) {
            faceValue[i] = j;
         }
      }
   }

   //sort face value in ascending order using bubble sort
   for(pass = 0; pass < 4; pass++) {
      for(count = 0; count < 4; count++){
         if(faceValue[ count ] > faceValue[ count + 1 ]) {
            //swap
            hold = faceValue[ count ];
            faceValue[count] = faceValue[count + 1];
            faceValue[count + 1] = hold;
         }
      }
   }

   //check if the hand contains a straight
   for(i = 0; i < 4; i++) {
      if(faceValue[i] + 1 != faceValue[i + 1]) {
         check = 0;
      }
   }

   if(check == 1) {
       result[5] = 1;
       for(i = 0; i < 5; i++) {
           fprintf(p,"\n %5s of %-8s\n", wfFace[i], wfSuit[i]);
       }
   }
   else {
       fprintf(p,"\n Not a straight\n");
   }

}

//Evaluates the hands to determine which is the better hand
void eval(const int firstResult[], const int secondResult[], FILE *p, char *result[], unsigned int rindex) {
   int i, x = 0, y = 0;
   fprintf(p,"\n******\nResult\n******\n\n");

   for(i = 0; i < 6; ++i) {
       if(firstResult[i] == 1)
           x = i + 1;
       if(secondResult[i] == 1)
           y = i + 1;
   }

   fprintf(p,"x = %d y = %5d\n\n", x, y);
   if(x > y){
       fprintf(p, "First hand wins\n\n");
       result[rindex] = "First hand wins";
   }
   else if(y > x){
       fprintf(p, "Second hand wins\n\n");
       result[rindex] = "Second hand wins";
   }
   else if(x == y) {
       fprintf(p, "Tie\n\n");
       result[rindex] = "Tie";
   }
   else {
       fprintf(p, "Error, could not evaluate\n\n");
       result[rindex] = "Error, could not evaluate";
   }
}


***********************************End of program***********************************************************

Add a comment
Know the answer?
Add Answer to:
(Card Shuffling and Dealing) Modify the program below so that the card-dealing function deals a five-card...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • 7.12 (Card Shuffling and Dealing) Modify the program in Fig. 7.24 so that the card-dealing function deals a five-card...

    7.12 (Card Shuffling and Dealing) Modify the program in Fig. 7.24 so that the card-dealing function deals a five-card poker hand. Then write the following additional functions: a) Determine whether the hand contains a pair. b) Determinewhetherthehandcontainstwopairs. c) Determine whether the hand contains three of a kind (e.g., three jacks). d) Determinewhetherthehandcontainsfourofakind(e.g.,fouraces). e) Determine whether the hand contains a flush (i.e., all five cards of the same suit). f) Determine whether the hand contains a straight (i.e., five cards of...

  • The following program simulates shuffling a deck of cards. (The line numbers are not ) part of the code). Without changing its functionality, rewrite the program by replacing the 2D array card [5...

    The following program simulates shuffling a deck of cards. (The line numbers are not ) part of the code). Without changing its functionality, rewrite the program by replacing the 2D array card [52] [2] with a double pointer char **card and replacing the code between line 12 and line 26 with a function. The function prototype could be void shuffleCards (char **, char [, char [) 1 7/Shuffling cards 2 4 using namespace std; 6 main() #include #include <cstdlib> <iostream>...

  • C Programming The following code creates a deck of cards, shuffles it, and deals to players....

    C Programming The following code creates a deck of cards, shuffles it, and deals to players. This program receives command line input [1-13] for number of players and command line input [1-13] for number of cards. Please modify this code to deal cards in a poker game. Command line input must accept [2-10] players and [5] cards only per player. Please validate input. Then, display the sorted hands, and then display the sorted hands - labeling each hand with its...

  • Given these three classes: Card, DeckOfCards, and DeckOfCardsTest. Extend the DeckofCards class to implement a BlackJack...

    Given these three classes: Card, DeckOfCards, and DeckOfCardsTest. Extend the DeckofCards class to implement a BlackJack class, which implements a BlackJack game. Please do not use any java applet on the coding. Hint: Use a test class to test above classes. Pulic class Card {    private final String face; // face of card ("Ace", "Deuce", ...)    private final String suit; // suit of card ("Hearts", "Diamonds", ...)    // two-argument constructor initializes card's face and suit    public...

  • NEED HELP TO CREATE A BLACKJACK GAME WITH THE UML DIAGRAM AND PROBLEM SOLVING TO GET...

    NEED HELP TO CREATE A BLACKJACK GAME WITH THE UML DIAGRAM AND PROBLEM SOLVING TO GET CODE TO RUN!! THANKS Extend the DeckofCards and the Card class in the book to implement a card game application such as BlackJack, Texas poker or others. Your game should support multiple players (up to 5 for BlackJack). You must build your game based on the Cards and DeckofCards class from the book. You need to implement the logic of the game. You can...

  • I wrote a card shuffle program and I am trying to see how I can add...

    I wrote a card shuffle program and I am trying to see how I can add a sorting function to the program to sort the players hands before printing them. How would I do this? #include <iostream> #include <iomanip> #include <vector> #include <algorithm> using namespace std; void printHand(int []); void deal(vector<int> &, int[], int[], int[], int[]); void unwrapDeck(vector<int> &deck) { for(int i=0; i<=51; i++) deck.push_back(i); } void shuffleDeck(vector<int> &deck) { //Status of cards before shuffling cout << "Before shuffling: "...

  • Deck of Cards Program I need help printing a flush, which is showing the top 5...

    Deck of Cards Program I need help printing a flush, which is showing the top 5 cards of the same suite. Below is the code I already have that answers other objectives, such as dealing the cards, and finding pairs. Towards the end I have attempted printing a flush, but I cannot figure it out. public class Shuffler {    /**    * The number of consecutive shuffle steps to be performed in each call    * to each sorting...

  • Write a Java program that deals a five-card poker hand and then determines which of the...

    Write a Java program that deals a five-card poker hand and then determines which of the following hands are contained in it: high card, pairs, two pair, three of a kind, flush. Test only for those hands. Use the numbers from 0 to 51 to represent the cards of the poker deck. 1. To deal the cards, your main method should call a secondary method that selects a random card. The secondary method should accept 5 integers that represent the...

  • //main.cpp #include <iostream> #include <iomanip> #include "deck-of-cards.hpp" void RunAllTests() { int count; std::cin >> count; DeckOfCards...

    //main.cpp #include <iostream> #include <iomanip> #include "deck-of-cards.hpp" void RunAllTests() { int count; std::cin >> count; DeckOfCards myDeckOfCards; for (int i = 0; myDeckOfCards.moreCards() && i < count; ++i) { std::cout << std::left << std::setw(19) << myDeckOfCards.dealCard().toString(); if (i % 4 == 3) std::cout << std::endl; } } int main() { RunAllTests(); return 0; } //card.hpp #ifndef CARD_HPP_ #define CARD_HPP_ #include <string> class Card { public: static const int totalFaces = 13; static const int totalSuits = 4; Card(int cardFace, int...

  • HELP NEED!! Can some modified the program Below in C++ So that it can do what...

    HELP NEED!! Can some modified the program Below in C++ So that it can do what the Problem below asked it today???? #include <iostream> #include <stdlib.h> #include <string> #include <time.h> /* time */ #include <sstream> // for ostringstream using namespace std; // PlayingCard class class PlayingCard{ int numRank; int numSuit; string rank; string suit; public: PlayingCard(); PlayingCard(int numRank,int numSuit); void setRankString(); void setSuitString(); void setRank(int numRank); void setSuit(int numSuit); string getRank(); string getSuit(); int getRankNum(); int getSuitNum(); string getCard(); };...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT