Vous êtes sur la page 1sur 15

ALGORITHM

GSLC PROJECT

POKER GAME

Group:
-

Ellys (161217820 31PUT)


Stephanie (1601225740 31PUT)
Veronica (1601218174 31PUT)
Hana (1601274452 31PUT)
Ratih (1601285696 41PUT)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void shuffle(int wDeck[][13]){
int row,column,card;
for(card=1;card<=52;card++){
do{
row=rand()%4;
column=rand()%13;
}while(wDeck[row][column]!=0);
wDeck[row][column]=card;
}
}
int
int
int
int
int

iStraight=15;
iFlush=15;
four1=0,iFour=15;
three1=0,iThree=15,pair1=0;
iLeftC[6]={15,15,15,15,15,15},iLeftR[6]={15,15,15,15,15,15};

int
int
int
int
int

straight2=0,jStraight=15;
flush2=0,jFlush=15;
four2=0,jFour=15;
three2=0,jThree=15,pair2=0,jPair[6]={15,15,15,15,15,15};
jLeftC[6]={15,15,15,15,15,15}, jLeftR[6]={15,15,15,15,15,15};

int TcardC[6],TcardR[6];
int straightf=0,flushf=0,fourf=0,threef=0,pairf=0,fPair[6]={15,15,15,15,15,15};
void deal2(const int wDeck[][13], const char *wFace[], const char *wSuit[]){
int card,row,column;
int checkRow[6],checkColumn[6];
//deal 5 card for player
for(card=1;card<=5;card++){
for(row=0;row<=3;row++){
for(column=0;column<=12;column++){
if(wDeck[row][column]==card){
checkRow[card]=row;
checkColumn[card]=column;
}
}
}
}
int temp;
//sort hand
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(checkColumn[card]>checkColumn[card+1]){
temp=checkColumn[card];
checkColumn[card]=checkColumn[card+1];
checkColumn[card+1]=temp;
temp=checkRow[card];
checkRow[card]=checkRow[card+1];
checkRow[card+1]=temp;

}
}
}
//show hand
for(int i=1;i<=5;i++) printf("Card %d : %5s of %-8s\n", i,
wFace[checkColumn[i]], wSuit[checkRow[i]]);
int nCard,cardNum[5];
printf("\nInput number of how many cards you want to change (0-3): ");
scanf("%d",&nCard);
if(nCard==0);
else {
printf("Input card number separated by space (1-5): ");
for(int i=1;i<=nCard;i++){
if(i==nCard) scanf("%d",&cardNum[i]);
else scanf("%d ",&cardNum[i]);
}
//change card(s)
int totalCard=5+nCard;
int dcheckRow[4],dcheckColumn[4];
//draw -> insert to variable
for(card=6;card<=totalCard;card++){
for(row=0;row<=3;row++){
for(column=0;column<=12;column++){
if(wDeck[row][column]==card){
dcheckRow[card-5]=row;
dcheckColumn[card-5]=column;
}
}
}
}
//change variable -> hand's
for(int i=1;i<=nCard;i++){
checkColumn[cardNum[i]]=dcheckColumn[i];
checkRow[cardNum[i]]=dcheckRow[i];
}
}//end changing cards
//sort hand 2 (after redraw)
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(checkColumn[card]>checkColumn[card+1]){
temp=checkColumn[card];
checkColumn[card]=checkColumn[card+1];
checkColumn[card+1]=temp;
temp=checkRow[card];
checkRow[card]=checkRow[card+1];
checkRow[card+1]=temp;
}
}
}
printf("\n\n");
for(int i=1;i<=5;i++) printf("Card %d : %5s of %-8s\n", i,
wFace[checkColumn[i]], wSuit[checkRow[i]]);
//flush

