121514Smckusick /* 221514Smckusick * Copyright (c) 1980 Regents of the University of California. 3*33705Sbostic * All rights reserved. 4*33705Sbostic * 5*33705Sbostic * Redistribution and use in source and binary forms are permitted 6*33705Sbostic * provided that this notice is preserved and that due credit is given 7*33705Sbostic * to the University of California at Berkeley. The name of the University 8*33705Sbostic * may not be used to endorse or promote products derived from this 9*33705Sbostic * software without specific prior written permission. This software 10*33705Sbostic * is provided ``as is'' without express or implied warranty. 1121514Smckusick */ 1212571Sarnold 1321514Smckusick #ifndef lint 1421514Smckusick char copyright[] = 1521514Smckusick "@(#) Copyright (c) 1980 Regents of the University of California.\n\ 1621514Smckusick All rights reserved.\n"; 17*33705Sbostic #endif /* not lint */ 1821514Smckusick 1921514Smckusick #ifndef lint 20*33705Sbostic static char sccsid[] = "@(#)crib.c 5.2 (Berkeley) 03/10/88"; 21*33705Sbostic #endif /* not lint */ 2221514Smckusick 237871Sarnold # include <curses.h> 247871Sarnold # include <signal.h> 257871Sarnold # include "deck.h" 267871Sarnold # include "cribbage.h" 277871Sarnold # include "cribcur.h" 287706Sarnold 297706Sarnold 307871Sarnold # define LOGFILE "/usr/games/lib/criblog" 317871Sarnold # define INSTRCMD "ul /usr/games/lib/crib.instr | more -f" 327706Sarnold 337706Sarnold 347871Sarnold main(argc, argv) 357871Sarnold int argc; 367871Sarnold char *argv[]; 377706Sarnold { 387706Sarnold register char *p; 397706Sarnold BOOLEAN playing; 407706Sarnold char *s; /* for reading arguments */ 417706Sarnold char bust; /* flag for arg reader */ 427871Sarnold FILE *f; 437871Sarnold FILE *fopen(); 447871Sarnold char *getline(); 457871Sarnold int bye(); 467706Sarnold 477871Sarnold while (--argc > 0) { 487871Sarnold if ((*++argv)[0] != '-') { 497871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 507871Sarnold exit(1); 517706Sarnold } 527706Sarnold bust = FALSE; 537871Sarnold for (s = argv[0] + 1; *s != NULL; s++) { 547871Sarnold switch (*s) { 557871Sarnold case 'e': 567706Sarnold explain = TRUE; 577706Sarnold break; 587871Sarnold case 'q': 597706Sarnold quiet = TRUE; 607706Sarnold break; 617871Sarnold case 'r': 627706Sarnold rflag = TRUE; 637706Sarnold break; 647706Sarnold default: 657871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 667871Sarnold exit(2); 677706Sarnold break; 687706Sarnold } 697871Sarnold if (bust) 707871Sarnold break; 717706Sarnold } 727706Sarnold } 737871Sarnold 747871Sarnold initscr(); 757871Sarnold signal(SIGINT, bye); 767871Sarnold crmode(); 777871Sarnold noecho(); 7812315Sarnold Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); 7912315Sarnold Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); 8012315Sarnold Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); 8112315Sarnold Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1); 827871Sarnold leaveok(Playwin, TRUE); 837871Sarnold leaveok(Tablewin, TRUE); 847871Sarnold leaveok(Compwin, TRUE); 8512162Sarnold clearok(stdscr, FALSE); 867871Sarnold 877871Sarnold if (!quiet) { 887871Sarnold msg("Do you need instructions for cribbage? "); 897871Sarnold if (getuchar() == 'Y') { 908071Sarnold endwin(); 918071Sarnold fflush(stdout); 927871Sarnold system(INSTRCMD); 938071Sarnold crmode(); 948071Sarnold noecho(); 958071Sarnold clear(); 968071Sarnold refresh(); 977871Sarnold msg("For the rules of this program, do \"man cribbage\""); 987706Sarnold } 997706Sarnold } 1007706Sarnold playing = TRUE; 1017871Sarnold do { 10212315Sarnold wclrtobot(Msgwin); 1037871Sarnold msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); 1047949Sarnold if (glimit == SGAME) 1057949Sarnold glimit = (getuchar() == 'L' ? LGAME : SGAME); 1067949Sarnold else 1077949Sarnold glimit = (getuchar() == 'S' ? SGAME : LGAME); 1087706Sarnold game(); 1097871Sarnold msg("Another game? "); 1107871Sarnold playing = (getuchar() == 'Y'); 1117871Sarnold } while (playing); 1127871Sarnold 1137871Sarnold if ((f = fopen(LOGFILE, "a")) != NULL) { 1147871Sarnold fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames); 1157871Sarnold fclose(f); 1167706Sarnold } 1177871Sarnold 1187871Sarnold bye(); 1197706Sarnold } 1207706Sarnold 1217871Sarnold /* 1227871Sarnold * makeboard: 1237871Sarnold * Print out the initial board on the screen 1247871Sarnold */ 1257871Sarnold makeboard() 1267871Sarnold { 1277871Sarnold mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+"); 12811397Sarnold mvaddstr(SCORE_Y + 1, SCORE_X, "| Score: 0 YOU |"); 1297937Sarnold mvaddstr(SCORE_Y + 2, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1307937Sarnold mvaddstr(SCORE_Y + 3, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1317871Sarnold mvaddstr(SCORE_Y + 4, SCORE_X, "| |"); 1327937Sarnold mvaddstr(SCORE_Y + 5, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1337937Sarnold mvaddstr(SCORE_Y + 6, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 13411397Sarnold mvaddstr(SCORE_Y + 7, SCORE_X, "| Score: 0 ME |"); 1357871Sarnold mvaddstr(SCORE_Y + 8, SCORE_X, "+---------------------------------------+"); 1367949Sarnold gamescore(); 1377949Sarnold } 1387949Sarnold 1397949Sarnold /* 1407949Sarnold * gamescore: 1417949Sarnold * Print out the current game score 1427949Sarnold */ 1437949Sarnold gamescore() 1447949Sarnold { 1457949Sarnold extern int Lastscore[]; 1467949Sarnold 1477948Sarnold if (pgames || cgames) { 1487948Sarnold mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames); 1497948Sarnold mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames); 1507948Sarnold } 1517937Sarnold Lastscore[0] = -1; 1527937Sarnold Lastscore[1] = -1; 1537871Sarnold } 1547871Sarnold 1557706Sarnold /* 1567871Sarnold * game: 1577933Sarnold * Play one game up to glimit points. Actually, we only ASK the 1587933Sarnold * player what card to turn. We do a random one, anyway. 1597706Sarnold */ 1607706Sarnold game() 1617706Sarnold { 1627871Sarnold register int i, j; 1637706Sarnold BOOLEAN flag; 1647706Sarnold BOOLEAN compcrib; 1657706Sarnold 1667949Sarnold makeboard(); 16712162Sarnold refresh(); 1687871Sarnold makedeck(deck); 1697871Sarnold shuffle(deck); 1707871Sarnold if (gamecount == 0) { 1717706Sarnold flag = TRUE; 1727871Sarnold do { 1737933Sarnold if (!rflag) { /* player cuts deck */ 1747871Sarnold msg(quiet ? "Cut for crib? " : 1757871Sarnold "Cut to see whose crib it is -- low card wins? "); 1767933Sarnold getline(); 1777706Sarnold } 1787933Sarnold i = (rand() >> 4) % CARDS; /* random cut */ 1797871Sarnold do { /* comp cuts deck */ 1807871Sarnold j = (rand() >> 4) % CARDS; 1817871Sarnold } while (j == i); 1827871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 1837871Sarnold msgcard(deck[i], FALSE); 1847871Sarnold endmsg(); 1857871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 1867871Sarnold msgcard(deck[j], FALSE); 1877871Sarnold endmsg(); 1887871Sarnold flag = (deck[i].rank == deck[j].rank); 1897871Sarnold if (flag) { 1907871Sarnold msg(quiet ? "We tied..." : 1917871Sarnold "We tied and have to try again..."); 1927871Sarnold shuffle(deck); 1937706Sarnold continue; 1947706Sarnold } 1957871Sarnold else 1967871Sarnold compcrib = (deck[i].rank > deck[j].rank); 1977871Sarnold } while (flag); 1987706Sarnold } 1997871Sarnold else { 2007949Sarnold werase(Tablewin); 2017949Sarnold wrefresh(Tablewin); 2027949Sarnold werase(Compwin); 2037949Sarnold wrefresh(Compwin); 20412315Sarnold msg("Loser (%s) gets first crib", (iwon ? "you" : "me")); 2057706Sarnold compcrib = !iwon; 2067706Sarnold } 2077871Sarnold 2087706Sarnold pscore = cscore = 0; 2097706Sarnold flag = TRUE; 2107871Sarnold do { 2117871Sarnold shuffle(deck); 2127871Sarnold flag = !playhand(compcrib); 2137706Sarnold compcrib = !compcrib; 2147871Sarnold } while (flag); 2157706Sarnold ++gamecount; 2167871Sarnold if (cscore < pscore) { 2177871Sarnold if (glimit - cscore > 60) { 2187871Sarnold msg("YOU DOUBLE SKUNKED ME!"); 2197871Sarnold pgames += 4; 2207706Sarnold } 2217871Sarnold else if (glimit - cscore > 30) { 2227871Sarnold msg("YOU SKUNKED ME!"); 2237871Sarnold pgames += 2; 2247871Sarnold } 2257871Sarnold else { 2267871Sarnold msg("YOU WON!"); 2277706Sarnold ++pgames; 2287706Sarnold } 2297706Sarnold iwon = FALSE; 2307706Sarnold } 2317871Sarnold else { 2327871Sarnold if (glimit - pscore > 60) { 2337871Sarnold msg("I DOUBLE SKUNKED YOU!"); 2347871Sarnold cgames += 4; 2357706Sarnold } 2367871Sarnold else if (glimit - pscore > 30) { 2377871Sarnold msg("I SKUNKED YOU!"); 2387871Sarnold cgames += 2; 2397871Sarnold } 2407871Sarnold else { 2417871Sarnold msg("I WON!"); 2427706Sarnold ++cgames; 2437706Sarnold } 2447706Sarnold iwon = TRUE; 2457706Sarnold } 2467949Sarnold gamescore(); 2477706Sarnold } 2487706Sarnold 2497706Sarnold /* 2507871Sarnold * playhand: 2517871Sarnold * Do up one hand of the game 2527706Sarnold */ 2537871Sarnold playhand(mycrib) 2547871Sarnold BOOLEAN mycrib; 2557871Sarnold { 2567871Sarnold register int deckpos; 2577871Sarnold extern char Msgbuf[]; 2587706Sarnold 2597871Sarnold werase(Compwin); 2607706Sarnold 2617706Sarnold knownum = 0; 2627871Sarnold deckpos = deal(mycrib); 2637871Sarnold sorthand(chand, FULLHAND); 2647871Sarnold sorthand(phand, FULLHAND); 2657871Sarnold makeknown(chand, FULLHAND); 2668073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 2677871Sarnold discard(mycrib); 2687871Sarnold if (cut(mycrib, deckpos)) 2697871Sarnold return TRUE; 2707871Sarnold if (peg(mycrib)) 2717871Sarnold return TRUE; 2727871Sarnold werase(Tablewin); 2737871Sarnold wrefresh(Tablewin); 2747871Sarnold if (score(mycrib)) 2757871Sarnold return TRUE; 2767871Sarnold return FALSE; 2777706Sarnold } 2787706Sarnold 2797706Sarnold 2807706Sarnold 2817706Sarnold /* 2827706Sarnold * deal cards to both players from deck 2837706Sarnold */ 2847706Sarnold 2857706Sarnold deal( mycrib ) 2867706Sarnold { 2877706Sarnold register int i, j; 2887706Sarnold 2897706Sarnold j = 0; 2907706Sarnold for( i = 0; i < FULLHAND; i++ ) { 2917706Sarnold if( mycrib ) { 2927706Sarnold phand[i] = deck[j++]; 2937706Sarnold chand[i] = deck[j++]; 2947706Sarnold } 2957706Sarnold else { 2967706Sarnold chand[i] = deck[j++]; 2977706Sarnold phand[i] = deck[j++]; 2987706Sarnold } 2997706Sarnold } 3007706Sarnold return( j ); 3017706Sarnold } 3027706Sarnold 3037706Sarnold /* 3047871Sarnold * discard: 3057871Sarnold * Handle players discarding into the crib... 3067871Sarnold * Note: we call cdiscard() after prining first message so player doesn't wait 3077706Sarnold */ 3087871Sarnold discard(mycrib) 3097871Sarnold BOOLEAN mycrib; 3107706Sarnold { 3117871Sarnold register char *prompt; 3127871Sarnold CARD crd; 3137706Sarnold 3147946Sarnold prcrib(mycrib, TRUE); 3157871Sarnold prompt = (quiet ? "Discard --> " : "Discard a card --> "); 3167871Sarnold cdiscard(mycrib); /* puts best discard at end */ 3177871Sarnold crd = phand[infrom(phand, FULLHAND, prompt)]; 3187871Sarnold remove(crd, phand, FULLHAND); 3198073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 3207706Sarnold crib[0] = crd; 3217871Sarnold /* next four lines same as last four except for cdiscard() */ 3227871Sarnold crd = phand[infrom(phand, FULLHAND - 1, prompt)]; 3237871Sarnold remove(crd, phand, FULLHAND - 1); 3248073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 3257706Sarnold crib[1] = crd; 3267706Sarnold crib[2] = chand[4]; 3277706Sarnold crib[3] = chand[5]; 3287871Sarnold chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; 3297706Sarnold } 3307706Sarnold 3317706Sarnold /* 3327871Sarnold * cut: 3337933Sarnold * Cut the deck and set turnover. Actually, we only ASK the 3347933Sarnold * player what card to turn. We do a random one, anyway. 3357706Sarnold */ 3367871Sarnold cut(mycrib, pos) 3377871Sarnold BOOLEAN mycrib; 3387871Sarnold int pos; 3397706Sarnold { 3407871Sarnold register int i, cardx; 3417706Sarnold BOOLEAN win = FALSE; 3427706Sarnold 3437871Sarnold if (mycrib) { 3447933Sarnold if (!rflag) { /* random cut */ 3457871Sarnold msg(quiet ? "Cut the deck? " : 3467871Sarnold "How many cards down do you wish to cut the deck? "); 3477933Sarnold getline(); 3487706Sarnold } 3497933Sarnold i = (rand() >> 4) % (CARDS - pos); 3507706Sarnold turnover = deck[i + pos]; 3517871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 3527871Sarnold msgcard(turnover, FALSE); 3537871Sarnold endmsg(); 3547871Sarnold if (turnover.rank == JACK) { 35512315Sarnold msg("I get two for his heels"); 3567871Sarnold win = chkscr(&cscore,2 ); 3577706Sarnold } 3587706Sarnold } 3597871Sarnold else { 3607871Sarnold i = (rand() >> 4) % (CARDS - pos) + pos; 3617706Sarnold turnover = deck[i]; 3627871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 3637871Sarnold msgcard(turnover, FALSE); 3647871Sarnold endmsg(); 3657871Sarnold if (turnover.rank == JACK) { 36612315Sarnold msg("You get two for his heels"); 3677871Sarnold win = chkscr(&pscore, 2); 3687706Sarnold } 3697706Sarnold } 3707871Sarnold makeknown(&turnover, 1); 3717946Sarnold prcrib(mycrib, FALSE); 3727871Sarnold return win; 3737706Sarnold } 3747706Sarnold 3757706Sarnold /* 3767946Sarnold * prcrib: 3777946Sarnold * Print out the turnover card with crib indicator 3787946Sarnold */ 3797946Sarnold prcrib(mycrib, blank) 3807946Sarnold BOOLEAN mycrib, blank; 3817946Sarnold { 38212162Sarnold register int y, cardx; 3837946Sarnold 3847946Sarnold if (mycrib) 3857946Sarnold cardx = CRIB_X; 3867946Sarnold else 38712315Sarnold cardx = 0; 3887946Sarnold 3897946Sarnold mvaddstr(CRIB_Y, cardx + 1, "CRIB"); 3907946Sarnold prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank); 39112162Sarnold 39212162Sarnold if (mycrib) 39312315Sarnold cardx = 0; 39412162Sarnold else 39512162Sarnold cardx = CRIB_X; 39612162Sarnold 39712162Sarnold for (y = CRIB_Y; y <= CRIB_Y + 5; y++) 39812162Sarnold mvaddstr(y, cardx, " "); 3997946Sarnold } 4007946Sarnold 4017946Sarnold /* 4027871Sarnold * peg: 4037871Sarnold * Handle all the pegging... 4047706Sarnold */ 4057706Sarnold 4067871Sarnold static CARD Table[14]; 4077706Sarnold 4087871Sarnold static int Tcnt; 4097871Sarnold 4107871Sarnold peg(mycrib) 4117871Sarnold BOOLEAN mycrib; 4127706Sarnold { 4137871Sarnold static CARD ch[CINHAND], ph[CINHAND]; 4147706Sarnold CARD crd; 4157871Sarnold register int i, j, k; 4168072Sarnold register int l; 4178072Sarnold register int cnum, pnum, sum; 4188072Sarnold register BOOLEAN myturn, mego, ugo, last, played; 4197706Sarnold 4207706Sarnold cnum = pnum = CINHAND; 4217871Sarnold for (i = 0; i < CINHAND; i++) { /* make copies of hands */ 4227706Sarnold ch[i] = chand[i]; 4237706Sarnold ph[i] = phand[i]; 4247706Sarnold } 4257871Sarnold Tcnt = 0; /* index to table of cards played */ 4267706Sarnold sum = 0; /* sum of cards played */ 4277706Sarnold mego = ugo = FALSE; 4287706Sarnold myturn = !mycrib; 4297871Sarnold for (;;) { 4307706Sarnold last = TRUE; /* enable last flag */ 4318073Sarnold prhand(ph, pnum, Playwin, FALSE); 4328073Sarnold prhand(ch, cnum, Compwin, TRUE); 4337871Sarnold prtable(sum); 4347871Sarnold if (myturn) { /* my tyrn to play */ 4357871Sarnold if (!anymove(ch, cnum, sum)) { /* if no card to play */ 4367871Sarnold if (!mego && cnum) { /* go for comp? */ 43712315Sarnold msg("GO"); 4387706Sarnold mego = TRUE; 4397706Sarnold } 4407871Sarnold if (anymove(ph, pnum, sum)) /* can player move? */ 4417706Sarnold myturn = !myturn; 4427871Sarnold else { /* give him his point */ 44312315Sarnold msg(quiet ? "You get one" : "You get one point"); 4447871Sarnold if (chkscr(&pscore, 1)) 4457871Sarnold return TRUE; 4467706Sarnold sum = 0; 4477706Sarnold mego = ugo = FALSE; 4487871Sarnold Tcnt = 0; 4497706Sarnold } 4507706Sarnold } 4517871Sarnold else { 4527706Sarnold played = TRUE; 4537706Sarnold j = -1; 4547706Sarnold k = 0; 4557871Sarnold for (i = 0; i < cnum; i++) { /* maximize score */ 4567871Sarnold l = pegscore(ch[i], Table, Tcnt, sum); 4577871Sarnold if (l > k) { 4587706Sarnold k = l; 4597706Sarnold j = i; 4607706Sarnold } 4617706Sarnold } 4627871Sarnold if (j < 0) /* if nothing scores */ 4637871Sarnold j = cchose(ch, cnum, sum); 4647706Sarnold crd = ch[j]; 4657871Sarnold remove(crd, ch, cnum--); 4667871Sarnold sum += VAL(crd.rank); 4677871Sarnold Table[Tcnt++] = crd; 4687871Sarnold if (k > 0) { 4697948Sarnold addmsg(quiet ? "I get %d playing " : 4707948Sarnold "I get %d points playing ", k); 4717871Sarnold msgcard(crd, FALSE); 4727871Sarnold endmsg(); 4737871Sarnold if (chkscr(&cscore, k)) 4747871Sarnold return TRUE; 4757706Sarnold } 4767706Sarnold myturn = !myturn; 4777706Sarnold } 4787706Sarnold } 4797871Sarnold else { 4807871Sarnold if (!anymove(ph, pnum, sum)) { /* can player move? */ 4817871Sarnold if (!ugo && pnum) { /* go for player */ 48212315Sarnold msg("You have a GO"); 4837706Sarnold ugo = TRUE; 4847706Sarnold } 4857871Sarnold if (anymove(ch, cnum, sum)) /* can computer play? */ 4867706Sarnold myturn = !myturn; 4877871Sarnold else { 48812315Sarnold msg(quiet ? "I get one" : "I get one point"); 48912315Sarnold do_wait(); 4907871Sarnold if (chkscr(&cscore, 1)) 4917871Sarnold return TRUE; 4927706Sarnold sum = 0; 4937706Sarnold mego = ugo = FALSE; 4947871Sarnold Tcnt = 0; 4957706Sarnold } 4967706Sarnold } 4977871Sarnold else { /* player plays */ 4987706Sarnold played = FALSE; 4997871Sarnold if (pnum == 1) { 5007706Sarnold crd = ph[0]; 5017871Sarnold msg("You play your last card"); 5027706Sarnold } 5037871Sarnold else 5047871Sarnold for (;;) { 5058073Sarnold prhand(ph, pnum, Playwin, FALSE); 5067871Sarnold crd = ph[infrom(ph, pnum, "Your play: ")]; 5077871Sarnold if (sum + VAL(crd.rank) <= 31) 5087706Sarnold break; 5097871Sarnold else 51012315Sarnold msg("Total > 31 -- try again"); 5117871Sarnold } 5127871Sarnold makeknown(&crd, 1); 5137871Sarnold remove(crd, ph, pnum--); 5147871Sarnold i = pegscore(crd, Table, Tcnt, sum); 5157871Sarnold sum += VAL(crd.rank); 5167871Sarnold Table[Tcnt++] = crd; 5177871Sarnold if (i > 0) { 5187871Sarnold msg(quiet ? "You got %d" : "You got %d points", i); 5197871Sarnold if (chkscr(&pscore, i)) 5207871Sarnold return TRUE; 5217706Sarnold } 5227706Sarnold myturn = !myturn; 5237706Sarnold } 5247706Sarnold } 5257871Sarnold if (sum >= 31) { 52612315Sarnold if (!myturn) 52712315Sarnold do_wait(); 5287706Sarnold sum = 0; 5297706Sarnold mego = ugo = FALSE; 5307871Sarnold Tcnt = 0; 5317706Sarnold last = FALSE; /* disable last flag */ 5327706Sarnold } 5337871Sarnold if (!pnum && !cnum) 5347871Sarnold break; /* both done */ 5357871Sarnold } 5368073Sarnold prhand(ph, pnum, Playwin, FALSE); 5378073Sarnold prhand(ch, cnum, Compwin, TRUE); 5388072Sarnold prtable(sum); 5397871Sarnold if (last) 5407871Sarnold if (played) { 5417871Sarnold msg(quiet ? "I get one for last" : "I get one point for last"); 54212315Sarnold do_wait(); 5437871Sarnold if (chkscr(&cscore, 1)) 5447871Sarnold return TRUE; 5457706Sarnold } 5467871Sarnold else { 5477871Sarnold msg(quiet ? "You get one for last" : 5487871Sarnold "You get one point for last"); 5497871Sarnold if (chkscr(&pscore, 1)) 5507871Sarnold return TRUE; 5517706Sarnold } 5527871Sarnold return FALSE; 5537706Sarnold } 5547706Sarnold 5557871Sarnold /* 5567871Sarnold * prtable: 5577871Sarnold * Print out the table with the current score 5587871Sarnold */ 5597871Sarnold prtable(score) 5607871Sarnold int score; 5617871Sarnold { 5628073Sarnold prhand(Table, Tcnt, Tablewin, FALSE); 5637871Sarnold mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); 5647871Sarnold wrefresh(Tablewin); 5657871Sarnold } 5667706Sarnold 5677706Sarnold /* 5687871Sarnold * score: 5697871Sarnold * Handle the scoring of the hands 5707706Sarnold */ 5717871Sarnold score(mycrib) 5727871Sarnold BOOLEAN mycrib; 5737706Sarnold { 5747871Sarnold sorthand(crib, CINHAND); 5757871Sarnold if (mycrib) { 5767871Sarnold if (plyrhand(phand, "hand")) 5777871Sarnold return TRUE; 5787871Sarnold if (comphand(chand, "hand")) 5797871Sarnold return TRUE; 58012315Sarnold do_wait(); 5817871Sarnold if (comphand(crib, "crib")) 5827871Sarnold return TRUE; 5837706Sarnold } 5847871Sarnold else { 5857871Sarnold if (comphand(chand, "hand")) 5867871Sarnold return TRUE; 5877871Sarnold if (plyrhand(phand, "hand")) 5887871Sarnold return TRUE; 5897871Sarnold if (plyrhand(crib, "crib")) 5907871Sarnold return TRUE; 5917706Sarnold } 5927871Sarnold return FALSE; 5937706Sarnold } 594