132258Sbostic /* 234788Sbostic * Copyright (c) 1980 Regents of the University of California. 333202Sbostic * All rights reserved. 433202Sbostic * 5*42583Sbostic * %sccs.include.redist.c% 632258Sbostic */ 732258Sbostic 832258Sbostic #ifndef lint 933202Sbostic char copyright[] = 1034788Sbostic "@(#) Copyright (c) 1980 Regents of the University of California.\n\ 1133202Sbostic All rights reserved.\n"; 1233202Sbostic #endif /* not lint */ 1332258Sbostic 1433202Sbostic #ifndef lint 15*42583Sbostic static char sccsid[] = "@(#)monop.c 5.7 (Berkeley) 06/01/90"; 1633202Sbostic #endif /* not lint */ 1733202Sbostic 1832258Sbostic # include "monop.def" 1932258Sbostic 2032258Sbostic /* 2132258Sbostic * This program implements a monopoly game 2232258Sbostic */ 2332258Sbostic main(ac, av) 2432258Sbostic reg int ac; 2532258Sbostic reg char *av[]; { 2632258Sbostic 2732258Sbostic 2832258Sbostic srand(getpid()); 2932258Sbostic if (ac > 1) { 3032258Sbostic if (!rest_f(av[1])) 3132258Sbostic restore(); 3232258Sbostic } 3332258Sbostic else { 3432258Sbostic getplayers(); 3532258Sbostic init_players(); 3632258Sbostic init_monops(); 3732258Sbostic } 3832258Sbostic num_luck = sizeof lucky_mes / sizeof (char *); 3932258Sbostic init_decks(); 4032258Sbostic signal(2, quit); 4132258Sbostic for (;;) { 4232258Sbostic printf("\n%s (%d) (cash $%d) on %s\n", cur_p->name, player + 1, 4332258Sbostic cur_p->money, board[cur_p->loc].name); 4432258Sbostic printturn(); 4532258Sbostic force_morg(); 4632258Sbostic execute(getinp("-- Command: ", comlist)); 4732258Sbostic } 4832258Sbostic } 4932258Sbostic /* 5032258Sbostic * This routine gets the names of the players 5132258Sbostic */ 5232258Sbostic getplayers() { 5332258Sbostic 5432258Sbostic reg char *sp; 5532258Sbostic reg int i, j; 5632258Sbostic char buf[257]; 5732258Sbostic 5832258Sbostic blew_it: 5932258Sbostic for (;;) { 6032258Sbostic if ((num_play=get_int("How many players? ")) <= 0 || 6132258Sbostic num_play > MAX_PL) 6232258Sbostic printf("Sorry. Number must range from 1 to 9\n"); 6332258Sbostic else 6432258Sbostic break; 6532258Sbostic } 6632258Sbostic cur_p = play = (PLAY *) calloc(num_play, sizeof (PLAY)); 6732258Sbostic for (i = 0; i < num_play; i++) { 6832258Sbostic over: 6932258Sbostic printf("Player %d's name: ", i + 1); 7032258Sbostic for (sp = buf; (*sp=getchar()) != '\n'; sp++) 7132258Sbostic continue; 7232258Sbostic if (sp == buf) 7332258Sbostic goto over; 7432258Sbostic *sp++ = '\0'; 7532258Sbostic strcpy(name_list[i]=play[i].name=(char *)calloc(1,sp-buf),buf); 7632258Sbostic play[i].money = 1500; 7732258Sbostic } 7832258Sbostic name_list[i++] = "done"; 7932258Sbostic name_list[i] = 0; 8032258Sbostic for (i = 0; i < num_play; i++) 8132258Sbostic for (j = i + 1; j < num_play; j++) 8232262Sbostic if (strcasecmp(name_list[i], name_list[j]) == 0) { 8332258Sbostic if (i != num_play - 1) 8432258Sbostic printf("Hey!!! Some of those are IDENTICAL!! Let's try that again....\n"); 8532258Sbostic else 8632258Sbostic printf("\"done\" is a reserved word. Please try again\n"); 8732258Sbostic for (i = 0; i < num_play; i++) 8832258Sbostic cfree(play[i].name); 8932258Sbostic cfree(play); 9032258Sbostic goto blew_it; 9132258Sbostic } 9232258Sbostic } 9332258Sbostic /* 9432258Sbostic * This routine figures out who goes first 9532258Sbostic */ 9632258Sbostic init_players() { 9732258Sbostic 9832258Sbostic reg int i, rl, cur_max; 9932258Sbostic bool over; 10032258Sbostic int max_pl; 10132258Sbostic 10232258Sbostic again: 10332258Sbostic putchar('\n'); 10432258Sbostic for (cur_max = i = 0; i < num_play; i++) { 10532258Sbostic printf("%s (%d) rolls %d\n", play[i].name, i+1, rl=roll(2, 6)); 10632258Sbostic if (rl > cur_max) { 10732258Sbostic over = FALSE; 10832258Sbostic cur_max = rl; 10932258Sbostic max_pl = i; 11032258Sbostic } 11132258Sbostic else if (rl == cur_max) 11232258Sbostic over++; 11332258Sbostic } 11432258Sbostic if (over) { 11532258Sbostic printf("%d people rolled the same thing, so we'll try again\n", 11632258Sbostic over + 1); 11732258Sbostic goto again; 11832258Sbostic } 11932258Sbostic player = max_pl; 12032258Sbostic cur_p = &play[max_pl]; 12132258Sbostic printf("%s (%d) goes first\n", cur_p->name, max_pl + 1); 12232258Sbostic } 12332258Sbostic /* 12432258Sbostic * This routine initalizes the monopoly structures. 12532258Sbostic */ 12632258Sbostic init_monops() { 12732258Sbostic 12832258Sbostic reg MON *mp; 12932258Sbostic reg int i; 13032258Sbostic 13132258Sbostic for (mp = mon; mp < &mon[N_MON]; mp++) { 13232258Sbostic mp->name = mp->not_m; 13332258Sbostic for (i = 0; i < mp->num_in; i++) 13433217Sbostic mp->sq[i] = &board[mp->sqnums[i]]; 13532258Sbostic } 13632258Sbostic } 137