[BACK]Return to morg.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / games / monop

Annotation of src/games/monop/morg.c, Revision 1.18

1.18    ! dholland    1: /*     $NetBSD: morg.c,v 1.17 2008/02/24 02:55:20 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.18    ! dholland   37: __RCSID("$NetBSD: morg.c,v 1.17 2008/02/24 02:55:20 dholland Exp $");
1.4       cgd        38: #endif
1.1       cgd        39: #endif /* not lint */
                     40:
1.16      dholland   41: #include "monop.h"
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.17      dholland   98:                        printf("Your only mortgageable property is %s\n",
1.7       simonb     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) {
1.17      dholland  167:                        printf("Your only mortgaged property is %s\n",
                    168:                            names[0]);
1.1       cgd       169:                        if (getyn("Do you want to unmortgage it? ") == 0)
                    170:                                unm(square[0]);
                    171:                        return;
                    172:                }
1.12      dholland  173:                propnum = getinp("Which property do you want to unmortgage? ",
1.7       simonb    174:                    names);
1.12      dholland  175:                if (propnum == num_good)
1.1       cgd       176:                        return;
1.12      dholland  177:                unm(square[propnum]);
1.1       cgd       178:        }
                    179: }
1.7       simonb    180:
1.1       cgd       181: /*
                    182:  *     This routine sets up the list of mortgaged property
                    183:  */
1.5       christos  184: static int
                    185: set_umlist()
                    186: {
1.7       simonb    187:        OWN *op;
1.1       cgd       188:
                    189:        num_good = 0;
                    190:        for (op = cur_p->own_list; op; op = op->next)
                    191:                if (op->sqr->desc->morg) {
                    192:                        names[num_good] = op->sqr->name;
                    193:                        square[num_good++] = sqnum(op->sqr);
                    194:                }
                    195:        names[num_good++] = "done";
                    196:        names[num_good--] = 0;
                    197:        return num_good;
                    198: }
1.7       simonb    199:
1.1       cgd       200: /*
                    201:  *     This routine actually unmortgages the property
                    202:  */
1.5       christos  203: static void
1.18    ! dholland  204: unm(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;
1.18    ! dholland  213:        (void)set_umlist();
1.1       cgd       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
1.18    ! dholland  221: force_morg(void)
1.5       christos  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>