Annotation of 43BSDTahoe/games/monop/prop.c, revision 1.1.1.1

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 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[] = "@(#)prop.c     5.5 (Berkeley) 6/18/88";
                     20: #endif /* not lint */
                     21: 
                     22: # include      "monop.ext"
                     23: 
                     24: extern char *calloc();
                     25: 
                     26: /*
                     27:  *     This routine deals with buying property, setting all the
                     28:  * appropriate flags.
                     29:  */
                     30: buy(player, sqrp)
                     31: reg int                player;
                     32: reg SQUARE     *sqrp; {
                     33: 
                     34:        trading = FALSE;
                     35:        sqrp->owner = player;
                     36:        add_list(player, &(play[player].own_list), cur_p->loc);
                     37: }
                     38: /*
                     39:  *     This routine adds an item to the list.
                     40:  */
                     41: add_list(plr, head, op_sqr)
                     42: int    plr;
                     43: OWN    **head;
                     44: int    op_sqr; {
                     45: 
                     46:        reg int val;
                     47:        reg OWN *tp, *last_tp;
                     48:        MON     *mp;
                     49:        OWN     *op;
                     50: 
                     51:        op = (OWN *)calloc(1, sizeof (OWN));
                     52:        op->sqr = &board[op_sqr];
                     53:        val = value(op->sqr);
                     54:        last_tp = NULL;
                     55:        for (tp = *head; tp && value(tp->sqr) < val; tp = tp->next)
                     56:                if (val == value(tp->sqr)) {
                     57:                        cfree(op);
                     58:                        return;
                     59:                }
                     60:                else
                     61:                        last_tp = tp;
                     62:        op->next = tp;
                     63:        if (last_tp != NULL)
                     64:                last_tp->next = op;
                     65:        else
                     66:                *head = op;
                     67:        if (!trading)
                     68:                set_ownlist(plr);
                     69: }
                     70: /*
                     71:  *     This routine deletes property from the list.
                     72:  */
                     73: del_list(plr, head, op_sqr)
                     74: int    plr;
                     75: OWN    **head;
                     76: shrt   op_sqr; {
                     77: 
                     78:        reg int i;
                     79:        reg OWN *op, *last_op;
                     80: 
                     81:        switch (board[op_sqr].type) {
                     82:          case PRPTY:
                     83:                board[op_sqr].desc->mon_desc->num_own--;
                     84:                break;
                     85:          case RR:
                     86:                play[plr].num_rr--;
                     87:                break;
                     88:          case UTIL:
                     89:                play[plr].num_util--;
                     90:                break;
                     91:        }
                     92:        last_op = NULL;
                     93:        for (op = *head; op; op = op->next)
                     94:                if (op->sqr == &board[op_sqr])
                     95:                        break;
                     96:                else
                     97:                        last_op = op;
                     98:        if (last_op == NULL)
                     99:                *head = op->next;
                    100:        else {
                    101:                last_op->next = op->next;
                    102:                cfree(op);
                    103:        }
                    104: }
                    105: /*
                    106:  *     This routine calculates the value for sorting of the
                    107:  * given square.
                    108:  */
                    109: value(sqp)
                    110: reg SQUARE     *sqp; {
                    111: 
                    112:        reg int sqr;
                    113: 
                    114:        sqr = sqnum(sqp);
                    115:        switch (sqp->type) {
                    116:          case SAFE:
                    117:                return 0;
                    118:          default:              /* Specials, etc */
                    119:                return 1;
                    120:          case UTIL:
                    121:                if (sqr == 12)
                    122:                        return 2;
                    123:                else
                    124:                        return 3;
                    125:          case RR:
                    126:                return 4 + sqr/10;
                    127:          case PRPTY:
                    128:                return 8 + (sqp->desc) - prop;
                    129:        }
                    130: }
                    131: /*
                    132:  *     This routine accepts bids for the current peice
                    133:  * of property.
                    134:  */
                    135: bid() {
                    136: 
                    137:        static bool     in[MAX_PL];
                    138:        reg int         i, num_in, cur_max;
                    139:        char            buf[80];
                    140:        int             cur_bid;
                    141: 
                    142:        printf("\nSo it goes up for auction.  Type your bid after your name\n");
                    143:        for (i = 0; i < num_play; i++)
                    144:                in[i] = TRUE;
                    145:        i = -1;
                    146:        cur_max = 0;
                    147:        num_in = num_play;
                    148:        while (num_in > 1 || (cur_max == 0 && num_in > 0)) {
                    149:                i = ++i % num_play;
                    150:                if (in[i]) {
                    151:                        do {
                    152:                                (void)sprintf(buf, "%s: ", name_list[i]);
                    153:                                cur_bid = get_int(buf);
                    154:                                if (cur_bid == 0) {
                    155:                                        in[i] = FALSE;
                    156:                                        if (--num_in == 0)
                    157:                                                break;
                    158:                                }
                    159:                                else if (cur_bid <= cur_max) {
                    160:                                        printf("You must bid higher than %d to stay in\n", cur_max);
                    161:                                        printf("(bid of 0 drops you out)\n");
                    162:                                }
                    163:                        } while (cur_bid != 0 && cur_bid <= cur_max);
                    164:                        cur_max = (cur_bid ? cur_bid : cur_max);
                    165:                }
                    166:        }
                    167:        if (cur_max != 0) {
                    168:                while (!in[i])
                    169:                        i = ++i % num_play;
                    170:                printf("It goes to %s (%d) for $%d\n",play[i].name,i+1,cur_max);
                    171:                buy(i, &board[cur_p->loc]);
                    172:                play[i].money -= cur_max;
                    173:        }
                    174:        else
                    175:                printf("Nobody seems to want it, so we'll leave it for later\n");
                    176: }
                    177: /*
                    178:  *     This routine calculates the value of the property
                    179:  * of given player.
                    180:  */
                    181: prop_worth(plp)
                    182: reg PLAY       *plp; {
                    183: 
                    184:        reg OWN *op;
                    185:        reg int worth;
                    186: 
                    187:        worth = 0;
                    188:        for (op = plp->own_list; op; op = op->next) {
                    189:                if (op->sqr->type == PRPTY && op->sqr->desc->monop)
                    190:                        worth += op->sqr->desc->mon_desc->h_cost * 50 *
                    191:                            op->sqr->desc->houses;
                    192:                worth += op->sqr->cost;
                    193:        }
                    194:        return worth;
                    195: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.