Annotation of src/games/monop/morg.c, Revision 1.15
1.15 ! dholland 1: /* $NetBSD: morg.c,v 1.14 2008/02/20 05:08:46 dholland Exp $ */
1.4 cgd 2:
1.1 cgd 3: /*
1.4 cgd 4: * Copyright (c) 1980, 1993
5: * The Regents of the University of California. All rights reserved.
1.1 cgd 6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
1.9 agc 15: * 3. Neither the name of the University nor the names of its contributors
1.1 cgd 16: * may be used to endorse or promote products derived from this software
17: * without specific prior written permission.
18: *
19: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29: * SUCH DAMAGE.
30: */
31:
1.5 christos 32: #include <sys/cdefs.h>
1.1 cgd 33: #ifndef lint
1.4 cgd 34: #if 0
35: static char sccsid[] = "@(#)morg.c 8.1 (Berkeley) 5/31/93";
36: #else
1.15 ! dholland 37: __RCSID("$NetBSD: morg.c,v 1.14 2008/02/20 05:08:46 dholland Exp $");
1.4 cgd 38: #endif
1.1 cgd 39: #endif /* not lint */
40:
1.7 simonb 41: #include "monop.ext"
1.1 cgd 42:
43: /*
44: * These routines deal with mortgaging.
45: */
46:
1.8 jsm 47: static const char *names[MAX_PRP+2],
48: *const morg_coms[] = {
1.1 cgd 49: "quit", /* 0 */
50: "print", /* 1 */
51: "where", /* 2 */
52: "own holdings", /* 3 */
53: "holdings", /* 4 */
1.3 mycroft 54: "mortgage", /* 5 */
55: "unmortgage", /* 6 */
56: "buy", /* 7 */
57: "sell", /* 8 */
58: "card", /* 9 */
59: "pay", /* 10 */
60: "trade", /* 11 */
61: "resign", /* 12 */
62: "save game", /* 13 */
63: "restore game", /* 14 */
1.1 cgd 64: 0
65: };
66:
1.5 christos 67: static short square[MAX_PRP+2];
1.1 cgd 68:
1.14 dholland 69: static int num_good, got_houses;
1.1 cgd 70:
1.5 christos 71:
1.10 jsm 72: static int set_mlist(void);
73: static void m(int);
74: static int set_umlist(void);
75: static void unm(int);
1.5 christos 76:
1.1 cgd 77: /*
78: * This routine is the command level response the mortgage command.
79: * it gets the list of mortgageable property and asks which are to
80: * be mortgaged.
81: */
1.5 christos 82: void
83: mortgage()
84: {
1.11 dholland 85: int propnum;
1.1 cgd 86:
87: for (;;) {
88: if (set_mlist() == 0) {
89: if (got_houses)
1.7 simonb 90: printf("You can't mortgage property with "
91: "houses on it.\n");
1.1 cgd 92: else
1.7 simonb 93: printf("You don't have any un-mortgaged "
94: "property.\n");
1.1 cgd 95: return;
96: }
97: if (num_good == 1) {
1.7 simonb 98: printf("Your only mortageable property is %s\n",
99: names[0]);
1.1 cgd 100: if (getyn("Do you want to mortgage it? ") == 0)
101: m(square[0]);
102: return;
103: }
1.11 dholland 104: propnum = getinp("Which property do you want to mortgage? ",
105: names);
106: if (propnum == num_good)
1.1 cgd 107: return;
1.11 dholland 108: m(square[propnum]);
1.5 christos 109: notify();
1.1 cgd 110: }
111: }
1.7 simonb 112:
1.1 cgd 113: /*
114: * This routine sets up the list of mortgageable property
115: */
1.5 christos 116: static int
117: set_mlist()
118: {
1.7 simonb 119: OWN *op;
1.1 cgd 120:
121: num_good = 0;
122: for (op = cur_p->own_list; op; op = op->next)
1.6 veego 123: if (!op->sqr->desc->morg) {
1.1 cgd 124: if (op->sqr->type == PRPTY && op->sqr->desc->houses)
125: got_houses++;
126: else {
127: names[num_good] = op->sqr->name;
128: square[num_good++] = sqnum(op->sqr);
129: }
1.6 veego 130: }
1.1 cgd 131: names[num_good++] = "done";
132: names[num_good--] = 0;
133: return num_good;
134: }
1.7 simonb 135:
1.1 cgd 136: /*
137: * This routine actually mortgages the property.
138: */
1.5 christos 139: static void
1.12 dholland 140: m(propnum)
141: int propnum;
1.5 christos 142: {
1.7 simonb 143: int price;
1.1 cgd 144:
1.12 dholland 145: price = board[propnum].cost/2;
146: board[propnum].desc->morg = TRUE;
1.1 cgd 147: printf("That got you $%d\n",price);
148: cur_p->money += price;
149: }
1.7 simonb 150:
1.1 cgd 151: /*
152: * This routine is the command level repsponse to the unmortgage
153: * command. It gets the list of mortgaged property and asks which are
154: * to be unmortgaged.
155: */
1.5 christos 156: void
1.13 dholland 157: unmortgage()
1.5 christos 158: {
1.12 dholland 159: int propnum;
1.1 cgd 160:
161: for (;;) {
162: if (set_umlist() == 0) {
163: printf("You don't have any mortgaged property.\n");
164: return;
165: }
166: if (num_good == 1) {
167: printf("Your only mortaged property is %s\n",names[0]);
168: if (getyn("Do you want to unmortgage it? ") == 0)
169: unm(square[0]);
170: return;
171: }
1.12 dholland 172: propnum = getinp("Which property do you want to unmortgage? ",
1.7 simonb 173: names);
1.12 dholland 174: if (propnum == num_good)
1.1 cgd 175: return;
1.12 dholland 176: unm(square[propnum]);
1.1 cgd 177: }
178: }
1.7 simonb 179:
1.1 cgd 180: /*
181: * This routine sets up the list of mortgaged property
182: */
1.5 christos 183: static int
184: set_umlist()
185: {
1.7 simonb 186: OWN *op;
1.1 cgd 187:
188: num_good = 0;
189: for (op = cur_p->own_list; op; op = op->next)
190: if (op->sqr->desc->morg) {
191: names[num_good] = op->sqr->name;
192: square[num_good++] = sqnum(op->sqr);
193: }
194: names[num_good++] = "done";
195: names[num_good--] = 0;
196: return num_good;
197: }
1.7 simonb 198:
1.1 cgd 199: /*
200: * This routine actually unmortgages the property
201: */
1.5 christos 202: static void
1.12 dholland 203: unm(propnum)
204: int propnum;
1.5 christos 205: {
1.7 simonb 206: int price;
1.1 cgd 207:
1.12 dholland 208: price = board[propnum].cost/2;
209: board[propnum].desc->morg = FALSE;
1.1 cgd 210: price += price/10;
211: printf("That cost you $%d\n",price);
212: cur_p->money -= price;
213: set_umlist();
214: }
1.7 simonb 215:
1.1 cgd 216: /*
217: * This routine forces the indebted player to fix his
1.15 ! dholland 218: * financial woes. It is fine to have $0 but not to be in debt.
1.1 cgd 219: */
1.5 christos 220: void
221: force_morg()
222: {
1.1 cgd 223: told_em = fixing = TRUE;
1.15 ! dholland 224: while (cur_p->money < 0) {
! 225: told_em = FALSE;
! 226: (*func[(getinp("How are you going to fix it up? ", morg_coms))])();
! 227: notify();
! 228: }
1.1 cgd 229: fixing = FALSE;
230: }
CVSweb <webmaster@jp.NetBSD.org>