#include <stdio.h>
#include <math.h>
int chips,bet;
int a, i, j, k, n, m, swapped;
long long value, playerscore, computerscore;
char *numbers[]={
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"ten",
"jack",
"queen",
"king",
"ace"
};
char *suits[]={
"hearts",
"clubs",
"diamonds",
"spades"
};
chips=5;
struct card {
int suit;
int number;
};
struct card player[3];
struct card computer[3];
struct card cardone;
struct card cardtwo;
struct card cardthree;
int playerdeal()
{
while (a==0)
{
for (i=0; i<3; i++)
{
n=rand();
player[i].suit=(n%4);
m=rand();
player[i].number=(m%13);
}
while ((player[0].suit==player[1].suit && player[0].number==player[1].number) || (player[0].suit==player[2].suit && player[0].number==player[2].number) || (player[2].suit==player[1].suit && player[2].number==player[1].number))
{
for (i=0; i<3; i++)
{
n=rand();
player[i].suit=(n%4);
m=rand();
player[i].number=(m%13);
}
}
if (player[0].number<=player[1].number && player[1].number<=player[2].number)
{
break;
}
}
}
int computerdeal()
{
while (a==0)
{
for (i=0; i<3; i++)
{
n=rand();
computer[i].suit=(n%4);
m=rand();
computer[i].number=(m%13);
}
while ((computer[0].suit==computer[1].suit && computer[0].number==computer[1].number) || (computer[0].suit==computer[2].suit && computer[0].number==computer[2].number) || (computer[2].suit==computer[1].suit && computer[2].number==computer[1].number))
{
for (i=0; i<3; i++)
{
n=rand();
computer[i].suit=(n%4);
m=rand();
computer[i].number=(m%13);
}
}
if (computer[0].number<=computer[1].number && computer[1].number<=computer[2].number)
{
break;
}
}
}
int straightflush ()
{
value=0;
if (cardone.suit==cardtwo.suit && cardtwo.suit==cardthree.suit)
{
if (cardone.number+1==cardtwo.number && cardone.number+2==cardthree.number)
{
value=(cardthree.number+1)*pow(13,10);
}
if (cardone.number+1==0 && cardtwo.number==1 && cardthree.number==12)
{
value=(cardtwo.number+1)*pow(13,10);
}
}
return value;
}
int threeofakind ()
{
value=0;
if (cardone.number==cardtwo.number && cardtwo.number==cardthree.number)
{
value=(cardone.number+1)*pow(13,9);
}
return value;
}
int straight ()
{
value=0;
if (cardone.number+1==cardtwo.number && cardone.number+2==cardthree.number)
{
value=(cardthree.number+1)*pow(13,8);
}
if (cardone.number+1==0 && cardtwo.number==1 && cardthree.number==12)
{
value=(cardtwo.number+1)*pow(13,8);
}
return value;
}
int flush ()
{
value=0;
if (cardone.suit==cardtwo.suit && cardtwo.suit==cardthree.suit)
{
value=(cardthree.number+1)*pow(13,7)+(cardtwo.number+1)*pow(13,6)+(cardone.number+1)*pow(13,5);
}
return value;
}
int pair ()
{
value=0;
if (cardone.number==cardtwo.number)
{
value=(cardone.number+1)*pow(13,4)+(cardthree.number+1)*pow(13,3);
}
if (cardtwo.number==cardthree.number)
{
value=(cardtwo.number+1)*pow(13,4)+(cardone.number+1)*pow(13,3);
}
if (cardone.number==cardthree.number)
{
value=(cardone.number+1)*pow(13,4)+(cardtwo.number+1)*pow(13,3);
}
return value;
}
int highcard ()
{
value=0;
value=(cardthree.number+1)*pow(13,2)+(cardtwo.number+1)*pow(13,1)+(cardone.number+1);
return value;
}
int playerevaluate(struct card first, struct card second, struct card third)
{
cardone=player[0];
cardtwo=player[1];
cardthree=player[2];
playerscore=straightflush()+threeofakind()+straight()+flush()+pair()+highcard();
return playerscore;
}
int computerevaluate(struct card first, struct card second, struct card third)
{
cardone=computer[0];
cardtwo=computer[1];
cardthree=computer[2];
computerscore=straightflush()+threeofakind()+straight()+flush()+pair()+highcard();
return computerscore;
}
int main ()
{
srand(time(NULL));
a=0;
printf("Welcome to DILLIGAF poker. You have %d chips and will be charged one chip to play the game, leaving you with %d chips.\n", chips, chips-1);
chips=chips-1;
playerdeal();
playerscore=playerevaluate(player[0],player[1],player[2]);
printf("Your hand is as follows:\n");
for (i=0; i<3; i++)
{
printf("Card %d is a %s of %s.\n", i+1, numbers[player[i].number], suits[player[i].suit]);
}
printf("The score for your hand is %ll.\n",playerscore);
printf("How many chips would you like to bet?\n");
scanf("%d", &bet);
chips=chips-bet;
computerdeal();
computerscore=computerevaluate(computer[0],computer[1],computer[2]);
printf("The computer's hand is as follows:\n");
for (i=0; i<3; i++)
{
printf("Card %d is a %s of %s.\n", i+1, numbers[computer[i].number], suits[computer[i].suit]);
}
printf("The score for the computer's hand is %ll.\n",computerscore);
if (playerscore>computerscore && playerscore>pow(13,10))
{
chips=chips+(bet*5);
printf("You won with a straight flush. You now have %d chips. Congratulations.\n",chips);
}
else if (playerscore>computerscore && playerscore>pow(13,9))
{
chips=chips+(bet*4);
printf("You won with three of a kind. You now have %d chips. Congratulations.\n",chips);
}
else if (playerscore>computerscore)
{
chips=chips+(bet*2);
printf("You won. You now have %d chips. Congratulations.\n",chips);
}
else if (playerscore==computerscore)
{
chips=chips+bet;
printf("You tied the computer. You get back what you bet, so you now have %d chip(s).\n",chips);
}
else
{
printf("You lost. You have %d chips.\n",chips);
}
}