this is in C programming Poker http llen, wikipedia,org/wikiL5 card draw Complet
ID: 3817983 • Letter: T
Question
this is in C programming
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;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.