|
|
1.1 root 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: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: static char sccsid[] = "@(#)houses.c 5.5 (Berkeley) 6/1/90";
22: #endif /* not lint */
23:
24: # include "monop.ext"
25:
26: static char *names[N_MON+2],
27: cur_prop[80];
28:
29: static MON *monops[N_MON];
30:
31: /*
32: * These routines deal with buying and selling houses
33: */
34: buy_houses() {
35:
36: reg int num_mon;
37: reg MON *mp;
38: reg OWN *op;
39: bool good,got_morg;
40: int i,p;
41:
42: over:
43: num_mon = 0;
44: good = TRUE;
45: got_morg = FALSE;
46: for (op = cur_p->own_list; op && op->sqr->type != PRPTY; op = op->next)
47: continue;
48: while (op)
49: if (op->sqr->desc->monop) {
50: mp = op->sqr->desc->mon_desc;
51: names[num_mon] = (monops[num_mon]=mp)->name;
52: num_mon++;
53: got_morg = good = FALSE;
54: for (i = 0; i < mp->num_in; i++) {
55: if (op->sqr->desc->morg)
56: got_morg++;
57: if (op->sqr->desc->houses != 5)
58: good++;
59: op = op->next;
60: }
61: if (!good || got_morg)
62: --num_mon;
63: }
64: else
65: op = op->next;
66: if (num_mon == 0) {
67: if (got_morg)
68: printf("You can't build on mortgaged monopolies.\n");
69: else if (!good)
70: printf("You can't build any more.\n");
71: else
72: printf("But you don't have any monopolies!!\n");
73: return;
74: }
75: if (num_mon == 1)
76: buy_h(monops[0]);
77: else {
78: names[num_mon++] = "done";
79: names[num_mon--] = 0;
80: if ((p=getinp("Which property do you wish to buy houses for? ", names)) == num_mon)
81: return;
82: buy_h(monops[p]);
83: goto over;
84: }
85: }
86:
87: buy_h(mnp)
88: MON *mnp; {
89:
90: reg int i;
91: reg MON *mp;
92: reg int price;
93: shrt input[3],temp[3];
94: int tot;
95: PROP *pp;
96:
97: mp = mnp;
98: price = mp->h_cost * 50;
99: blew_it:
100: list_cur(mp);
101: printf("Houses will cost $%d\n", price);
102: printf("How many houses do you wish to buy for\n");
103: for (i = 0; i < mp->num_in; i++) {
104: pp = mp->sq[i]->desc;
105: over:
106: if (pp->houses == 5) {
107: printf("%s (H):\n", mp->sq[i]->name);
108: input[i] = 0;
109: temp[i] = 5;
110: continue;
111: }
112: (void)sprintf(cur_prop, "%s (%d): ",
113: mp->sq[i]->name, pp->houses);
114: input[i] = get_int(cur_prop);
115: temp[i] = input[i] + pp->houses;
116: if (temp[i] > 5) {
117: printf("That's too many. The most you can buy is %d\n",
118: 5 - pp->houses);
119: goto over;
120: }
121: }
122: if (mp->num_in == 3 && (abs(temp[0] - temp[1]) > 1 ||
123: abs(temp[0] - temp[2]) > 1 || abs(temp[1] - temp[2]) > 1)) {
124: err: printf("That makes the spread too wide. Try again\n");
125: goto blew_it;
126: }
127: else if (mp->num_in == 2 && abs(temp[0] - temp[1]) > 1)
128: goto err;
129: for (tot = i = 0; i < mp->num_in; i++)
130: tot += input[i];
131: if (tot) {
132: printf("You asked for %d houses for $%d\n", tot, tot * price);
133: if (getyn("Is that ok? ", yn) == 0) {
134: cur_p->money -= tot * price;
135: for (tot = i = 0; i < mp->num_in; i++)
136: mp->sq[i]->desc->houses = temp[i];
137: }
138: }
139: }
140:
141: /*
142: * This routine sells houses.
143: */
144: sell_houses() {
145:
146: reg int num_mon;
147: reg MON *mp;
148: reg OWN *op;
149: bool good;
150: int p;
151:
152: over:
153: num_mon = 0;
154: good = TRUE;
155: for (op = cur_p->own_list; op; op = op->next)
156: if (op->sqr->type == PRPTY && op->sqr->desc->monop) {
157: mp = op->sqr->desc->mon_desc;
158: names[num_mon] = (monops[num_mon]=mp)->name;
159: num_mon++;
160: good = 0;
161: do
162: if (!good && op->sqr->desc->houses != 0)
163: good++;
164: while (op->next && op->sqr->desc->mon_desc == mp
165: && (op=op->next));
166: if (!good)
167: --num_mon;
168: }
169: if (num_mon == 0) {
170: printf("You don't have any houses to sell!!\n");
171: return;
172: }
173: if (num_mon == 1)
174: sell_h(monops[0]);
175: else {
176: names[num_mon++] = "done";
177: names[num_mon--] = 0;
178: if ((p=getinp("Which property do you wish to sell houses from? ", names)) == num_mon)
179: return;
180: sell_h(monops[p]);
181: notify();
182: goto over;
183: }
184: }
185:
186: sell_h(mnp)
187: MON *mnp; {
188:
189: reg int i;
190: reg MON *mp;
191: reg int price;
192: shrt input[3],temp[3];
193: int tot;
194: PROP *pp;
195:
196: mp = mnp;
197: price = mp->h_cost * 25;
198: blew_it:
199: printf("Houses will get you $%d apiece\n", price);
200: list_cur(mp);
201: printf("How many houses do you wish to sell from\n");
202: for (i = 0; i < mp->num_in; i++) {
203: pp = mp->sq[i]->desc;
204: over:
205: if (pp->houses == 0) {
206: printf("%s (0):\n", mp->sq[i]->name);
207: input[i] = temp[i] = 0;
208: continue;
209: }
210: if (pp->houses < 5)
211: (void)sprintf(cur_prop,"%s (%d): ",
212: mp->sq[i]->name,pp->houses);
213: else
214: (void)sprintf(cur_prop,"%s (H): ",mp->sq[i]->name);
215: input[i] = get_int(cur_prop);
216: temp[i] = pp->houses - input[i];
217: if (temp[i] < 0) {
218: printf("That's too many. The most you can sell is %d\n", pp->houses);
219: goto over;
220: }
221: }
222: if (mp->num_in == 3 && (abs(temp[0] - temp[1]) > 1 ||
223: abs(temp[0] - temp[2]) > 1 || abs(temp[1] - temp[2]) > 1)) {
224: err: printf("That makes the spread too wide. Try again\n");
225: goto blew_it;
226: }
227: else if (mp->num_in == 2 && abs(temp[0] - temp[1]) > 1)
228: goto err;
229: for (tot = i = 0; i < mp->num_in; i++)
230: tot += input[i];
231: if (tot) {
232: printf("You asked to sell %d houses for $%d\n",tot,tot * price);
233: if (getyn("Is that ok? ", yn) == 0) {
234: cur_p->money += tot * price;
235: for (tot = i = 0; i < mp->num_in; i++)
236: mp->sq[i]->desc->houses = temp[i];
237: }
238: }
239: }
240:
241: list_cur(mp)
242: reg MON *mp; {
243:
244: reg int i;
245: reg SQUARE *sqp;
246:
247: for (i = 0; i < mp->num_in; i++) {
248: sqp = mp->sq[i];
249: if (sqp->desc->houses == 5)
250: printf("%s (H) ", sqp->name);
251: else
252: printf("%s (%d) ", sqp->name, sqp->desc->houses);
253: }
254: putchar('\n');
255: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.