Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

in c language Write a program that allows a user to play 5-Card-Draw Poker again

ID: 3717792 • Letter: I

Question

in c language

Write a program that allows a user to play 5-Card-Draw Poker against the computer.

 

Start with the following example code supplied by Deitel & Deitel (example code). This will help you get started with the game of Poker. Please read this site to learn the rules of Poker http://en.wikipedia.org/wiki/5_card_draw. Complete the following step and you will have a working Poker game!!!

 

(1) In order to complete the game of 5-card-draw poker, you should complete the following functions:

    (a) (5 pts) Modify the card dealing function provided in the example code so that a five-card poker hand is dealt.

    (b) (5 pts) Write a function to determine if the hand contains a pair.

    (c) (5 pts) Write a function to determine if the hand contains two pairs.

    (d) (5 pts) Write a function to determine if the hand contains three of a kind (e.g. three jacks).

    (e) (5 pts) Write a function to determine if the hand contains four of a kind (e.g. four aces).

    (f) (5 pts) Write a function to determine if the hand contains a flush (i.e. all five cards of the same suit).

    (g) (5 pts) Write a function to determine if the hand contains a straight (i.e. five cards of consecutive face values).

 

(2) (20 pts) Use the functions developed in (1) to deal two five-card poker hands, evaluate each hand, and determine which is the better hand.

 

(3) (25 pts) Simulate the dealer. The dealer's five-card hand is dealt "face down" so the player cannot see it. The program should then evaluate the dealer's hand, and based on the quality of the hand, the dealer should draw one, two, or three more cards to replace the corresponding number of unneeded cards in the original hand. The program should then re-evaluate the dealer's hand.

 

(4) (10 pts) Make the program handle the dealer's five-card hand automatically. The player should be allowed to decide which cards of the player's hand to replace. The program should then evaluate both hands and determine who wins. Now use the program to play 10 games against the computer. You should be able to test and modify or refine your Poker game based on these results!

 

You may make any adjustments or customizations to your Poker game that you wish!!! Have fun with this assignment!!!

Explanation / Answer

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

typedef struct card
{
int card_number;
int face_index;
int suit_index;
} Card;

void shuffle (int wDeck[4][13]);
void deal (const int wDeck[][13], const char *wFace[], const char *wSuit[], Card p_hand[5]);
int is_pair (int num_faces[13]);

int main (void)
{
/* initialize suit array */
const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};

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

/* initalize deck array */
int deck[4][13] = {0}, count = 0;

Card p1_hand[5] = {{0, 0, 0}};

int num_suits [4] = {0};
int num_faces[13] = {0};

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

shuffle (deck);
deal (deck, face, suit, p1_hand);

printf ("card number: %d ", p1_hand[0].card_number);
printf ("suit number: %d ", p1_hand[0].suit_index);
printf ("face number: %d ", p1_hand[0].face_index);

for (count = 0; count < 5; count++)
{
num_suits[p1_hand[count].suit_index]++;
num_faces[p1_hand[count].face_index]++;
}
for (count = 0; count < 4; count++) // print out suits of cards
{
printf ("num_suits[%d]: %d ", count, num_suits[count]);
}
for (count = 0; count < 13; count++) // print out faces of cards
{
printf ("num_faces[%d]: %d ", count, num_faces[count]);
}
printf ("Status: %d ", is_pair (num_faces));

return 0;
}
/* shuffle cards in deck */

void shuffle (int wDeck[][13])
{
int row = 0; /* row number */
int column = 0; /*column number */
int card = 0; /* card counter */

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

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

/* deal cards in deck */
void deal (const int wDeck[][13], const char *wFace[], const char *wSuit[], Card p_hand[5])
{
int row = 0; /* row number */
int column = 0; /*column number */
int card = 0; /* card counter */
int index = 0;

/* deal each of the 52 cards */
for (card = 1; card <= 5; card++, index++)
{
/* loop through rows of wDeck */
for (row = 0; row <= 3; row++)
{
/* loop through columns of wDeck for current row */
for (column = 0; column <= 12; column++)
{
/* if slot contains current card, display card */
if (wDeck[row][column] == card)
{
p_hand[index].card_number = card;
p_hand[index].face_index = column;
p_hand[index].suit_index = row;

}
}
}
}
}
// returns 1 if a pair exists in the hand; 0 otherwise
int is_pair (int num_faces[13])
{
int status = 0; // no pairs
int index = 0;
for (index = 0; index < 13; index++)
{
if (num_faces[index] == 2)
{
status = 1;
}
}
return status;
}