xref: /original-bsd/games/monop/print.c (revision b424313c)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #ifndef lint
19 static char sccsid[] = "@(#)print.c	5.3 (Berkeley) 06/18/88";
20 #endif /* not lint */
21 
22 # include	"monop.ext"
23 
24 static char	buf[80],		/* output buffer		*/
25 		*header	= "Name      Own      Price Mg # Rent";
26 
27 /*
28  *	This routine prints out the current board
29  */
30 printboard() {
31 
32 	reg int	i;
33 
34 	printf("%s\t%s\n", header, header);
35 	for (i = 0; i < N_SQRS/2; i++) {
36 		printsq(i, FALSE);
37 		putchar('\t');
38 		printsq(i+N_SQRS/2, TRUE);
39 	}
40 }
41 /*
42  *	This routine lists where each player is.
43  */
44 where() {
45 
46 	reg int	i;
47 	char	*bsp;
48 
49 	printf("%s Player\n", header);
50 	for (i = 0; i < num_play; i++) {
51 		printsq(play[i].loc, FALSE);
52 		printf(" %s (%d)", play[i].name, i+1);
53 		if (cur_p == &play[i])
54 			printf(" *");
55 		putchar('\n');
56 	}
57 }
58 /*
59  *	This routine prints out an individual square
60  */
61 printsq(sqn, eoln)
62 int		sqn;
63 reg bool	eoln; {
64 
65 	reg int		rnt;
66 	reg PROP	*pp;
67 	reg SQUARE	*sqp;
68 	int		i;
69 
70 	sqp = &board[sqn];
71 	printf("%-10.10s", sqp->name);
72 	switch (sqp->type) {
73 	  case SAFE:
74 	  case CC:
75 	  case CHANCE:
76 	  case INC_TAX:
77 	  case GOTO_J:
78 	  case LUX_TAX:
79 	  case IN_JAIL:
80 spec:
81 		if (!eoln)
82 			printf("                        ");
83 		break;
84 	  case PRPTY:
85 		pp = sqp->desc;
86 		if (sqp->owner < 0) {
87 			printf(" - %-8.8s %3d", pp->mon_desc->name, sqp->cost);
88 			if (!eoln)
89 				printf("         ");
90 			break;
91 		}
92 		printf(" %d %-8.8s %3d", sqp->owner+1, pp->mon_desc->name,
93 			sqp->cost);
94 		printmorg(sqp);
95 		if (pp->monop) {
96 			if (pp->houses < 5)
97 				if (pp->houses > 0)
98 					printf("%d %4d", pp->houses,
99 						pp->rent[pp->houses]);
100 				else
101 					printf("0 %4d", pp->rent[0] * 2);
102 			else
103 				printf("H %4d", pp->rent[5]);
104 		}
105 		else
106 			printf("  %4d", pp->rent[0]);
107 		break;
108 	  case UTIL:
109 		if (sqp->owner < 0) {
110 			printf(" -          150");
111 			if (!eoln)
112 				printf("         ");
113 			break;
114 		}
115 		printf(" %d          150", sqp->owner+1);
116 		printmorg(sqp);
117 		printf("%d", play[sqp->owner].num_util);
118 		if (!eoln)
119 			printf("    ");
120 		break;
121 	  case RR:
122 		if (sqp->owner < 0) {
123 			printf(" - Railroad 200");
124 			if (!eoln)
125 				printf("         ");
126 			break;
127 		}
128 		printf(" %d Railroad 200", sqp->owner+1);
129 		printmorg(sqp);
130 		rnt = 25;
131 		rnt <<= play[sqp->owner].num_rr - 1;
132 		printf("%d %4d", play[sqp->owner].num_rr, 25 << (play[sqp->owner].num_rr - 1));
133 		break;
134 	}
135 	if (eoln)
136 		putchar('\n');
137 }
138 /*
139  *	This routine prints out the mortgage flag.
140  */
141 printmorg(sqp)
142 reg SQUARE	*sqp; {
143 
144 	if (sqp->desc->morg)
145 		printf(" * ");
146 	else
147 		printf("   ");
148 }
149 /*
150  *	This routine lists the holdings of the player given
151  */
152 printhold(pl)
153 reg int	pl; {
154 
155 	reg OWN		*op;
156 	reg PLAY	*pp;
157 	char		*bsp;
158 
159 	pp = &play[pl];
160 	printf("%s's (%d) holdings (Total worth: $%d):\n", name_list[pl], pl+1,
161 		pp->money + prop_worth(pp));
162 	printf("\t$%d", pp->money);
163 	if (pp->num_gojf) {
164 		printf(", %d get-out-of-jail-free card", pp->num_gojf);
165 		if (pp->num_gojf > 1)
166 			putchar('s');
167 	}
168 	putchar('\n');
169 	if (pp->own_list) {
170 		printf("\t%s\n", header);
171 		for (op = pp->own_list; op; op = op->next) {
172 			putchar('\t');
173 			printsq(sqnum(op->sqr), TRUE);
174 		}
175 	}
176 }
177