home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
001-099
/
ff019.lzh
/
BlackJack
/
hndmgr.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-04-08
|
3KB
|
153 lines
/* HNDMGR.C Hand manager
*/
#include "local.h"
#include "bj.h"
#include "hndmgr.h"
#include "dekmgr.h"
static char spots[13][3] =
{"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
static char suits[4][2] = {"S", "H", "D", "C"};
static short hands[3][12] = {0,0,0}; /* three hands */
static short ncards[3] = {0,0,0}; /* how many cards in each hand */
static short tophand = 0; /* how many player hands active */
/* allbst - are all player's hands busted?
*/
bool allbst()
{
short score();
if (score(1) <= 21 || (tophand == 2 && score(2) <= 21))
return(NO);
else
return(YES);
}
/* deal - initialize the hands
*/
void deal()
{
short tkcard();
void show();
hands[1][0] = tkcard();
hands[DEALER][0] = tkcard();
hands[1][1] = tkcard();
hands[DEALER][1] = tkcard();
ncards[DEALER] = ncards[1] = 2;
tophand = 1;
printf("The dealer shows ");
show(DEALER, 0);
printf("\nYou have ");
show(1,0);
printf(" + ");
show(1, 1);
printf("\n");
}
/* hit - add a card to a hand
*/
bool hit(h)
short h; /* which hand */
{
short score(), tkcard();
void show();
hands[h][ncards[h]] = tkcard();
printf(" + ");
show(h, ncards[h]);
++ncards[h];
if (21 < score(h) || h == DEALER && 17 <= score(h))
return(NO);
else
return(YES);
}
/* ISBJ - is hand a "natural" 2-card blackjack?
*/
bool isbj(h)
short h; /* which hand */
{
short score();
if (h == DEALER)
return (ncards[DEALER] == 2 && score(DEALER) == 21);
else if (h == 1)
return (tophand == 1 && ncards[1] == 2 && score(1) == 21);
else
return (NO);
}
/* score - tell blackjack value of hand
*/
short score(h)
short h; /* which hand */
{
short val();
short aces = 0; /* number of aces in hand */
short i; /* card counter */
short sum = 0; /* accumulated value of hand */
for (i = 0; i < ncards[h]; ++i) {
sum += val(h, i);
if (val(h, i) == 11)
++aces;
}
for (i = aces; 0 < i; --i)
if (21 < sum)
sum -= 10;
return(sum);
}
/* show - print a card
*/
void show(h, i)
short h; /* which hand */
short i; /* which card */
{
printf("%s", spots[hands[h][i] % 13]);
printf("%s", suits[hands[h][i] / 13]);
}
/* split - split the player's pair if allowed
*/
short split()
{
void show();
short tkcard(), val();
if (val(1, 0) != val(1, 1))
return(1);
hands[2][0] = hands[1][1];
hands[1][1] = tkcard();
hands[2][1] = tkcard();
ncards[2] = 2;
printf("Hand 1: "); show(1, 0); printf(" + "); show(1, 1);
printf("\n");
printf("Hand 2: "); show(2, 0); printf(" + "); show(2, 1);
printf("\n");
tophand = 2;
return(2);
}
/* val - tell value of card n of hand h
*/
short val(h, i)
short h; /* which hand */
short i; /* which card */
{
short n; /* spots value of card */
n = (hands[h][i] % 13) + 1;
if (n > 9)
return (10);
else if (n == 1)
return (11);
else
return (n);
}