1*7871Sarnold # include <curses.h> 2*7871Sarnold # include <signal.h> 3*7871Sarnold # include "deck.h" 4*7871Sarnold # include "cribbage.h" 5*7871Sarnold # include "cribcur.h" 67706Sarnold 77706Sarnold 8*7871Sarnold # define LOGFILE "/usr/games/lib/criblog" 9*7871Sarnold # define INSTRCMD "ul /usr/games/lib/crib.instr | more -f" 107706Sarnold 117706Sarnold 12*7871Sarnold main(argc, argv) 13*7871Sarnold int argc; 14*7871Sarnold char *argv[]; 157706Sarnold { 167706Sarnold register char *p; 177706Sarnold BOOLEAN playing; 187706Sarnold char *s; /* for reading arguments */ 197706Sarnold char bust; /* flag for arg reader */ 20*7871Sarnold FILE *f; 21*7871Sarnold FILE *fopen(); 22*7871Sarnold char *getline(); 23*7871Sarnold int bye(); 247706Sarnold 25*7871Sarnold while (--argc > 0) { 26*7871Sarnold if ((*++argv)[0] != '-') { 27*7871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 28*7871Sarnold exit(1); 297706Sarnold } 307706Sarnold bust = FALSE; 31*7871Sarnold for (s = argv[0] + 1; *s != NULL; s++) { 32*7871Sarnold switch (*s) { 33*7871Sarnold case 'e': 347706Sarnold explain = TRUE; 357706Sarnold break; 36*7871Sarnold case 'q': 377706Sarnold quiet = TRUE; 387706Sarnold break; 39*7871Sarnold case 'r': 407706Sarnold rflag = TRUE; 417706Sarnold break; 427706Sarnold default: 43*7871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 44*7871Sarnold exit(2); 457706Sarnold break; 467706Sarnold } 47*7871Sarnold if (bust) 48*7871Sarnold break; 497706Sarnold } 507706Sarnold } 51*7871Sarnold 52*7871Sarnold initscr(); 53*7871Sarnold signal(SIGINT, bye); 54*7871Sarnold crmode(); 55*7871Sarnold noecho(); 56*7871Sarnold Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); 57*7871Sarnold Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); 58*7871Sarnold Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); 59*7871Sarnold leaveok(Playwin, TRUE); 60*7871Sarnold leaveok(Tablewin, TRUE); 61*7871Sarnold leaveok(Compwin, TRUE); 62*7871Sarnold 63*7871Sarnold if (!quiet) { 64*7871Sarnold msg("Do you need instructions for cribbage? "); 65*7871Sarnold if (getuchar() == 'Y') { 66*7871Sarnold system(INSTRCMD); 67*7871Sarnold msg("For the rules of this program, do \"man cribbage\""); 687706Sarnold } 697706Sarnold } 707706Sarnold playing = TRUE; 71*7871Sarnold do { 72*7871Sarnold makeboard(); 73*7871Sarnold msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); 74*7871Sarnold glimit = (getuchar() == 'S' ? SGAME : LGAME); 757706Sarnold game(); 76*7871Sarnold msg("Another game? "); 77*7871Sarnold playing = (getuchar() == 'Y'); 78*7871Sarnold } while (playing); 79*7871Sarnold 80*7871Sarnold if ((f = fopen(LOGFILE, "a")) != NULL) { 81*7871Sarnold fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames); 82*7871Sarnold fclose(f); 837706Sarnold } 84*7871Sarnold 85*7871Sarnold bye(); 867706Sarnold } 877706Sarnold 88*7871Sarnold /* 89*7871Sarnold * bye: 90*7871Sarnold * Leave the program, cleaning things up as we go. 91*7871Sarnold */ 92*7871Sarnold bye() 93*7871Sarnold { 94*7871Sarnold signal(SIGINT, SIG_IGN); 95*7871Sarnold mvcur(0, COLS - 1, LINES - 1, 0); 96*7871Sarnold fflush(stdout); 97*7871Sarnold endwin(); 98*7871Sarnold putchar('\n'); 99*7871Sarnold exit(1); 100*7871Sarnold } 1017706Sarnold 102*7871Sarnold /* 103*7871Sarnold * makeboard: 104*7871Sarnold * Print out the initial board on the screen 105*7871Sarnold */ 106*7871Sarnold makeboard() 107*7871Sarnold { 108*7871Sarnold extern int Lastscore[]; 1097706Sarnold 110*7871Sarnold mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+"); 111*7871Sarnold mvaddstr(SCORE_Y + 1, SCORE_X, "| |"); 112*7871Sarnold mvaddstr(SCORE_Y + 2, SCORE_X, "| .....:.....:.....:.....:.....:..... |"); 113*7871Sarnold mvaddstr(SCORE_Y + 3, SCORE_X, "| .....:.....:.....:.....:.....:..... |"); 114*7871Sarnold mvaddstr(SCORE_Y + 4, SCORE_X, "| |"); 115*7871Sarnold mvaddstr(SCORE_Y + 5, SCORE_X, "| .....:.....:.....:.....:.....:..... |"); 116*7871Sarnold mvaddstr(SCORE_Y + 6, SCORE_X, "| .....:.....:.....:.....:.....:..... |"); 117*7871Sarnold mvaddstr(SCORE_Y + 7, SCORE_X, "| |"); 118*7871Sarnold mvaddstr(SCORE_Y + 8, SCORE_X, "+---------------------------------------+"); 119*7871Sarnold Lastscore[0] = 0; 120*7871Sarnold Lastscore[1] = 0; 121*7871Sarnold } 122*7871Sarnold 1237706Sarnold /* 124*7871Sarnold * game: 125*7871Sarnold * Play one game up to glimit points 1267706Sarnold */ 1277706Sarnold game() 1287706Sarnold { 129*7871Sarnold register int i, j; 1307706Sarnold BOOLEAN flag; 1317706Sarnold BOOLEAN compcrib; 1327706Sarnold 133*7871Sarnold makedeck(deck); 134*7871Sarnold shuffle(deck); 135*7871Sarnold if (gamecount == 0) { 1367706Sarnold flag = TRUE; 137*7871Sarnold do { 138*7871Sarnold if (rflag) /* player cuts deck */ 139*7871Sarnold i = (rand() >> 4) % CARDS; /* random cut */ 140*7871Sarnold else { 141*7871Sarnold msg(quiet ? "Cut for crib? " : 142*7871Sarnold "Cut to see whose crib it is -- low card wins? "); 143*7871Sarnold i = number(0, CARDS - 1); 1447706Sarnold } 145*7871Sarnold do { /* comp cuts deck */ 146*7871Sarnold j = (rand() >> 4) % CARDS; 147*7871Sarnold } while (j == i); 148*7871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 149*7871Sarnold msgcard(deck[i], FALSE); 150*7871Sarnold endmsg(); 151*7871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 152*7871Sarnold msgcard(deck[j], FALSE); 153*7871Sarnold endmsg(); 154*7871Sarnold flag = (deck[i].rank == deck[j].rank); 155*7871Sarnold if (flag) { 156*7871Sarnold msg(quiet ? "We tied..." : 157*7871Sarnold "We tied and have to try again..."); 158*7871Sarnold shuffle(deck); 1597706Sarnold continue; 1607706Sarnold } 161*7871Sarnold else 162*7871Sarnold compcrib = (deck[i].rank > deck[j].rank); 163*7871Sarnold } while (flag); 1647706Sarnold } 165*7871Sarnold else { 166*7871Sarnold msg("Loser (%s) gets first crib.", (iwon ? "you" : "me")); 1677706Sarnold compcrib = !iwon; 1687706Sarnold } 169*7871Sarnold 1707706Sarnold pscore = cscore = 0; 1717706Sarnold flag = TRUE; 172*7871Sarnold do { 173*7871Sarnold shuffle(deck); 174*7871Sarnold flag = !playhand(compcrib); 1757706Sarnold compcrib = !compcrib; 176*7871Sarnold msg("You have %d points, I have %d.", pscore, cscore); 177*7871Sarnold } while (flag); 1787706Sarnold ++gamecount; 179*7871Sarnold if (cscore < pscore) { 180*7871Sarnold if (glimit - cscore > 60) { 181*7871Sarnold msg("YOU DOUBLE SKUNKED ME!"); 182*7871Sarnold pgames += 4; 1837706Sarnold } 184*7871Sarnold else if (glimit - cscore > 30) { 185*7871Sarnold msg("YOU SKUNKED ME!"); 186*7871Sarnold pgames += 2; 187*7871Sarnold } 188*7871Sarnold else { 189*7871Sarnold msg("YOU WON!"); 1907706Sarnold ++pgames; 1917706Sarnold } 1927706Sarnold iwon = FALSE; 1937706Sarnold } 194*7871Sarnold else { 195*7871Sarnold if (glimit - pscore > 60) { 196*7871Sarnold msg("I DOUBLE SKUNKED YOU!"); 197*7871Sarnold cgames += 4; 1987706Sarnold } 199*7871Sarnold else if (glimit - pscore > 30) { 200*7871Sarnold msg("I SKUNKED YOU!"); 201*7871Sarnold cgames += 2; 202*7871Sarnold } 203*7871Sarnold else { 204*7871Sarnold msg("I WON!"); 2057706Sarnold ++cgames; 2067706Sarnold } 2077706Sarnold iwon = TRUE; 2087706Sarnold } 209*7871Sarnold msg("I have won %d games, you have won %d", cgames, pgames); 2107706Sarnold } 2117706Sarnold 2127706Sarnold /* 213*7871Sarnold * playhand: 214*7871Sarnold * Do up one hand of the game 2157706Sarnold */ 216*7871Sarnold playhand(mycrib) 217*7871Sarnold BOOLEAN mycrib; 218*7871Sarnold { 219*7871Sarnold register int deckpos; 220*7871Sarnold extern char Msgbuf[]; 2217706Sarnold 222*7871Sarnold werase(Compwin); 223*7871Sarnold wrefresh(Compwin); 224*7871Sarnold move(CRIB_Y, 0); 225*7871Sarnold clrtobot(); 226*7871Sarnold mvaddstr(LINES - 1, 0, Msgbuf); 2277706Sarnold 2287706Sarnold knownum = 0; 229*7871Sarnold deckpos = deal(mycrib); 230*7871Sarnold sorthand(chand, FULLHAND); 231*7871Sarnold sorthand(phand, FULLHAND); 232*7871Sarnold makeknown(chand, FULLHAND); 233*7871Sarnold prhand(phand, FULLHAND, Playwin); 234*7871Sarnold discard(mycrib); 235*7871Sarnold if (cut(mycrib, deckpos)) 236*7871Sarnold return TRUE; 237*7871Sarnold if (peg(mycrib)) 238*7871Sarnold return TRUE; 239*7871Sarnold werase(Tablewin); 240*7871Sarnold wrefresh(Tablewin); 241*7871Sarnold if (score(mycrib)) 242*7871Sarnold return TRUE; 243*7871Sarnold return FALSE; 2447706Sarnold } 2457706Sarnold 2467706Sarnold 2477706Sarnold 2487706Sarnold /* 2497706Sarnold * deal cards to both players from deck 2507706Sarnold */ 2517706Sarnold 2527706Sarnold deal( mycrib ) 2537706Sarnold { 2547706Sarnold register int i, j; 2557706Sarnold 2567706Sarnold j = 0; 2577706Sarnold for( i = 0; i < FULLHAND; i++ ) { 2587706Sarnold if( mycrib ) { 2597706Sarnold phand[i] = deck[j++]; 2607706Sarnold chand[i] = deck[j++]; 2617706Sarnold } 2627706Sarnold else { 2637706Sarnold chand[i] = deck[j++]; 2647706Sarnold phand[i] = deck[j++]; 2657706Sarnold } 2667706Sarnold } 2677706Sarnold return( j ); 2687706Sarnold } 2697706Sarnold 2707706Sarnold /* 271*7871Sarnold * discard: 272*7871Sarnold * Handle players discarding into the crib... 273*7871Sarnold * Note: we call cdiscard() after prining first message so player doesn't wait 2747706Sarnold */ 275*7871Sarnold discard(mycrib) 276*7871Sarnold BOOLEAN mycrib; 2777706Sarnold { 278*7871Sarnold register char *prompt; 279*7871Sarnold CARD crd; 2807706Sarnold 281*7871Sarnold msg("It's %s crib...", (mycrib ? "my" : "your")); 282*7871Sarnold prompt = (quiet ? "Discard --> " : "Discard a card --> "); 283*7871Sarnold msg(prompt); 284*7871Sarnold cdiscard(mycrib); /* puts best discard at end */ 285*7871Sarnold crd = phand[infrom(phand, FULLHAND, prompt)]; 286*7871Sarnold remove(crd, phand, FULLHAND); 287*7871Sarnold prhand(phand, FULLHAND, Playwin); 2887706Sarnold crib[0] = crd; 289*7871Sarnold /* next four lines same as last four except for cdiscard() */ 290*7871Sarnold msg(prompt); 291*7871Sarnold crd = phand[infrom(phand, FULLHAND - 1, prompt)]; 292*7871Sarnold remove(crd, phand, FULLHAND - 1); 293*7871Sarnold prhand(phand, FULLHAND, Playwin); 2947706Sarnold crib[1] = crd; 2957706Sarnold crib[2] = chand[4]; 2967706Sarnold crib[3] = chand[5]; 297*7871Sarnold chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; 2987706Sarnold } 2997706Sarnold 3007706Sarnold /* 301*7871Sarnold * cut: 302*7871Sarnold * Cut the deck and set turnover 3037706Sarnold */ 304*7871Sarnold cut(mycrib, pos) 305*7871Sarnold BOOLEAN mycrib; 306*7871Sarnold int pos; 3077706Sarnold { 308*7871Sarnold register int i, cardx; 3097706Sarnold BOOLEAN win = FALSE; 3107706Sarnold 311*7871Sarnold if (mycrib) { 312*7871Sarnold if (rflag) /* random cut */ 313*7871Sarnold i = (rand() >> 4) % (CARDS - pos); 314*7871Sarnold else { 315*7871Sarnold msg(quiet ? "Cut the deck? " : 316*7871Sarnold "How many cards down do you wish to cut the deck? "); 317*7871Sarnold i = number(0, CARDS - pos - 1); 3187706Sarnold } 3197706Sarnold turnover = deck[i + pos]; 320*7871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 321*7871Sarnold msgcard(turnover, FALSE); 322*7871Sarnold endmsg(); 323*7871Sarnold if (turnover.rank == JACK) { 324*7871Sarnold msg("I get two for his heels."); 325*7871Sarnold win = chkscr(&cscore,2 ); 3267706Sarnold } 327*7871Sarnold cardx = CRIB_X; 3287706Sarnold } 329*7871Sarnold else { 330*7871Sarnold i = (rand() >> 4) % (CARDS - pos) + pos; 3317706Sarnold turnover = deck[i]; 332*7871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 333*7871Sarnold msgcard(turnover, FALSE); 334*7871Sarnold endmsg(); 335*7871Sarnold if (turnover.rank == JACK) { 336*7871Sarnold msg("You get two for his heels."); 337*7871Sarnold win = chkscr(&pscore, 2); 3387706Sarnold } 339*7871Sarnold cardx = 0; 3407706Sarnold } 341*7871Sarnold makeknown(&turnover, 1); 342*7871Sarnold mvaddstr(CRIB_Y, cardx + 1, "CRIB"); 343*7871Sarnold prcard(stdscr, CRIB_Y + 1, cardx, turnover); 344*7871Sarnold return win; 3457706Sarnold } 3467706Sarnold 3477706Sarnold /* 348*7871Sarnold * peg: 349*7871Sarnold * Handle all the pegging... 3507706Sarnold */ 3517706Sarnold 352*7871Sarnold static CARD Table[14]; 3537706Sarnold 354*7871Sarnold static int Tcnt; 355*7871Sarnold 356*7871Sarnold peg(mycrib) 357*7871Sarnold BOOLEAN mycrib; 3587706Sarnold { 359*7871Sarnold static CARD ch[CINHAND], ph[CINHAND]; 3607706Sarnold CARD crd; 361*7871Sarnold register int i, j, k; 3627706Sarnold int l; 363*7871Sarnold int cnum, pnum, sum; 3647706Sarnold BOOLEAN myturn, mego, ugo, last, played; 3657706Sarnold 3667706Sarnold cnum = pnum = CINHAND; 367*7871Sarnold for (i = 0; i < CINHAND; i++) { /* make copies of hands */ 3687706Sarnold ch[i] = chand[i]; 3697706Sarnold ph[i] = phand[i]; 3707706Sarnold } 371*7871Sarnold Tcnt = 0; /* index to table of cards played */ 3727706Sarnold sum = 0; /* sum of cards played */ 3737706Sarnold mego = ugo = FALSE; 3747706Sarnold myturn = !mycrib; 375*7871Sarnold for (;;) { 3767706Sarnold last = TRUE; /* enable last flag */ 377*7871Sarnold prtable(sum); 378*7871Sarnold prhand(ph, pnum, Playwin); 379*7871Sarnold if (myturn) { /* my tyrn to play */ 380*7871Sarnold if (!anymove(ch, cnum, sum)) { /* if no card to play */ 381*7871Sarnold if (!mego && cnum) { /* go for comp? */ 382*7871Sarnold msg("GO."); 3837706Sarnold mego = TRUE; 3847706Sarnold } 385*7871Sarnold if (anymove(ph, pnum, sum)) /* can player move? */ 3867706Sarnold myturn = !myturn; 387*7871Sarnold else { /* give him his point */ 388*7871Sarnold msg(quiet ? "You get one." : "You get one point."); 389*7871Sarnold if (chkscr(&pscore, 1)) 390*7871Sarnold return TRUE; 3917706Sarnold sum = 0; 3927706Sarnold mego = ugo = FALSE; 393*7871Sarnold Tcnt = 0; 394*7871Sarnold Hasread = FALSE; 3957706Sarnold } 3967706Sarnold } 397*7871Sarnold else { 3987706Sarnold played = TRUE; 3997706Sarnold j = -1; 4007706Sarnold k = 0; 401*7871Sarnold for (i = 0; i < cnum; i++) { /* maximize score */ 402*7871Sarnold l = pegscore(ch[i], Table, Tcnt, sum); 403*7871Sarnold if (l > k) { 4047706Sarnold k = l; 4057706Sarnold j = i; 4067706Sarnold } 4077706Sarnold } 408*7871Sarnold if (j < 0) /* if nothing scores */ 409*7871Sarnold j = cchose(ch, cnum, sum); 4107706Sarnold crd = ch[j]; 411*7871Sarnold remove(crd, ch, cnum--); 412*7871Sarnold sum += VAL(crd.rank); 413*7871Sarnold Table[Tcnt++] = crd; 414*7871Sarnold if (k > 0) { 415*7871Sarnold addmsg(quiet ? "I get %d playing " : "I get %d points playing ", k); 416*7871Sarnold msgcard(crd, FALSE); 417*7871Sarnold endmsg(); 418*7871Sarnold if (chkscr(&cscore, k)) 419*7871Sarnold return TRUE; 4207706Sarnold } 4217706Sarnold myturn = !myturn; 4227706Sarnold } 4237706Sarnold } 424*7871Sarnold else { 425*7871Sarnold if (!anymove(ph, pnum, sum)) { /* can player move? */ 426*7871Sarnold if (!ugo && pnum) { /* go for player */ 427*7871Sarnold msg("You have a GO."); 4287706Sarnold ugo = TRUE; 4297706Sarnold } 430*7871Sarnold if (anymove(ch, cnum, sum)) /* can computer play? */ 4317706Sarnold myturn = !myturn; 432*7871Sarnold else { 433*7871Sarnold msg(quiet ? "I get one." : "I get one point."); 434*7871Sarnold if (chkscr(&cscore, 1)) 435*7871Sarnold return TRUE; 4367706Sarnold sum = 0; 4377706Sarnold mego = ugo = FALSE; 438*7871Sarnold Tcnt = 0; 439*7871Sarnold Hasread = FALSE; 4407706Sarnold } 4417706Sarnold } 442*7871Sarnold else { /* player plays */ 4437706Sarnold played = FALSE; 444*7871Sarnold if (pnum == 1) { 4457706Sarnold crd = ph[0]; 446*7871Sarnold msg("You play your last card"); 4477706Sarnold } 448*7871Sarnold else 449*7871Sarnold for (;;) { 450*7871Sarnold msg("Your play: "); 451*7871Sarnold prhand(ph, pnum, Playwin); 452*7871Sarnold crd = ph[infrom(ph, pnum, "Your play: ")]; 453*7871Sarnold if (sum + VAL(crd.rank) <= 31) 4547706Sarnold break; 455*7871Sarnold else 456*7871Sarnold msg("Total > 31 -- try again."); 457*7871Sarnold } 458*7871Sarnold makeknown(&crd, 1); 459*7871Sarnold remove(crd, ph, pnum--); 460*7871Sarnold i = pegscore(crd, Table, Tcnt, sum); 461*7871Sarnold sum += VAL(crd.rank); 462*7871Sarnold Table[Tcnt++] = crd; 463*7871Sarnold if (i > 0) { 464*7871Sarnold msg(quiet ? "You got %d" : "You got %d points", i); 465*7871Sarnold if (chkscr(&pscore, i)) 466*7871Sarnold return TRUE; 4677706Sarnold } 4687706Sarnold myturn = !myturn; 4697706Sarnold } 4707706Sarnold } 471*7871Sarnold if (sum >= 31) { 4727706Sarnold sum = 0; 4737706Sarnold mego = ugo = FALSE; 474*7871Sarnold Tcnt = 0; 4757706Sarnold last = FALSE; /* disable last flag */ 476*7871Sarnold Hasread = FALSE; 4777706Sarnold } 478*7871Sarnold if (!pnum && !cnum) 479*7871Sarnold break; /* both done */ 480*7871Sarnold } 481*7871Sarnold if (last) 482*7871Sarnold if (played) { 483*7871Sarnold msg(quiet ? "I get one for last" : "I get one point for last"); 484*7871Sarnold if (chkscr(&cscore, 1)) 485*7871Sarnold return TRUE; 4867706Sarnold } 487*7871Sarnold else { 488*7871Sarnold msg(quiet ? "You get one for last" : 489*7871Sarnold "You get one point for last"); 490*7871Sarnold if (chkscr(&pscore, 1)) 491*7871Sarnold return TRUE; 4927706Sarnold } 493*7871Sarnold return FALSE; 4947706Sarnold } 4957706Sarnold 496*7871Sarnold /* 497*7871Sarnold * prtable: 498*7871Sarnold * Print out the table with the current score 499*7871Sarnold */ 500*7871Sarnold prtable(score) 501*7871Sarnold int score; 502*7871Sarnold { 503*7871Sarnold prhand(Table, Tcnt, Tablewin); 504*7871Sarnold mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); 505*7871Sarnold wrefresh(Tablewin); 506*7871Sarnold } 5077706Sarnold 5087706Sarnold /* 509*7871Sarnold * score: 510*7871Sarnold * Handle the scoring of the hands 5117706Sarnold */ 512*7871Sarnold score(mycrib) 513*7871Sarnold BOOLEAN mycrib; 5147706Sarnold { 515*7871Sarnold sorthand(crib, CINHAND); 516*7871Sarnold if (mycrib) { 517*7871Sarnold if (plyrhand(phand, "hand")) 518*7871Sarnold return TRUE; 519*7871Sarnold if (comphand(chand, "hand")) 520*7871Sarnold return TRUE; 521*7871Sarnold if (comphand(crib, "crib")) 522*7871Sarnold return TRUE; 5237706Sarnold } 524*7871Sarnold else { 525*7871Sarnold if (comphand(chand, "hand")) 526*7871Sarnold return TRUE; 527*7871Sarnold if (plyrhand(phand, "hand")) 528*7871Sarnold return TRUE; 529*7871Sarnold if (plyrhand(crib, "crib")) 530*7871Sarnold return TRUE; 5317706Sarnold } 532*7871Sarnold return FALSE; 5337706Sarnold } 534