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

this is in C programming Poker http llen, wikipedia,org/wikiL5 card draw Complet

ID: 3817983 • Letter: T

Question



this is in C programming

Poker http llen, wikipedia,org/wikiL5 card draw Complete the following step and you will have a working Poker game!!! Adapted from Deitel & Deitel's C How to Program (6th Edition0 (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 (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

Explanation / Answer

C CODE FOR THE GIVEN PROBLEM:

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

struct cardEntry{
    int suitCode;
    int Number;
};

typedef struct cardEntry myCard;

//Function to test flush
int isFlush(myCard myHand[])
{
    int suitCode = myHand[0].suitCode;
    int itr;

    for (itr=1;itr<5;itr++)
        if (myHand[itr].suitCode!=suitCode)
            return 0;

    return 1;
}

/*Function to assign value for cards greater than 10*/
int returnRank(void)
{
   getchar();
   printf("Enter the card Rank: ");
  
    int Number = getchar();
    if (Number==84)
        return 10;
    if (Number==74)
        return 11;
    if (Number==81)
        return 12;
    if (Number==75)
        return 13;
    if (Number==65)
        return 14;
    return Number - 48;
}

/*Get suite number*/
int returnSuite(void)
{
   getchar();
   getchar();
   printf("Enter the card suit: ");
    int suitCode = getchar();

    if (suitCode==68)
        return 0;
    if (suitCode==83)
        return 1;
    if (suitCode==72)
        return 2;
    return 3;
}

int search(myCard myHand[],int n)
{
    int itr;

    for (itr=0;itr<5;itr++){
        if (myHand[itr].Number==n)
            return 1;
    }

    return 0;
}

//Funvction to check stright
int isStraight(myCard myHand[], int *type)
{
    int itr,min;

    min=20;

    for (itr=0;itr<5;itr++)
        if (myHand[itr].Number<min)
            min=myHand[itr].Number;

    if (search(myHand,min+1))
        if (search(myHand,min+2))
            if (search(myHand,min+3))
                if (search(myHand,min+4)){
                    *type = min+4;
                    return 1;
                }

    return 0;

}

int isRoyal(myCard myHand[]){
    if (search(myHand,14))
        return 1;
    return 0;
}

//function to check for 4
int isFour(myCard myHand[], int *type)
{
    if (myHand[0].Number==myHand[1].Number&&myHand[1].Number==myHand[2].Number&&myHand[2].Number==myHand[3].Number){
        *type = myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[1].Number&&myHand[1].Number==myHand[2].Number&&myHand[2].Number==myHand[4].Number){
        *type = myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[1].Number&&myHand[1].Number==myHand[3].Number&&myHand[3].Number==myHand[4].Number){
        *type = myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[2].Number&&myHand[2].Number==myHand[3].Number&&myHand[3].Number==myHand[4].Number){
        *type = myHand[0].Number;
        return 1;
    }
    if (myHand[1].Number==myHand[2].Number&&myHand[2].Number==myHand[3].Number&&myHand[3].Number==myHand[4].Number){
        *type = myHand[1].Number;
        return 1;
    }
    return 0;
}


//Three of a kind test
int threeofkind(myCard myHand[], int *type)
{
    if (myHand[0].Number==myHand[1].Number&&myHand[1].Number==myHand[2].Number){
        *type=myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[1].Number&&myHand[1].Number==myHand[3].Number){
        *type=myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[1].Number&&myHand[1].Number==myHand[4].Number){
        *type=myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[3].Number&&myHand[3].Number==myHand[4].Number){
        *type=myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[2].Number&&myHand[2].Number==myHand[3].Number){
        *type=myHand[0].Number;
        return 1;
    }
    if (myHand[0].Number==myHand[2].Number&&myHand[2].Number==myHand[4].Number){
        *type=myHand[0].Number;
        return 1;
    }
    if (myHand[2].Number==myHand[3].Number&&myHand[3].Number==myHand[4].Number){
        *type=myHand[2].Number;
        return 1;
    }
    if (myHand[1].Number==myHand[2].Number&&myHand[2].Number==myHand[3].Number){
        *type=myHand[1].Number;
        return 1;
    }
    if (myHand[1].Number==myHand[2].Number&&myHand[2].Number==myHand[4].Number){
        *type=myHand[1].Number;
        return 1;
    }
    if (myHand[1].Number==myHand[3].Number&&myHand[3].Number==myHand[4].Number){
        *type=myHand[1].Number;
        return 1;
    }

    return 0;
}

int isFull(myCard myHand[],int *type)
{
    int second;
    int itr=0;
    while (myHand[itr].Number==*type)
        itr++;
    second = myHand[itr].Number;

    for (itr=itr+1;itr<5;itr++){
        if (myHand[itr].Number!=*type&&myHand[itr].Number!=second)
            return 0;
    }
    return 1;
}

//Function to check pair
int chekPair(myCard myHand[],int *type)
{
    int itr,j;

    for (itr=0;itr<4;itr++)
        for (j=itr+1;j<5;j++)
            if (myHand[itr].Number==myHand[j].Number){
                *type=myHand[itr].Number;
                return 1;
            }

    return 0;
}

