home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume4 / nobs / human.c < prev    next >
C/C++ Source or Header  |  1988-03-24  |  2KB  |  111 lines

  1. #include "defs.h"
  2. #include "globs.h"
  3. #include "window.h"
  4. #ifdef BSD
  5. #include <ctype.h>
  6. #define beep()    putchar('\007')
  7. #endif
  8.  
  9. humandiscard(hand, mydeal)
  10. CARD hand[];
  11. int mydeal;
  12. {
  13.     char selected[6];
  14.     int nselected;
  15.     int j, j1, j2;
  16.     char k;
  17.     for (j=0; j<6; j++) mvwaddch(Select, 0, 5*j+2, 'a'+j);
  18.     wrefresh(Select);
  19.     mvwprintw(
  20.     Prompt, 0, 0, mydeal? "It is your crib.\n": "It is my crib.\n");
  21.     mvwprintw(Prompt, 1, 0, "Select 2 cards.  Type RETURN to discard.\n");
  22.     for (j=0; j<6; j++) selected[j]=0;
  23.     nselected = 0;
  24.     for (;;) {
  25.         mvwaddch(Prompt, 1, 41, '\n');
  26.         wmove(Prompt, 1, 41);
  27.         wrefresh(Prompt);
  28.         k = wgetch(Prompt);
  29.         k = (isupper(k) ? tolower(k) : k);
  30.         if ('\n'==k) {
  31.             if (nselected == 2) break;
  32.             beep();
  33.             continue;
  34.         }
  35.         if (k > 'f' || k < 'a') {
  36.             beep();
  37.             continue;
  38.         }
  39.         nselected -= selected[k-'a'];
  40.         nselected += (selected[k-'a'] ^= 1);
  41.         mvwaddch(Humanhand, 2, 5*(k-'a')+3,
  42.             selected[k-'a']? '*': ' ');
  43.         wrefresh(Humanhand);
  44.     }
  45.     wclear(Select);
  46.     wclear(Prompt);
  47.     wrefresh(Select);
  48.     wrefresh(Prompt);
  49.     for (j=0; j<6; j++) if (selected[j]) {
  50.         j1 = j2;    /* and you know Lint won't like this! */
  51.         j2 = j;
  52.     }
  53.     makediscard(hand, j1, j2);
  54. }
  55.  
  56. humanplay()
  57. {
  58.     char k;
  59.     int sco;
  60.     if (whosego == whoseturn) {
  61. /*
  62.  *    It is my go.  Can I play?
  63.  */
  64.         if (goodgo(whoseturn)) {
  65.             SCOREUP(whoseturn, 1);
  66.             resetgo();
  67.             handover = !nleft[0] && !nleft[1];
  68.             return;
  69.         }
  70.         else mvwprintw(Prompt, 1, 0, "Select a card.\n");
  71.     }
  72.     else if (!nleft[whoseturn]) {
  73.         handover = !nleft[0] && !nleft[1];
  74.         if (handover) SCOREUP(whoseturn, 1);
  75.         return;
  76.     }
  77.     else if (whosego == !whoseturn) return;
  78.     else mvwprintw(Prompt, 1, 0, "Select a card, or type \"g\" for go.");
  79.     for (;;) {
  80.         mvwaddch(Prompt, 1, 41, '\n');
  81.         wrefresh(Prompt);
  82.         k = wgetch(Prompt);
  83.         k = (isupper(k) ? tolower(k) : k);
  84.         if (k == 'g') {
  85.             if (goodgo(whoseturn)) {
  86.                 whosego = !whoseturn;
  87.                 return;
  88.             }
  89.             else beep();
  90.         }
  91.         else if (k < 'a' || k > 'd') beep();
  92.         else if (goodplay(whoseturn, k-'a')) break;
  93.         else beep();
  94.     }
  95.     werase(Prompt);
  96.     played[whoseturn][k-'a'] = 1;
  97.     count += rankvalue[RANK(hand[whoseturn][k-'a'])];
  98.     go[gocount++] = hand[whoseturn][k-'a'];
  99.     nleft[whoseturn] -= 1;
  100.     sco = playscore();
  101.     showhplay(k-'a', sco);
  102.     if (sco) SCOREUP(whoseturn, sco);
  103.     handover = !nleft[0] && !nleft[1];
  104.     if (count==31) resetgo();
  105.     else if (handover) {
  106.         mvwprintw(Prompt, 0, 0, "That's a Go\n");
  107.         SCOREUP(whoseturn, 1);
  108.     }
  109.     sleep(1);
  110. }
  111.