home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / mille / print.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  4.6 KB  |  170 lines

  1. /*
  2.  * Copyright (c) 1982 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. static char sccsid[] = "@(#)print.c    5.4 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. # include    "mille.h"
  39.  
  40. /*
  41.  * @(#)print.c    1.1 (Berkeley) 4/1/82
  42.  */
  43.  
  44. # define    COMP_STRT    20
  45. # define    CARD_STRT    2
  46.  
  47. prboard() {
  48.  
  49.     reg PLAY    *pp;
  50.     reg int        i, j, k, temp;
  51.  
  52.     for (k = 0; k < 2; k++) {
  53.         pp = &Player[k];
  54.         temp = k * COMP_STRT + CARD_STRT;
  55.         for (i = 0; i < NUM_SAFE; i++)
  56.             if (pp->safety[i] == S_PLAYED && !pp->sh_safety[i]) {
  57.                 mvaddstr(i, temp, C_name[i + S_CONV]);
  58.                 if (pp->coups[i])
  59.                     mvaddch(i, temp - CARD_STRT, '*');
  60.                 pp->sh_safety[i] = TRUE;
  61.             }
  62.         show_card(14, temp, pp->battle, &pp->sh_battle);
  63.         show_card(16, temp, pp->speed, &pp->sh_speed);
  64.         for (i = C_25; i <= C_200; i++) {
  65.             reg char    *name;
  66.             reg int        end;
  67.  
  68.             if (pp->nummiles[i] == pp->sh_nummiles[i])
  69.                 continue;
  70.  
  71.             name = C_name[i];
  72.             temp = k * 40;
  73.             end = pp->nummiles[i];
  74.             for (j = pp->sh_nummiles[i]; j < end; j++)
  75.                 mvwaddstr(Miles, i + 1, (j << 2) + temp, name);
  76.             pp->sh_nummiles[i] = end;
  77.         }
  78.     }
  79.     prscore(TRUE);
  80.     temp = CARD_STRT;
  81.     pp = &Player[PLAYER];
  82.     for (i = 0; i < HAND_SZ; i++)
  83.         show_card(i + 6, temp, pp->hand[i], &pp->sh_hand[i]);
  84.     mvprintw(6, COMP_STRT + CARD_STRT, "%2d", Topcard - Deck);
  85.     show_card(8, COMP_STRT + CARD_STRT, Discard, &Sh_discard);
  86.     if (End == 1000) {
  87.         move(EXT_Y, EXT_X);
  88.         standout();
  89.         addstr("Extension");
  90.         standend();
  91.     }
  92.     wrefresh(Board);
  93.     wrefresh(Miles);
  94.     wrefresh(Score);
  95. }
  96.  
  97. /*
  98.  * show_card:
  99.  *    Show the given card if it is different from the last one shown
  100.  */
  101. show_card(y, x, c, lc)
  102. int        y, x;
  103. register CARD    c, *lc;
  104. {
  105.     if (c == *lc)
  106.         return;
  107.  
  108.     mvprintw(y, x, C_fmt, C_name[c]);
  109.     *lc = c;
  110. }
  111.  
  112. static char    Score_fmt[] = "%4d";
  113.  
  114. prscore(for_real)
  115. reg bool    for_real; {
  116.  
  117.     reg PLAY    *pp;
  118.     reg int        x;
  119.  
  120.     stdscr = Score;
  121.     for (pp = Player; pp < &Player[2]; pp++) {
  122.         x = (pp - Player) * 6 + 21;
  123.         show_score(1, x, pp->mileage, &pp->sh_mileage);
  124.         if (pp->safescore != pp->sh_safescore) {
  125.             mvprintw(2, x, Score_fmt, pp->safescore);
  126.             if (pp->safescore == 400)
  127.                 mvaddstr(3, x + 1, "300");
  128.             else
  129.                 mvaddstr(3, x + 1, "  0");
  130.             mvprintw(4, x, Score_fmt, pp->coupscore);
  131.             pp->sh_safescore = pp->safescore;
  132.         }
  133.         if (Window == W_FULL || Finished) {
  134. #ifdef EXTRAP
  135.             if (for_real)
  136.                 finalscore(pp);
  137.             else
  138.                 extrapolate(pp);
  139. #else
  140.             finalscore(pp);
  141. #endif
  142.             show_score(11, x, pp->hand_tot, &pp->sh_hand_tot);
  143.             show_score(13, x, pp->total, &pp->sh_total);
  144.             show_score(14, x, pp->games, &pp->sh_games);
  145.         }
  146.         else {
  147.             show_score(6, x, pp->hand_tot, &pp->sh_hand_tot);
  148.             show_score(8, x, pp->total, &pp->sh_total);
  149.             show_score(9, x, pp->games, &pp->sh_games);
  150.         }
  151.     }
  152.     stdscr = Board;
  153. }
  154.  
  155. /*
  156.  * show_score:
  157.  *    Show a score value if it is different from the last time we
  158.  *    showed it.
  159.  */
  160. show_score(y, x, s, ls)
  161. int        y, x;
  162. register int    s, *ls;
  163. {
  164.     if (s == *ls)
  165.         return;
  166.  
  167.     mvprintw(y, x, Score_fmt, s);
  168.     *ls = s;
  169. }
  170.