/* * This routine summates the trade. */ static void summate(void) { bool some; int i; TRADE *tp; OWN *op; for (i = 0; i < 2; i++) { tp = &trades[i]; some = FALSE; printf("Player %s (%d) gives:\n", play[tp->trader].name, tp->trader+1); if (tp->cash > 0) printf("\t$%d\n", tp->cash), some++; if (tp->gojf > 0) printf("\t%d get-out-of-jail-free card(s)\n", tp->gojf), some++; if (tp->prop_list) { for (op = tp->prop_list; op; op = op->next) putchar('\t'), printsq(sqnum(op->sqr), TRUE); some++; } if (!some) printf("\t-- Nothing --\n"); } }
/* * This routine does a switch from one player to another */ static void move_em(TRADE *from, TRADE *to) { PLAY *pl_fr, *pl_to; OWN *op; pl_fr = &play[from->trader]; pl_to = &play[to->trader]; pl_fr->money -= from->cash; pl_to->money += from->cash; pl_fr->num_gojf -= from->gojf; pl_to->num_gojf += from->gojf; for (op = from->prop_list; op; op = op->next) { add_list(to->trader, &(pl_to->own_list), sqnum(op->sqr)); op->sqr->owner = to->trader; del_list(from->trader, &(pl_fr->own_list), sqnum(op->sqr)); } set_ownlist(to->trader); }
/* * This routine gets the list of things to be trader for the * player, and puts in the structure given. */ static void get_list(int struct_no, int play_no) { int sn, pn; PLAY *pp; int numin, propnum, num_prp; OWN *op; TRADE *tp; for (numin = 0; numin < MAX_PRP; numin++) used[numin] = FALSE; sn = struct_no, pn = play_no; pp = &play[pn]; tp = &trades[sn]; tp->trader = pn; printf("player %s (%d):\n", pp->name, pn+1); if (pp->own_list) { numin = set_list(pp->own_list); for (num_prp = numin; num_prp; ) { propnum=getinp("Which property do you wish to trade? ", plist); if (propnum == numin) break; else if (used[propnum]) printf("You've already allocated that.\n"); else { num_prp--; used[propnum] = TRUE; for (op = pp->own_list; propnum--; op = op->next) continue; add_list(pn, &(tp->prop_list), sqnum(op->sqr)); } } } if (pp->money > 0) { printf("You have $%d. ", pp->money); tp->cash = get_int("How much are you trading? "); } if (pp->num_gojf > 0) { once_more: printf("You have %d get-out-of-jail-free cards. ",pp->num_gojf); tp->gojf = get_int("How many are you trading? "); if (tp->gojf > pp->num_gojf) { printf("You don't have that many. Try again.\n"); goto once_more; } } }
/* * This routine sets up the list of mortgageable property */ set_mlist() { reg OWN *op; num_good = 0; for (op = cur_p->own_list; op; op = op->next) if (!op->sqr->desc->morg) if (op->sqr->type == PRPTY && op->sqr->desc->houses) got_houses++; else { names[num_good] = op->sqr->name; square[num_good++] = sqnum(op->sqr); } names[num_good++] = "done"; names[num_good--] = 0; return num_good; }
// This routine calculates the value for sorting of the given square. static int value(SQUARE * sqp) { int sqr = sqnum(sqp); switch (sqp->type) { case SAFE: return 0; default: // Specials, etc return 1; case UTIL: if (sqr == 12) return 2; else return 3; case RR: return 4 + sqr / 10; case PRPTY: return 8 + (sqp->desc) - prop; } }