121514Smckusick /* 221514Smckusick * Copyright (c) 1980 Regents of the University of California. 333705Sbostic * All rights reserved. 433705Sbostic * 533705Sbostic * Redistribution and use in source and binary forms are permitted 6*34779Sbostic * provided that the above copyright notice and this paragraph are 7*34779Sbostic * duplicated in all such forms and that any documentation, 8*34779Sbostic * advertising materials, and other materials related to such 9*34779Sbostic * distribution and use acknowledge that the software was developed 10*34779Sbostic * by the University of California, Berkeley. The name of the 11*34779Sbostic * University may not be used to endorse or promote products derived 12*34779Sbostic * from this software without specific prior written permission. 13*34779Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14*34779Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15*34779Sbostic * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 1621514Smckusick */ 1712571Sarnold 1821514Smckusick #ifndef lint 1921514Smckusick char copyright[] = 2021514Smckusick "@(#) Copyright (c) 1980 Regents of the University of California.\n\ 2121514Smckusick All rights reserved.\n"; 2233705Sbostic #endif /* not lint */ 2321514Smckusick 2421514Smckusick #ifndef lint 25*34779Sbostic static char sccsid[] = "@(#)crib.c 5.3 (Berkeley) 06/18/88"; 2633705Sbostic #endif /* not lint */ 2721514Smckusick 287871Sarnold # include <curses.h> 297871Sarnold # include <signal.h> 307871Sarnold # include "deck.h" 317871Sarnold # include "cribbage.h" 327871Sarnold # include "cribcur.h" 337706Sarnold 347706Sarnold 357871Sarnold # define LOGFILE "/usr/games/lib/criblog" 367871Sarnold # define INSTRCMD "ul /usr/games/lib/crib.instr | more -f" 377706Sarnold 387706Sarnold 397871Sarnold main(argc, argv) 407871Sarnold int argc; 417871Sarnold char *argv[]; 427706Sarnold { 437706Sarnold register char *p; 447706Sarnold BOOLEAN playing; 457706Sarnold char *s; /* for reading arguments */ 467706Sarnold char bust; /* flag for arg reader */ 477871Sarnold FILE *f; 487871Sarnold FILE *fopen(); 497871Sarnold char *getline(); 507871Sarnold int bye(); 517706Sarnold 527871Sarnold while (--argc > 0) { 537871Sarnold if ((*++argv)[0] != '-') { 547871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 557871Sarnold exit(1); 567706Sarnold } 577706Sarnold bust = FALSE; 587871Sarnold for (s = argv[0] + 1; *s != NULL; s++) { 597871Sarnold switch (*s) { 607871Sarnold case 'e': 617706Sarnold explain = TRUE; 627706Sarnold break; 637871Sarnold case 'q': 647706Sarnold quiet = TRUE; 657706Sarnold break; 667871Sarnold case 'r': 677706Sarnold rflag = TRUE; 687706Sarnold break; 697706Sarnold default: 707871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 717871Sarnold exit(2); 727706Sarnold break; 737706Sarnold } 747871Sarnold if (bust) 757871Sarnold break; 767706Sarnold } 777706Sarnold } 787871Sarnold 797871Sarnold initscr(); 807871Sarnold signal(SIGINT, bye); 817871Sarnold crmode(); 827871Sarnold noecho(); 8312315Sarnold Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); 8412315Sarnold Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); 8512315Sarnold Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); 8612315Sarnold Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1); 877871Sarnold leaveok(Playwin, TRUE); 887871Sarnold leaveok(Tablewin, TRUE); 897871Sarnold leaveok(Compwin, TRUE); 9012162Sarnold clearok(stdscr, FALSE); 917871Sarnold 927871Sarnold if (!quiet) { 937871Sarnold msg("Do you need instructions for cribbage? "); 947871Sarnold if (getuchar() == 'Y') { 958071Sarnold endwin(); 968071Sarnold fflush(stdout); 977871Sarnold system(INSTRCMD); 988071Sarnold crmode(); 998071Sarnold noecho(); 1008071Sarnold clear(); 1018071Sarnold refresh(); 1027871Sarnold msg("For the rules of this program, do \"man cribbage\""); 1037706Sarnold } 1047706Sarnold } 1057706Sarnold playing = TRUE; 1067871Sarnold do { 10712315Sarnold wclrtobot(Msgwin); 1087871Sarnold msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); 1097949Sarnold if (glimit == SGAME) 1107949Sarnold glimit = (getuchar() == 'L' ? LGAME : SGAME); 1117949Sarnold else 1127949Sarnold glimit = (getuchar() == 'S' ? SGAME : LGAME); 1137706Sarnold game(); 1147871Sarnold msg("Another game? "); 1157871Sarnold playing = (getuchar() == 'Y'); 1167871Sarnold } while (playing); 1177871Sarnold 1187871Sarnold if ((f = fopen(LOGFILE, "a")) != NULL) { 1197871Sarnold fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames); 1207871Sarnold fclose(f); 1217706Sarnold } 1227871Sarnold 1237871Sarnold bye(); 1247706Sarnold } 1257706Sarnold 1267871Sarnold /* 1277871Sarnold * makeboard: 1287871Sarnold * Print out the initial board on the screen 1297871Sarnold */ 1307871Sarnold makeboard() 1317871Sarnold { 1327871Sarnold mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+"); 13311397Sarnold mvaddstr(SCORE_Y + 1, SCORE_X, "| Score: 0 YOU |"); 1347937Sarnold mvaddstr(SCORE_Y + 2, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1357937Sarnold mvaddstr(SCORE_Y + 3, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1367871Sarnold mvaddstr(SCORE_Y + 4, SCORE_X, "| |"); 1377937Sarnold mvaddstr(SCORE_Y + 5, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1387937Sarnold mvaddstr(SCORE_Y + 6, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 13911397Sarnold mvaddstr(SCORE_Y + 7, SCORE_X, "| Score: 0 ME |"); 1407871Sarnold mvaddstr(SCORE_Y + 8, SCORE_X, "+---------------------------------------+"); 1417949Sarnold gamescore(); 1427949Sarnold } 1437949Sarnold 1447949Sarnold /* 1457949Sarnold * gamescore: 1467949Sarnold * Print out the current game score 1477949Sarnold */ 1487949Sarnold gamescore() 1497949Sarnold { 1507949Sarnold extern int Lastscore[]; 1517949Sarnold 1527948Sarnold if (pgames || cgames) { 1537948Sarnold mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames); 1547948Sarnold mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames); 1557948Sarnold } 1567937Sarnold Lastscore[0] = -1; 1577937Sarnold Lastscore[1] = -1; 1587871Sarnold } 1597871Sarnold 1607706Sarnold /* 1617871Sarnold * game: 1627933Sarnold * Play one game up to glimit points. Actually, we only ASK the 1637933Sarnold * player what card to turn. We do a random one, anyway. 1647706Sarnold */ 1657706Sarnold game() 1667706Sarnold { 1677871Sarnold register int i, j; 1687706Sarnold BOOLEAN flag; 1697706Sarnold BOOLEAN compcrib; 1707706Sarnold 1717949Sarnold makeboard(); 17212162Sarnold refresh(); 1737871Sarnold makedeck(deck); 1747871Sarnold shuffle(deck); 1757871Sarnold if (gamecount == 0) { 1767706Sarnold flag = TRUE; 1777871Sarnold do { 1787933Sarnold if (!rflag) { /* player cuts deck */ 1797871Sarnold msg(quiet ? "Cut for crib? " : 1807871Sarnold "Cut to see whose crib it is -- low card wins? "); 1817933Sarnold getline(); 1827706Sarnold } 1837933Sarnold i = (rand() >> 4) % CARDS; /* random cut */ 1847871Sarnold do { /* comp cuts deck */ 1857871Sarnold j = (rand() >> 4) % CARDS; 1867871Sarnold } while (j == i); 1877871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 1887871Sarnold msgcard(deck[i], FALSE); 1897871Sarnold endmsg(); 1907871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 1917871Sarnold msgcard(deck[j], FALSE); 1927871Sarnold endmsg(); 1937871Sarnold flag = (deck[i].rank == deck[j].rank); 1947871Sarnold if (flag) { 1957871Sarnold msg(quiet ? "We tied..." : 1967871Sarnold "We tied and have to try again..."); 1977871Sarnold shuffle(deck); 1987706Sarnold continue; 1997706Sarnold } 2007871Sarnold else 2017871Sarnold compcrib = (deck[i].rank > deck[j].rank); 2027871Sarnold } while (flag); 2037706Sarnold } 2047871Sarnold else { 2057949Sarnold werase(Tablewin); 2067949Sarnold wrefresh(Tablewin); 2077949Sarnold werase(Compwin); 2087949Sarnold wrefresh(Compwin); 20912315Sarnold msg("Loser (%s) gets first crib", (iwon ? "you" : "me")); 2107706Sarnold compcrib = !iwon; 2117706Sarnold } 2127871Sarnold 2137706Sarnold pscore = cscore = 0; 2147706Sarnold flag = TRUE; 2157871Sarnold do { 2167871Sarnold shuffle(deck); 2177871Sarnold flag = !playhand(compcrib); 2187706Sarnold compcrib = !compcrib; 2197871Sarnold } while (flag); 2207706Sarnold ++gamecount; 2217871Sarnold if (cscore < pscore) { 2227871Sarnold if (glimit - cscore > 60) { 2237871Sarnold msg("YOU DOUBLE SKUNKED ME!"); 2247871Sarnold pgames += 4; 2257706Sarnold } 2267871Sarnold else if (glimit - cscore > 30) { 2277871Sarnold msg("YOU SKUNKED ME!"); 2287871Sarnold pgames += 2; 2297871Sarnold } 2307871Sarnold else { 2317871Sarnold msg("YOU WON!"); 2327706Sarnold ++pgames; 2337706Sarnold } 2347706Sarnold iwon = FALSE; 2357706Sarnold } 2367871Sarnold else { 2377871Sarnold if (glimit - pscore > 60) { 2387871Sarnold msg("I DOUBLE SKUNKED YOU!"); 2397871Sarnold cgames += 4; 2407706Sarnold } 2417871Sarnold else if (glimit - pscore > 30) { 2427871Sarnold msg("I SKUNKED YOU!"); 2437871Sarnold cgames += 2; 2447871Sarnold } 2457871Sarnold else { 2467871Sarnold msg("I WON!"); 2477706Sarnold ++cgames; 2487706Sarnold } 2497706Sarnold iwon = TRUE; 2507706Sarnold } 2517949Sarnold gamescore(); 2527706Sarnold } 2537706Sarnold 2547706Sarnold /* 2557871Sarnold * playhand: 2567871Sarnold * Do up one hand of the game 2577706Sarnold */ 2587871Sarnold playhand(mycrib) 2597871Sarnold BOOLEAN mycrib; 2607871Sarnold { 2617871Sarnold register int deckpos; 2627871Sarnold extern char Msgbuf[]; 2637706Sarnold 2647871Sarnold werase(Compwin); 2657706Sarnold 2667706Sarnold knownum = 0; 2677871Sarnold deckpos = deal(mycrib); 2687871Sarnold sorthand(chand, FULLHAND); 2697871Sarnold sorthand(phand, FULLHAND); 2707871Sarnold makeknown(chand, FULLHAND); 2718073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 2727871Sarnold discard(mycrib); 2737871Sarnold if (cut(mycrib, deckpos)) 2747871Sarnold return TRUE; 2757871Sarnold if (peg(mycrib)) 2767871Sarnold return TRUE; 2777871Sarnold werase(Tablewin); 2787871Sarnold wrefresh(Tablewin); 2797871Sarnold if (score(mycrib)) 2807871Sarnold return TRUE; 2817871Sarnold return FALSE; 2827706Sarnold } 2837706Sarnold 2847706Sarnold 2857706Sarnold 2867706Sarnold /* 2877706Sarnold * deal cards to both players from deck 2887706Sarnold */ 2897706Sarnold 2907706Sarnold deal( mycrib ) 2917706Sarnold { 2927706Sarnold register int i, j; 2937706Sarnold 2947706Sarnold j = 0; 2957706Sarnold for( i = 0; i < FULLHAND; i++ ) { 2967706Sarnold if( mycrib ) { 2977706Sarnold phand[i] = deck[j++]; 2987706Sarnold chand[i] = deck[j++]; 2997706Sarnold } 3007706Sarnold else { 3017706Sarnold chand[i] = deck[j++]; 3027706Sarnold phand[i] = deck[j++]; 3037706Sarnold } 3047706Sarnold } 3057706Sarnold return( j ); 3067706Sarnold } 3077706Sarnold 3087706Sarnold /* 3097871Sarnold * discard: 3107871Sarnold * Handle players discarding into the crib... 3117871Sarnold * Note: we call cdiscard() after prining first message so player doesn't wait 3127706Sarnold */ 3137871Sarnold discard(mycrib) 3147871Sarnold BOOLEAN mycrib; 3157706Sarnold { 3167871Sarnold register char *prompt; 3177871Sarnold CARD crd; 3187706Sarnold 3197946Sarnold prcrib(mycrib, TRUE); 3207871Sarnold prompt = (quiet ? "Discard --> " : "Discard a card --> "); 3217871Sarnold cdiscard(mycrib); /* puts best discard at end */ 3227871Sarnold crd = phand[infrom(phand, FULLHAND, prompt)]; 3237871Sarnold remove(crd, phand, FULLHAND); 3248073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 3257706Sarnold crib[0] = crd; 3267871Sarnold /* next four lines same as last four except for cdiscard() */ 3277871Sarnold crd = phand[infrom(phand, FULLHAND - 1, prompt)]; 3287871Sarnold remove(crd, phand, FULLHAND - 1); 3298073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 3307706Sarnold crib[1] = crd; 3317706Sarnold crib[2] = chand[4]; 3327706Sarnold crib[3] = chand[5]; 3337871Sarnold chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; 3347706Sarnold } 3357706Sarnold 3367706Sarnold /* 3377871Sarnold * cut: 3387933Sarnold * Cut the deck and set turnover. Actually, we only ASK the 3397933Sarnold * player what card to turn. We do a random one, anyway. 3407706Sarnold */ 3417871Sarnold cut(mycrib, pos) 3427871Sarnold BOOLEAN mycrib; 3437871Sarnold int pos; 3447706Sarnold { 3457871Sarnold register int i, cardx; 3467706Sarnold BOOLEAN win = FALSE; 3477706Sarnold 3487871Sarnold if (mycrib) { 3497933Sarnold if (!rflag) { /* random cut */ 3507871Sarnold msg(quiet ? "Cut the deck? " : 3517871Sarnold "How many cards down do you wish to cut the deck? "); 3527933Sarnold getline(); 3537706Sarnold } 3547933Sarnold i = (rand() >> 4) % (CARDS - pos); 3557706Sarnold turnover = deck[i + pos]; 3567871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 3577871Sarnold msgcard(turnover, FALSE); 3587871Sarnold endmsg(); 3597871Sarnold if (turnover.rank == JACK) { 36012315Sarnold msg("I get two for his heels"); 3617871Sarnold win = chkscr(&cscore,2 ); 3627706Sarnold } 3637706Sarnold } 3647871Sarnold else { 3657871Sarnold i = (rand() >> 4) % (CARDS - pos) + pos; 3667706Sarnold turnover = deck[i]; 3677871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 3687871Sarnold msgcard(turnover, FALSE); 3697871Sarnold endmsg(); 3707871Sarnold if (turnover.rank == JACK) { 37112315Sarnold msg("You get two for his heels"); 3727871Sarnold win = chkscr(&pscore, 2); 3737706Sarnold } 3747706Sarnold } 3757871Sarnold makeknown(&turnover, 1); 3767946Sarnold prcrib(mycrib, FALSE); 3777871Sarnold return win; 3787706Sarnold } 3797706Sarnold 3807706Sarnold /* 3817946Sarnold * prcrib: 3827946Sarnold * Print out the turnover card with crib indicator 3837946Sarnold */ 3847946Sarnold prcrib(mycrib, blank) 3857946Sarnold BOOLEAN mycrib, blank; 3867946Sarnold { 38712162Sarnold register int y, cardx; 3887946Sarnold 3897946Sarnold if (mycrib) 3907946Sarnold cardx = CRIB_X; 3917946Sarnold else 39212315Sarnold cardx = 0; 3937946Sarnold 3947946Sarnold mvaddstr(CRIB_Y, cardx + 1, "CRIB"); 3957946Sarnold prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank); 39612162Sarnold 39712162Sarnold if (mycrib) 39812315Sarnold cardx = 0; 39912162Sarnold else 40012162Sarnold cardx = CRIB_X; 40112162Sarnold 40212162Sarnold for (y = CRIB_Y; y <= CRIB_Y + 5; y++) 40312162Sarnold mvaddstr(y, cardx, " "); 4047946Sarnold } 4057946Sarnold 4067946Sarnold /* 4077871Sarnold * peg: 4087871Sarnold * Handle all the pegging... 4097706Sarnold */ 4107706Sarnold 4117871Sarnold static CARD Table[14]; 4127706Sarnold 4137871Sarnold static int Tcnt; 4147871Sarnold 4157871Sarnold peg(mycrib) 4167871Sarnold BOOLEAN mycrib; 4177706Sarnold { 4187871Sarnold static CARD ch[CINHAND], ph[CINHAND]; 4197706Sarnold CARD crd; 4207871Sarnold register int i, j, k; 4218072Sarnold register int l; 4228072Sarnold register int cnum, pnum, sum; 4238072Sarnold register BOOLEAN myturn, mego, ugo, last, played; 4247706Sarnold 4257706Sarnold cnum = pnum = CINHAND; 4267871Sarnold for (i = 0; i < CINHAND; i++) { /* make copies of hands */ 4277706Sarnold ch[i] = chand[i]; 4287706Sarnold ph[i] = phand[i]; 4297706Sarnold } 4307871Sarnold Tcnt = 0; /* index to table of cards played */ 4317706Sarnold sum = 0; /* sum of cards played */ 4327706Sarnold mego = ugo = FALSE; 4337706Sarnold myturn = !mycrib; 4347871Sarnold for (;;) { 4357706Sarnold last = TRUE; /* enable last flag */ 4368073Sarnold prhand(ph, pnum, Playwin, FALSE); 4378073Sarnold prhand(ch, cnum, Compwin, TRUE); 4387871Sarnold prtable(sum); 4397871Sarnold if (myturn) { /* my tyrn to play */ 4407871Sarnold if (!anymove(ch, cnum, sum)) { /* if no card to play */ 4417871Sarnold if (!mego && cnum) { /* go for comp? */ 44212315Sarnold msg("GO"); 4437706Sarnold mego = TRUE; 4447706Sarnold } 4457871Sarnold if (anymove(ph, pnum, sum)) /* can player move? */ 4467706Sarnold myturn = !myturn; 4477871Sarnold else { /* give him his point */ 44812315Sarnold msg(quiet ? "You get one" : "You get one point"); 4497871Sarnold if (chkscr(&pscore, 1)) 4507871Sarnold return TRUE; 4517706Sarnold sum = 0; 4527706Sarnold mego = ugo = FALSE; 4537871Sarnold Tcnt = 0; 4547706Sarnold } 4557706Sarnold } 4567871Sarnold else { 4577706Sarnold played = TRUE; 4587706Sarnold j = -1; 4597706Sarnold k = 0; 4607871Sarnold for (i = 0; i < cnum; i++) { /* maximize score */ 4617871Sarnold l = pegscore(ch[i], Table, Tcnt, sum); 4627871Sarnold if (l > k) { 4637706Sarnold k = l; 4647706Sarnold j = i; 4657706Sarnold } 4667706Sarnold } 4677871Sarnold if (j < 0) /* if nothing scores */ 4687871Sarnold j = cchose(ch, cnum, sum); 4697706Sarnold crd = ch[j]; 4707871Sarnold remove(crd, ch, cnum--); 4717871Sarnold sum += VAL(crd.rank); 4727871Sarnold Table[Tcnt++] = crd; 4737871Sarnold if (k > 0) { 4747948Sarnold addmsg(quiet ? "I get %d playing " : 4757948Sarnold "I get %d points playing ", k); 4767871Sarnold msgcard(crd, FALSE); 4777871Sarnold endmsg(); 4787871Sarnold if (chkscr(&cscore, k)) 4797871Sarnold return TRUE; 4807706Sarnold } 4817706Sarnold myturn = !myturn; 4827706Sarnold } 4837706Sarnold } 4847871Sarnold else { 4857871Sarnold if (!anymove(ph, pnum, sum)) { /* can player move? */ 4867871Sarnold if (!ugo && pnum) { /* go for player */ 48712315Sarnold msg("You have a GO"); 4887706Sarnold ugo = TRUE; 4897706Sarnold } 4907871Sarnold if (anymove(ch, cnum, sum)) /* can computer play? */ 4917706Sarnold myturn = !myturn; 4927871Sarnold else { 49312315Sarnold msg(quiet ? "I get one" : "I get one point"); 49412315Sarnold do_wait(); 4957871Sarnold if (chkscr(&cscore, 1)) 4967871Sarnold return TRUE; 4977706Sarnold sum = 0; 4987706Sarnold mego = ugo = FALSE; 4997871Sarnold Tcnt = 0; 5007706Sarnold } 5017706Sarnold } 5027871Sarnold else { /* player plays */ 5037706Sarnold played = FALSE; 5047871Sarnold if (pnum == 1) { 5057706Sarnold crd = ph[0]; 5067871Sarnold msg("You play your last card"); 5077706Sarnold } 5087871Sarnold else 5097871Sarnold for (;;) { 5108073Sarnold prhand(ph, pnum, Playwin, FALSE); 5117871Sarnold crd = ph[infrom(ph, pnum, "Your play: ")]; 5127871Sarnold if (sum + VAL(crd.rank) <= 31) 5137706Sarnold break; 5147871Sarnold else 51512315Sarnold msg("Total > 31 -- try again"); 5167871Sarnold } 5177871Sarnold makeknown(&crd, 1); 5187871Sarnold remove(crd, ph, pnum--); 5197871Sarnold i = pegscore(crd, Table, Tcnt, sum); 5207871Sarnold sum += VAL(crd.rank); 5217871Sarnold Table[Tcnt++] = crd; 5227871Sarnold if (i > 0) { 5237871Sarnold msg(quiet ? "You got %d" : "You got %d points", i); 5247871Sarnold if (chkscr(&pscore, i)) 5257871Sarnold return TRUE; 5267706Sarnold } 5277706Sarnold myturn = !myturn; 5287706Sarnold } 5297706Sarnold } 5307871Sarnold if (sum >= 31) { 53112315Sarnold if (!myturn) 53212315Sarnold do_wait(); 5337706Sarnold sum = 0; 5347706Sarnold mego = ugo = FALSE; 5357871Sarnold Tcnt = 0; 5367706Sarnold last = FALSE; /* disable last flag */ 5377706Sarnold } 5387871Sarnold if (!pnum && !cnum) 5397871Sarnold break; /* both done */ 5407871Sarnold } 5418073Sarnold prhand(ph, pnum, Playwin, FALSE); 5428073Sarnold prhand(ch, cnum, Compwin, TRUE); 5438072Sarnold prtable(sum); 5447871Sarnold if (last) 5457871Sarnold if (played) { 5467871Sarnold msg(quiet ? "I get one for last" : "I get one point for last"); 54712315Sarnold do_wait(); 5487871Sarnold if (chkscr(&cscore, 1)) 5497871Sarnold return TRUE; 5507706Sarnold } 5517871Sarnold else { 5527871Sarnold msg(quiet ? "You get one for last" : 5537871Sarnold "You get one point for last"); 5547871Sarnold if (chkscr(&pscore, 1)) 5557871Sarnold return TRUE; 5567706Sarnold } 5577871Sarnold return FALSE; 5587706Sarnold } 5597706Sarnold 5607871Sarnold /* 5617871Sarnold * prtable: 5627871Sarnold * Print out the table with the current score 5637871Sarnold */ 5647871Sarnold prtable(score) 5657871Sarnold int score; 5667871Sarnold { 5678073Sarnold prhand(Table, Tcnt, Tablewin, FALSE); 5687871Sarnold mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); 5697871Sarnold wrefresh(Tablewin); 5707871Sarnold } 5717706Sarnold 5727706Sarnold /* 5737871Sarnold * score: 5747871Sarnold * Handle the scoring of the hands 5757706Sarnold */ 5767871Sarnold score(mycrib) 5777871Sarnold BOOLEAN mycrib; 5787706Sarnold { 5797871Sarnold sorthand(crib, CINHAND); 5807871Sarnold if (mycrib) { 5817871Sarnold if (plyrhand(phand, "hand")) 5827871Sarnold return TRUE; 5837871Sarnold if (comphand(chand, "hand")) 5847871Sarnold return TRUE; 58512315Sarnold do_wait(); 5867871Sarnold if (comphand(crib, "crib")) 5877871Sarnold return TRUE; 5887706Sarnold } 5897871Sarnold else { 5907871Sarnold if (comphand(chand, "hand")) 5917871Sarnold return TRUE; 5927871Sarnold if (plyrhand(phand, "hand")) 5937871Sarnold return TRUE; 5947871Sarnold if (plyrhand(crib, "crib")) 5957871Sarnold return TRUE; 5967706Sarnold } 5977871Sarnold return FALSE; 5987706Sarnold } 599