adrianmak
asked on
black jack
how to write a text mode black jack programe using standard C ?
http://www.ioccc.org/1990/cmills.c
All can offer:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
const Size_Array = 52; //Amount of cards!
const char *Card_Name[] =
{
"Ace",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Jack",
"Queen",
"King"
}; //Const used for displaying card by name!
const char *Suite_Name[] =
{
"Hearts",
"Spades",
"Diamonds",
"Spades"
};
int Deck[Size_Array];
char Suite[Size_Array];
//Deck is global!
void swap(int &n1, int &n2)
{
int temp;
temp = n1;
n1 = n2;
n2 = temp;
}
void Shuffle_Array(int *array)
{
int ctr;
int n1,n2;
//Swaps random cards around 1000 times!
//Shuffle :)
for (ctr=0;ctr<1000;ctr++)
{
n1 = rand()%Size_Array;
n2 = rand()%Size_Array;
swap(array[n1],array[n2]);
}
}
void New_Game(void)
{
int ctr;
for (ctr=0;ctr<Size_Array;ctr+ +)
{
Deck[ctr]=ctr/4; //cards 0-12
Suite[ctr]=ctr%4; //suites 0-3
}
Shuffle_Array(Deck); //Shuffle deck.
}
void Show_Computer(char *hand, char many)
{
int ctr;
gotoxy(1,1);
//Goto first box on screen for printing!
cout << "Computer has one you can't see and:" << endl;
for (ctr=1;ctr<many;ctr++) //Start at 1 to miss first card!
cout << Card_Name[Deck[hand[ctr]]] << " of " << Suite_Name[Suite[hand[ctr] ]] << endl;
}
void Show_Computer2(char *hand, char many, int total)
{
int ctr;
gotoxy(1,1);
cout << "Computer has:" << endl;
for (ctr=0;ctr<many;ctr++)
cout << Card_Name[Deck[hand[ctr]]] << " of " << Suite_Name[Suite[hand[ctr] ]] << endl;
cout << endl << "Total " << total << endl;
}
void Show_Player(char *hand, char many, int total)
{
int ctr;
cout << "\n\n\n\n\n"; //\n = endl
cout << "You have:" << endl;
for (ctr=0;ctr<many;ctr++)
cout << Card_Name[Deck[hand[ctr]]] << " of " << Suite_Name[Suite[hand[ctr] ]] << endl;
cout << endl << "Total " << total << endl;
}
void Comp_Won(void)
{
cout << "Computer wins!";
}
void Play_Won(void)
{
cout << "You won!";
}
void Nobody_Won(void)
{
cout << "Bust!";
}
int Get_Total(char *hand, char many)
{
int ctr;
int total=0;
int aces=0;
int temp;
for (ctr=0;ctr<many;ctr++)
{
temp = Deck[hand[ctr]]+1;
if (temp>10) temp=10; //Check for jack+... all =10
total+=temp;
if (Deck[hand[ctr]]==0)
{
aces++;
total+=10;
}
}
while (total>21 && aces>0)
{
total-=10;
aces--;
}
return total;
}
int main (void)
{
char P_Cards[7],C_Cards[7]; //Can't get more than 7 cards without busting!
int P_Amount, C_Amount;
int P_Total;
int C_Total;
int Loc_In_Deck;
char done=0;
char key;
srand ( time(NULL));
while (!done)
{
New_Game();
//Initialize cards again.
P_Cards[0]=0;
C_Cards[0]=1;
P_Cards[1]=2;
C_Cards[1]=3;
//Deal first four cards out.
P_Amount=2;
C_Amount=2;
//Player and computer have 2 cards each so far
Loc_In_Deck = 4; //4 cards dealt already!
clrscr(); //Clear the screen for displaying
//Get totals
C_Total = Get_Total(C_Cards,C_Amount );
P_Total = Get_Total(P_Cards,P_Amount );
Show_Computer(C_Cards,C_Am ount);
Show_Player(P_Cards,P_Amou nt, P_Total);
if (C_Total!=21 && P_Total!=21)
{
while (P_Total<21)
{
cout << "\n\n\n(H)it or (S)tay?";
key = getch();
if (key=='h' || key=='H')
{
P_Cards[P_Amount]=Loc_In_D eck;
P_Amount++;
Loc_In_Deck++;
}
else
break;
//Get totals
C_Total = Get_Total(C_Cards,C_Amount );
P_Total = Get_Total(P_Cards,P_Amount );
clrscr();
Show_Computer(C_Cards,C_Am ount);
Show_Player(P_Cards,P_Amou nt, P_Total);
}
while (C_Total<16 && P_Total<22)
{
C_Cards[C_Amount]=Loc_In_D eck;
C_Amount++;
Loc_In_Deck++;
//Get totals
C_Total = Get_Total(C_Cards,C_Amount );
P_Total = Get_Total(P_Cards,P_Amount );
clrscr();
Show_Computer2(C_Cards,C_A mount,C_To tal);
Show_Player(P_Cards,P_Amou nt, P_Total);
cout << "\n\n\nComputer hits";
getch();
}
}
else
{
if (C_Total == 21 && P_Total<21) //Make sure not a tie
cout << "Computer has Black Jack!";
else if (C_Total == 21) //If C_total was 21 and P_Total was =21
cout << "You both got Black Jack!";
else
cout << "You got Black Jack!";
}
clrscr();
Show_Computer2(C_Cards,C_A mount,C_To tal);
Show_Player(P_Cards,P_Amou nt, P_Total);
cout << "\n\n\n\n";
if (P_Total<22)
if (P_Total>C_Total)
Play_Won();
else if (C_Total<22)
Comp_Won();
else
Play_Won();
else
Comp_Won();
cout << " Play again?";
key=getch();
if (key=='n' || key=='N') done=1;
}
return 0;
}
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
const Size_Array = 52; //Amount of cards!
const char *Card_Name[] =
{
"Ace",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Jack",
"Queen",
"King"
}; //Const used for displaying card by name!
const char *Suite_Name[] =
{
"Hearts",
"Spades",
"Diamonds",
"Spades"
};
int Deck[Size_Array];
char Suite[Size_Array];
//Deck is global!
void swap(int &n1, int &n2)
{
int temp;
temp = n1;
n1 = n2;
n2 = temp;
}
void Shuffle_Array(int *array)
{
int ctr;
int n1,n2;
//Swaps random cards around 1000 times!
//Shuffle :)
for (ctr=0;ctr<1000;ctr++)
{
n1 = rand()%Size_Array;
n2 = rand()%Size_Array;
swap(array[n1],array[n2]);
}
}
void New_Game(void)
{
int ctr;
for (ctr=0;ctr<Size_Array;ctr+
{
Deck[ctr]=ctr/4; //cards 0-12
Suite[ctr]=ctr%4; //suites 0-3
}
Shuffle_Array(Deck); //Shuffle deck.
}
void Show_Computer(char *hand, char many)
{
int ctr;
gotoxy(1,1);
//Goto first box on screen for printing!
cout << "Computer has one you can't see and:" << endl;
for (ctr=1;ctr<many;ctr++) //Start at 1 to miss first card!
cout << Card_Name[Deck[hand[ctr]]]
}
void Show_Computer2(char *hand, char many, int total)
{
int ctr;
gotoxy(1,1);
cout << "Computer has:" << endl;
for (ctr=0;ctr<many;ctr++)
cout << Card_Name[Deck[hand[ctr]]]
cout << endl << "Total " << total << endl;
}
void Show_Player(char *hand, char many, int total)
{
int ctr;
cout << "\n\n\n\n\n"; //\n = endl
cout << "You have:" << endl;
for (ctr=0;ctr<many;ctr++)
cout << Card_Name[Deck[hand[ctr]]]
cout << endl << "Total " << total << endl;
}
void Comp_Won(void)
{
cout << "Computer wins!";
}
void Play_Won(void)
{
cout << "You won!";
}
void Nobody_Won(void)
{
cout << "Bust!";
}
int Get_Total(char *hand, char many)
{
int ctr;
int total=0;
int aces=0;
int temp;
for (ctr=0;ctr<many;ctr++)
{
temp = Deck[hand[ctr]]+1;
if (temp>10) temp=10; //Check for jack+... all =10
total+=temp;
if (Deck[hand[ctr]]==0)
{
aces++;
total+=10;
}
}
while (total>21 && aces>0)
{
total-=10;
aces--;
}
return total;
}
int main (void)
{
char P_Cards[7],C_Cards[7]; //Can't get more than 7 cards without busting!
int P_Amount, C_Amount;
int P_Total;
int C_Total;
int Loc_In_Deck;
char done=0;
char key;
srand ( time(NULL));
while (!done)
{
New_Game();
//Initialize cards again.
P_Cards[0]=0;
C_Cards[0]=1;
P_Cards[1]=2;
C_Cards[1]=3;
//Deal first four cards out.
P_Amount=2;
C_Amount=2;
//Player and computer have 2 cards each so far
Loc_In_Deck = 4; //4 cards dealt already!
clrscr(); //Clear the screen for displaying
//Get totals
C_Total = Get_Total(C_Cards,C_Amount
P_Total = Get_Total(P_Cards,P_Amount
Show_Computer(C_Cards,C_Am
Show_Player(P_Cards,P_Amou
if (C_Total!=21 && P_Total!=21)
{
while (P_Total<21)
{
cout << "\n\n\n(H)it or (S)tay?";
key = getch();
if (key=='h' || key=='H')
{
P_Cards[P_Amount]=Loc_In_D
P_Amount++;
Loc_In_Deck++;
}
else
break;
//Get totals
C_Total = Get_Total(C_Cards,C_Amount
P_Total = Get_Total(P_Cards,P_Amount
clrscr();
Show_Computer(C_Cards,C_Am
Show_Player(P_Cards,P_Amou
}
while (C_Total<16 && P_Total<22)
{
C_Cards[C_Amount]=Loc_In_D
C_Amount++;
Loc_In_Deck++;
//Get totals
C_Total = Get_Total(C_Cards,C_Amount
P_Total = Get_Total(P_Cards,P_Amount
clrscr();
Show_Computer2(C_Cards,C_A
Show_Player(P_Cards,P_Amou
cout << "\n\n\nComputer hits";
getch();
}
}
else
{
if (C_Total == 21 && P_Total<21) //Make sure not a tie
cout << "Computer has Black Jack!";
else if (C_Total == 21) //If C_total was 21 and P_Total was =21
cout << "You both got Black Jack!";
else
cout << "You got Black Jack!";
}
clrscr();
Show_Computer2(C_Cards,C_A
Show_Player(P_Cards,P_Amou
cout << "\n\n\n\n";
if (P_Total<22)
if (P_Total>C_Total)
Play_Won();
else if (C_Total<22)
Comp_Won();
else
Play_Won();
else
Comp_Won();
cout << " Play again?";
key=getch();
if (key=='n' || key=='N') done=1;
}
return 0;
}
ASKER
Wvn,
Do you try before ?
Becuase there is a compliation error.
I am using Visual C++ 6.0
Do you try before ?
Becuase there is a compliation error.
I am using Visual C++ 6.0
o.
Sorry,just FYI,I find this code and paste here.I havent try it.
I'v withdrawed .
Sorry,just FYI,I find this code and paste here.I havent try it.
I'v withdrawed .
ASKER
wvn,
where did you find this code ? On the Internet ?
where did you find this code ? On the Internet ?
The code is c++, needs porting downwards to c. Alot of it is the // comment marker, but also some operations on arrays and cout
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
Needless to say you don't need the square at the end.
Aint the same ?
I fixed the code and ran it under Turbo C successfully. There were some errors.