void trade() { int tradee, i; trading = TRUE; for (i = 0; i < 2; i++) { trades[i].cash = 0; trades[i].gojf = FALSE; trades[i].prop_list = NULL; } over: if (num_play == 1) { printf("There ain't no-one around to trade WITH!!\n"); return; } if (num_play > 2) { tradee = getinp("Which player do you wish to trade with? ", name_list); if (tradee == num_play) return; if (tradee == player) { printf("You can't trade with yourself!\n"); goto over; } } else tradee = 1 - player; get_list(0, player); get_list(1, tradee); if (getyn("Do you wish a summary? ") == 0) summate(); if (getyn("Is the trade ok? ") == 0) do_trade(); }
/* * This routine lets a player resign */ void resign(void) { int i, new_own; OWN *op; SQUARE *sqp; if (cur_p->money <= 0) { switch (board[cur_p->loc].type) { case UTIL: case RR: case PRPTY: new_own = board[cur_p->loc].owner; /* If you ran out of money by buying current location */ if (new_own == player) new_own = num_play; break; default: /* Chance, taxes, etc */ new_own = num_play; break; } if (new_own == num_play) printf("You would resign to the bank\n"); else printf("You would resign to %s\n", name_list[new_own]); } else if (num_play == 1) { new_own = num_play; printf("You would resign to the bank\n"); } else { name_list[num_play] = "bank"; do { new_own = getinp("Who do you wish to resign to? ", name_list); if (new_own == player) printf("You can't resign to yourself!!\n"); } while (new_own == player); name_list[num_play] = "done"; } if (getyn("Do you really want to resign? ") != 0) return; if (num_play == 1) { printf("Then NOBODY wins (not even YOU!)\n"); exit(0); } if (new_own < num_play) { /* resign to player */ printf("resigning to player\n"); trades[0].trader = new_own; trades[0].cash = trades[0].gojf = 0; trades[0].prop_list = NULL; trades[1].trader = player; trades[1].cash = cur_p->money > 0 ? cur_p->money : 0; trades[1].gojf = cur_p->num_gojf; trades[1].prop_list = cur_p->own_list; do_trade(); } else { /* resign to bank */ printf("resigning to bank\n"); for (op = cur_p->own_list; op; op = op->next) { sqp = op->sqr; sqp->owner = -1; sqp->desc->morg = FALSE; if (sqp->type == PRPTY) { is_not_monop(sqp->desc->mon_desc); sqp->desc->houses = 0; } } if (cur_p->num_gojf) ret_card(cur_p); } free(play[player].name); for (i = player; i < num_play; i++) { name_list[i] = name_list[i+1]; if (i + 1 < num_play) play[i] = play[i+1]; } name_list[num_play--] = NULL; for (i = 0; i < N_SQRS; i++) if (board[i].owner > player) --board[i].owner; player = player == 0 ? num_play - 1 : player - 1; next_play(); if (num_play < 2) { printf("\nThen %s WINS!!!!!\n", play[0].name); printhold(0); printf("That's a grand worth of $%d.\n", play[0].money+prop_worth(&play[0])); exit(0); } }