//Function to chekc two pair
int chkTwoPair(myCard myHand[], int *type, int *secondType)
{
    int itr,j;

    for (itr=0;itr<4;itr++)
        for (j=itr+1;j<5;j++)
            if (myHand[itr].Number==myHand[j].Number&&myHand[itr].Number!=*type){
                if (myHand[itr].Number<*type){
                    *secondType=myHand[itr].Number;
                    return 1;
                }
                else{
                    *secondType=*type;
                    *type=myHand[itr].Number;
                    return 1;
                }

            }

    return 0;
}

int findHighDouble(myCard myHand[],int *type, int *secondType, int *highCard)
{
    int itr;

    for (itr=0;itr<5;itr++)
        if (myHand[itr].Number!=(*type)&&myHand[itr].Number!=(*secondType)){
            *highCard = myHand[itr].Number;
            return 1;
        }

    return 0;
}

int findHighSimple(myCard myHand[],int *type, int *highCard)
{
    int itr;
    int vmax = 0;

    for (itr=0;itr<5;itr++)
        if (myHand[itr].Number!=*type&&myHand[itr].Number>vmax){
            vmax = myHand[itr].Number;
        }

    *highCard = vmax;
    return 1;
}

int findHigh(myCard myHand[], int *highCard)
{
    int itr;
    int vmax = 0;

    for (itr=0;itr<5;itr++)
        if (myHand[itr].Number>vmax)
            vmax = myHand[itr].Number;

    *highCard = vmax;
    return 1;
}

int isFlush(myCard myHand[],int *highCard)
{
    int itr;
    int suitCode;

    suitCode = myHand[0].suitCode;

    for (itr=1;itr<5;itr++)
        if (myHand[itr].suitCode!=suitCode)
            return 0;

    return 1;
}

int getPoints(myCard myHand[], int *type, int *highCard,int *secondType)
{
    if (isFour(myHand, type))
        return 8;
    if (threeofkind(myHand,type)){
        if (isFull(myHand,type))
            return 7;
        else
            return 4;
    }

    if (isStraight(myHand,type)){
        if(isFlush(myHand)){
            if (isRoyal(myHand))
                return 10;
            else
                return 9;
        }
        return 5;
    }

    if (isFlush(myHand,highCard))
        return 6;

    if (chekPair(myHand,type)){
        if (chkTwoPair(myHand,type,secondType)){
            findHighDouble(myHand,type,secondType,highCard);
            return 3;
        }
        else{
            findHighSimple(myHand,type,highCard);
            return 2;
        }
    }

    findHigh(myHand,highCard);
    return 1;

}

//function to determine the winner
int detWin(myCard p1Hand[], myCard p2Hand[])
{
    int play1,play2;
    int cardType1, highCard1,cardType2,highCard2;
    int typeSec,typeSec1;

    play1 = getPoints(p1Hand,&cardType1,&highCard1,&typeSec);
    play2 = getPoints(p2Hand,&cardType2,&highCard2,&typeSec1);

    printf("play1 = %d play2 = %dn",play1,play2);

    if (play1>play2)
        return 1;
    else if (play2>play1)
        return 0;
    else{
        if (play1==1){
            if (highCard1>highCard2)
                return 1;
            else
                return 0;
        }
        if (play1==2){
            if (cardType1>cardType2)
                return 1;
            else if (cardType2>cardType1)
                return 0;
            else{
                if (highCard1>highCard2)
                    return 1;
                else
                    return 0;
            }
        }
        if (play1==3){
            if (cardType1>cardType2)
                return 1;
            else if (cardType2>cardType1)
                return 0;
            else {
                if (typeSec>typeSec1)
                    return 1;
                else if(typeSec1>typeSec)
                    return 0;
                else{
                    if (highCard1>highCard2)
                        return 1;
                    else
                        return 0;
                }
            }
        }
        if (play1==4){
            if (cardType1>cardType2)
                return 1;
            else
                return 0;
        }
        if (play1==5){
            if (cardType1>cardType2)
                return 1;
            else
                return 0;
        }
        if (play1==9){
            if (cardType1>cardType2)
                return 1;
            else
                return 0;
        }
        if (play1==6){
            if (highCard1>highCard2)
                return 1;
            else
                return 0;
        }
    }

    return 2;
}

int main(){
    myCard p1Hand[5];
    myCard p2Hand[5];
    int itr,pr;
    int succ = 0;

    for (pr=0;pr<1000;pr++){

        /* read cards for player 1*/
        for (itr=0;itr<4;itr++)
       {
            p1Hand[itr].Number = returnRank();
            p1Hand[itr].suitCode = returnSuite();
        }
      
       p1Hand[4].Number = returnRank();
        p1Hand[4].suitCode = returnSuite();

        /* read cards for player 2*/
        for (itr=0;itr<4;itr++)
       {
            p2Hand[itr].Number = returnRank();
            p2Hand[itr].suitCode = returnSuite();
        }
      
        p2Hand[4].Number = returnRank();
        p2Hand[4].suitCode = returnSuite();

        if (detWin(p1Hand,p2Hand))
       {
            printf("Player One Winsn");
            succ++;
        }
        else
            printf("Player Two Winsn");

    }

    printf("Player One succ %d timesn",succ);
    printf("Player Two succ %d timesn",1000-succ);
   system("pause");

return 0;
}