if(checkRow[1]==checkRow[2]&&checkRow[1]==checkRow[3]&&
checkRow[1]==checkRow[4]&&checkRow[1]==checkRow[5]&&
checkRow[2]==checkRow[3]&&checkRow[2]==checkRow[4]&&
checkRow[2]==checkRow[5]&&checkRow[3]==checkRow[4]&&
checkRow[3]==checkRow[5]&&checkRow[5]==checkRow[4]){
flush2++;
jFlush=checkColumn[5];
}
//straight
if(checkColumn[1]==0&&checkColumn[2]==1&&checkColumn[3]==2&&
checkColumn[4]==3&&checkColumn[5]==12){
straight2++;
jStraight=checkColumn[4];
}
else if(checkColumn[2]==checkColumn[1]+1&&
checkColumn[3]==checkColumn[1]+2&&checkColumn[4]==checkColumn[1]+3
&&checkColumn[5]==checkColumn[1]+4) {
straight2++;
jStraight=checkColumn[5];
}
if(straight2==0&&flush2==0){
//four
for (int rally=1;rally<3;rally++){
for(int count=1;count<4;count++){
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(checkColumn[rally]==checkColumn[count]&&
checkColumn[rally]==checkColumn[pass]&&
checkColumn[rally]==checkColumn[card]&&
checkColumn[count]==checkColumn[pass]&&
checkColumn[count]==checkColumn[card]&&
checkColumn[pass]==checkColumn[card]&&
rally!=count&&rally!=pass&&rally!=card&&
count!=pass&&count!=card&&pass!=card){
four2++;
jFour=checkColumn[rally];
break;
}
}
if(four2==1) break;
}
if(four2==1) break;
}
if(four2==1) break;
}
//three and pairs
if(four2==0){
for(int count=1;count<4;count++){
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(checkColumn[count]==checkColumn[pass]&&
checkColumn[count]==checkColumn[card]&&
checkColumn[pass]==checkColumn[card]&&
count!=pass&&count!=card&&pass!=card&&
checkColumn[count]!=15&&
checkColumn[pass]!=15&&
checkColumn[card]!=15){

three2++;
jThree=checkColumn[count];
checkColumn[count]=15;
checkColumn[pass]=15;
checkColumn[card]=15;
break;
}
}
if(three2==1) break;
}
if(three2==1) break;
}//end three
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(checkColumn[pass]==checkColumn[card]&&pass!=card
&&checkColumn[pass]!=15&&checkColumn[card]!=15){
pair2++;
jPair[pass]=checkColumn[pass];
checkColumn[pass]=15;
checkColumn[card]=15;
}
}
}//end pair
}//end four
}//end st and flush
//check leftover -> determine how many cards to be changed
if(four2>0||pair2==2){//left 1
for(int i=1;i<=5;i++){
if(checkColumn[i]<15) jLeftC[1]=checkColumn[i];
if(checkRow[i]<15) jLeftR[1]=checkRow[i];
}
}
else if(three2>0&&pair2==0){//left 2
for(int i=1;i<=5;i++){
if(checkColumn[i]<15) {
if(jLeftC[1]<15) jLeftC[2]=checkColumn[i];
else jLeftC[1]=checkColumn[i];
}
}
}
else if(pair2==1){//left 3
for(int i=1;i<=5;i++){
if(checkColumn[i]<15){
if(jLeftC[1]<15) {
if(jLeftC[2]<15) jLeftC[3]=checkColumn[i];
else jLeftC[2]=checkColumn[i];
}
else jLeftC[1]=checkColumn[i];
}
if(checkRow[i]<15){
if(jLeftR[1]<15) {
if(jLeftR[2]<15) jLeftR[3]=checkRow[i];
else jLeftR[2]=checkRow[i];
}
else jLeftR[1]=checkRow[i];
}

}
}
else if(four2==0&&three2==0&&pair2==0){//all 5
for(int i=1;i<=5;i++){
jLeftC[i]=checkColumn[i];
jLeftR[i]=checkRow[i];
}
}
//sort leftover
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(jLeftC[card]>jLeftC[card+1]){
temp=jLeftC[card];
jLeftC[card]=jLeftC[card+1];
jLeftC[card+1]=temp;
temp=jLeftR[card];
jLeftR[card]=jLeftR[card+1];
jLeftR[card+1]=temp;
}
}
}
}//end deal2
void deal1(const int wDeck[][13], const char *wFace[], const char *wSuit[]){
int card,row,column;
int checkRow[6],checkColumn[6];
int DcardC[6],DcardR[6];
//dealer's card
for(card=9;card<=13;card++){
for(row=0;row<=3;row++){
for(column=0;column<=12;column++){
if(wDeck[row][column]==card){
checkRow[card-8]=row;
checkColumn[card-8]=column;
}
}
}
}
int temp;
//sort hand
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(checkColumn[card]>checkColumn[card+1]){
temp=checkColumn[card];
checkColumn[card]=checkColumn[card+1];
checkColumn[card+1]=temp;
temp=checkRow[card];
checkRow[card]=checkRow[card+1];
checkRow[card+1]=temp;
}
}
}
//insert into variable -> to check if it is necessary to change card
for(int i=1;i<=5;i++){

DcardR[i]=checkRow[i];
DcardC[i]=checkColumn[i];
}
//four
for (int rally=1;rally<3;rally++){
for(int count=1;count<4;count++){
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(checkColumn[rally]==checkColumn[count]&&
checkColumn[rally]==checkColumn[pass]&&
checkColumn[rally]==checkColumn[card]&&
checkColumn[count]==checkColumn[pass]&&
checkColumn[count]==checkColumn[card]&&
checkColumn[pass]==checkColumn[card]&&
rally!=count&&rally!=pass&&rally!=card&&
count!=pass&&count!=card&&pass!=card){
four1++;
checkColumn[rally]=15; checkRow[rally]=15;
checkColumn[count]=15; checkRow[count]=15;
checkColumn[pass]=15; checkRow[pass]=15;
checkColumn[card]=15; checkRow[card]=15;
break;
}
}
if(four1==1) break;
}
if(four1==1) break;
}
if(four1==1) break;
}
//three and pairs
if(four1==0){
for(int count=1;count<4;count++){
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(checkColumn[count]==checkColumn[pass]&&
checkColumn[count]==checkColumn[card]&&
checkColumn[pass]==checkColumn[card]&&
count!=pass&&count!=card&&pass!=card&&
checkColumn[count]!=15&&checkColumn[pass]!=15
&&checkColumn[card]!=15){
three1++;
checkColumn[count]=15; checkRow[count]=15;
checkColumn[pass]=15; checkRow[pass]=15;
checkColumn[card]=15; checkRow[card]=15;
break;
}
}
if(three1==1) break;
}
if(three1==1) break;
}
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(checkColumn[pass]==checkColumn[card]&&pass!=card

&&checkColumn[pass]!=15&&checkColumn[card]!=15) {
pair1++;
checkColumn[pass]=15; checkRow[pass]=15;
checkColumn[card]=15; checkRow[card]=15;
}
}
}//end three and pair
}//end four
//cek Tcard -> what cards that not necessary to change
if(four1>0||pair1==2){//left 1
for(int i=1;i<=5;i++){
if(DcardC[i]!=checkColumn[i]&&DcardR[i]!=checkRow[i]){
TcardC[i]=DcardC[i];
TcardR[i]=DcardR[i];
}
}
}
else if(three1>0&&pair1==0){//left 2
for(int i=1;i<=5;i++){
if(DcardC[i]!=checkColumn[i]&&DcardR[i]!=checkRow[i]){
TcardC[i]=DcardC[i];
TcardR[i]=DcardR[i];
}
}
}
else if(pair1==1){//left 3
for(int i=1;i<=5;i++){
if(DcardC[i]!=checkColumn[i]&&DcardR[i]!=checkRow[i]){
TcardC[i]=DcardC[i];
TcardR[i]=DcardR[i];
}
}
}
else if(four1==0&&three1==0&&pair1==0){//all 5
for(int i=1;i<=5;i++){
TcardC[i]=DcardC[i];
TcardR[i]=DcardR[i];
}
}
//sort Tcard
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(TcardC[card]>TcardC[card+1]){
temp=TcardC[card];
TcardC[card]=TcardC[card+1];
TcardC[card+1]=temp;
temp=TcardR[card];
TcardR[card]=TcardR[card+1];
TcardR[card+1]=temp;
}
}
}
}//end deal1
void dealf1(const int wDeck[][13], const char *wFace[], const char *wSuit[]){

int card,row,column;
int add1=13;
if(four1==1||pair1==2) add1=14;
else if(three1==1&&pair1==0)add1=15;
else if(pair1==1||(four1==0&&three1==0&&pair1==0)) add1=16;
//deal dealer's hand that needed to be changed
for(card=14;card<=add1;card++){
for(row=0;row<=3;row++){
for(column=0;column<=12;column++){
if(wDeck[row][column]==card){
TcardR[card-13]=row;
TcardC[card-13]=column;
}
}
}
}
//sort hand 2 -> after changed
int temp;
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(TcardC[card]>TcardC[card+1]){
temp=TcardC[card];
TcardC[card]=TcardC[card+1];
TcardC[card+1]=temp;
temp=TcardR[card];
TcardR[card]=TcardR[card+1];
TcardR[card+1]=temp;
}
}
}
//show dealer's hand
for(int i=1;i<=5;i++) printf("Card %d : %5s of %-8s\n", i,
wFace[TcardC[i]], wSuit[TcardR[i]]);
//flush
if(TcardR[1]==TcardR[2]&&TcardR[1]==TcardR[3]&&
TcardR[1]==TcardR[4]&&TcardR[1]==TcardR[5]&&
TcardR[2]==TcardR[3]&&TcardR[2]==TcardR[4]&&
TcardR[2]==TcardR[5]&&TcardR[3]==TcardR[4]&&
TcardR[3]==TcardR[5]&&TcardR[5]==TcardR[4]){
flushf++;
iFlush=TcardC[5];
}
//straight
if(TcardC[1]==0&&TcardC[2]==1&&TcardC[3]==2&&TcardC[4]==3&&TcardC[5]==12){
straightf++;
iStraight=TcardC[4];
}
else if(TcardC[2]==TcardC[1]+1&&TcardC[3]==TcardC[1]+2&&
TcardC[4]==TcardC[1]+3&&TcardC[5]==TcardC[1]+4) {
straightf++;
iStraight=TcardC[5];
}
if(flushf==0&&straightf==0){
//four
for (int rally=1;rally<3;rally++){

for(int count=1;count<4;count++){
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(TcardC[rally]==TcardC[count]&&
TcardC[rally]==TcardC[pass]&&
TcardC[rally]==TcardC[card]&&
TcardC[count]==TcardC[pass]&&
TcardC[count]==TcardC[card]&&
TcardC[pass]==TcardC[card]&&
rally!=count&&rally!=pass&&rally!=card&&
count!=pass&&count!=card&&pass!=card){
fourf++;
iFour=TcardC[rally];
TcardC[rally]=15; TcardR[rally]=15;
TcardC[count]=15; TcardR[count]=15;
TcardC[pass]=15; TcardR[pass]=15;
TcardC[card]=15; TcardR[card]=15;
break;
}
}
if(fourf==1) break;
}
if(fourf==1) break;
}
if(fourf==1) break;
}
//three and pairs
if(fourf==0){
for(int count=1;count<4;count++){
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(TcardC[count]==TcardC[pass]&&
TcardC[count]==TcardC[card]&&
TcardC[pass]==TcardC[card]&&
count!=pass&&count!=card&&pass!=card&&
TcardC[count]!=15&&TcardC[pass]!=15
&&TcardC[card]!=15){
threef++;
iThree=TcardC[count];
TcardC[count]=15; TcardR[count]=15;
TcardC[pass]=15; TcardR[pass]=15;
TcardC[card]=15; TcardR[card]=15;
break;
}
}
if(threef==1) break;
}
if(threef==1) break;
}
for(int pass=1;pass<5;pass++){
for(card=1;card<=5;card++){
if(TcardC[pass]==TcardC[card]&&pass!=card&&
TcardC[pass]!=15&&TcardC[card]!=15) {
pairf++;
fPair[pass]=TcardC[pass];
TcardC[pass]=15; TcardR[pass]=15;

10

TcardC[card]=15; TcardR[card]=15;
}
}
}
}
}
//check leftover -> determine how many cards to be changed
if(four1>0||pair1==2){//left 1
for(int i=1;i<=5;i++){
if(TcardC[i]<15) iLeftC[1]=TcardC[i];
if(TcardR[i]<15) iLeftR[1]=TcardR[i];
}
}
else if(three1>0&&pair1==0){//left 2
for(int i=1;i<=5;i++){
if(TcardC[i]<15) {
if(iLeftC[1]<15) iLeftC[2]=TcardC[i];
else iLeftC[1]=TcardC[i];
}
if(TcardR[i]<15) {
if(iLeftR[1]<15) iLeftR[2]=TcardR[i];
else iLeftR[1]=TcardR[i];
}
}
}
else if(pair1==1){//left 3
for(int i=1;i<=5;i++){
if(TcardC[i]<15){
if(iLeftC[1]<15) {
if(iLeftC[2]<15) iLeftC[3]=TcardC[i];
else iLeftC[2]=TcardC[i];
}
else iLeftC[1]=TcardC[i];
}
if(TcardR[i]<15){
if(iLeftR[1]<15) {
if(iLeftR[2]<15) iLeftR[3]=TcardR[i];
else iLeftR[2]=TcardR[i];
}
else iLeftR[1]=TcardR[i];
}
}
}
else if(four1==0&&three1==0&&pair1==0){//all 5
for(int i=1;i<=5;i++){
iLeftC[i]=TcardC[i];
iLeftR[i]=TcardR[i];
}
}
//sort leftover
for (int pass=1;pass<5;pass++){
for(card=1;card<5;card++){
if(iLeftC[card]>iLeftC[card+1]){
temp=iLeftC[card];
iLeftC[card]=iLeftC[card+1];
iLeftC[card+1]=temp;

11

temp=iLeftR[card];
iLeftR[card]=iLeftR[card+1];
iLeftR[card+1]=temp;
}
}
}
}//end dealf
int main (void) {
const char *suit[4] = {"Diamond","Hearts","Clubs","Spades"};
const char *face[13]= {"Deuce","Three","Four",
"Five","Six","Seven","Eight",
"Nine","Ten","Jack","Queen","King","Ace"};

int deck[4][13]={0};
srand(time(0));
shuffle(deck);
deal2(deck,face,suit); //player
deal1(deck,face,suit); //dealer
printf("\n\nDealer's Hand\n");
dealf1(deck,face,suit);//dealer after change
printf("\n\n");
int iiPair[2]={15,15},jjPair[2]={15,15};
for(int i=1;i<6;i++){
if(fPair[i]<15){
if(iiPair[0]==15) iiPair[0]=fPair[i];
else iiPair[1]=fPair[i];
}
if(jPair[i]<15){
if(jPair[0]==15) jjPair[0]=jPair[i];
else jjPair[1]=jPair[i];
}
}
int temp;
if(iiPair[1]<15){
if(iiPair[0]>iiPair[1]){
temp=iiPair[0];
iiPair[0]=iiPair[1];
iiPair[1]=temp;
}
}
if(jjPair[1]<15){
if(jjPair[0]>jjPair[1]){
temp=jjPair[0];
jjPair[0]=jjPair[1];
jjPair[1]=temp;
}
}
//cek st flush
if((straightf==1&&flushf==1)&&(straight2==1&&flush2==1)){

12

if(iStraight>jStraight) printf("Dealer win ~");


else if(iStraight<jStraight) printf("You win ~");
else printf("Draw ~");
}
else if((straightf==1&&flushf==1)&&((straight2==1&&flush2==0)||
(straight2==0&&flush2==1)||(straight2==0&&flush2==0)))
printf("Dealer win ~");
else if((straight2==1&&flush2==1)&&((straightf==1&&flushf==0)||
(straightf==0&&flushf==1)||(straightf==0&&flushf==0)))
printf("You win ~");
else{
//cek four
if(fourf==1&&four2==1){
if(iFour>jFour) printf("Dealer win ~");
else if(iFour<jFour) printf("You win ~");
else printf("Draw ~");
}
else if(fourf==1&&four2==0) printf("Dealer win ~");
else if(fourf==0&&four2==1) printf("You win ~");
else if(fourf==0&&four2==0){
//cek full house
if((threef==1&&pairf==1)&&(three2==1&&pair2==1)){
if(iThree>jThree) printf("Dealer win ~");
else if(iThree<jThree) printf("You win ~");
else if(iiPair[0]>jjPair[0]) printf("Dealer win ~");
else if(iiPair[0]<jjPair[0]) printf("You win ~");
else printf("Draw ~");
}
else if((threef==1&&pairf==1)&&((three2==1&&pair2==0)||
(three2==0&&pair2==1)||(three2==0&&pair2==0)||
pair2==2)) printf("Dealer win ~");
else if((three2==1&&pair2==1)&&((threef==1&&pairf==0)||
(threef==0&&pairf==1)||(threef==0&&pairf==0)||
pairf==2)) printf("You win ~");
else {
//cek flush
if(flushf==1&&flush2==1) {
if(iFlush>jFlush) printf("Dealer win ~");
else if(iFlush<jFlush) printf("You win ~");
else printf("Draw ~");
}
else if(flushf==1&&flush2==0) printf("Dealer win ~");
else if(flushf==0&&flush2==1) printf("You win ~");
else if(flushf==0&&flush2==0){
//cek straight
if(straightf==1&&straight2==1) {
if(iStraight>jStraight) printf("Dealer win ~");
else if(iStraight<jStraight) printf("You win ~");
else printf("Draw ~");
}
else if(straightf==1&&straight2==0) printf("Dealer win
~");
else if(straightf==0&&straight2==1) printf("You win ~");
else if(straightf==0&&straight2==0){
//cek 3
if(threef==1&&three2==1){
if(iThree>jThree) printf("Dealer win ~");

13

else if(iThree<jThree) printf("You win


~");
else printf("Draw ~");
}
else if(threef==1&&three2==0) printf("Dealer win
~");
else if(threef==0&&three2==1) printf("You win
~");
else if(threef==0&&three2==0){
//cek double pair
if(pairf==2&&pair2==2){
if(iiPair[0]>jjPair[0])
printf("Dealer win ~");
else if(iiPair[0]<jjPair[0])
printf("You win ~");
else {
if(iiPair[1]>jjPair[1])
printf("Dealer win ~");
else if(iiPair[1]<jjPair[1])
printf("You win ~");
else {
if
(iLeftC[5]>jLeftC[5])
printf("Dealer win
~");
else if
(iLeftC[5]<jLeftC[5])
printf("You win ~");
else printf("Draw
~");
}
}
}
else if ((pairf==2&&pair2==1)||
(pairf==2&&pair2==0))
printf("Dealer win ~");
else if ((pairf==1&&pair2==2)||
(pairf==0&&pair2==2))
printf("You win ~");
//cek single pair
else if(pairf==1&&pair2==1){
if(iiPair[0]>jjPair[0])
printf("Dealer win ~");
else if(iiPair[0]<jjPair[0])
printf("You win ~");
else {
int win=0;
for(int i=3;i<=5;i++){
if(iLeftC[i]>jLeftC[i]){
printf("Dealer win
~");
win=1;
break;
}
else if
(iLeftC[i]<jLeftC[i]){
printf("You win ~");
win=1;

14

break;
}
}
if(win==0) printf("Draw ~");
}
}
else if(pairf==1&&pair2==0) printf("Dealer
win ~");
else if(pairf==0&&pair2==1) printf("You
win ~");
else {
int win=0;
for(int i=1;i<=5;i++){
if(iLeftC[i]>jLeftC[i]){
printf("Dealer win
~");
win=1;
break;
}
else if
(iLeftC[i]<jLeftC[i]){
printf("You win ~");
win=1;
break;
}
}
if(win==0) printf("Draw ~");
}/*should've checked all 5 card*/
}//end if three
}//end if straight
}//end if flush
}//end if full house
}//end if four
}//end st.flush
system("pause");
return 0;
}

15

Vous aimerez peut-être aussi