cleanup, add manual page
[unix-history] / usr / src / games / monop / monop.c
CommitLineData
5b162ab4 1/*
d99e6414 2 * Copyright (c) 1980 Regents of the University of California.
e10e1c15
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
d99e6414
KB
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.
5b162ab4
KB
16 */
17
18#ifndef lint
e10e1c15 19char copyright[] =
d99e6414 20"@(#) Copyright (c) 1980 Regents of the University of California.\n\
e10e1c15
KB
21 All rights reserved.\n";
22#endif /* not lint */
23
24#ifndef lint
d99e6414 25static char sccsid[] = "@(#)monop.c 5.6 (Berkeley) %G%";
e10e1c15 26#endif /* not lint */
5b162ab4
KB
27
28# include "monop.def"
29
30/*
31 * This program implements a monopoly game
32 */
33main(ac, av)
34reg int ac;
35reg char *av[]; {
36
37
38 srand(getpid());
39 if (ac > 1) {
40 if (!rest_f(av[1]))
41 restore();
42 }
43 else {
44 getplayers();
45 init_players();
46 init_monops();
47 }
48 num_luck = sizeof lucky_mes / sizeof (char *);
49 init_decks();
50 signal(2, quit);
51 for (;;) {
52 printf("\n%s (%d) (cash $%d) on %s\n", cur_p->name, player + 1,
53 cur_p->money, board[cur_p->loc].name);
54 printturn();
55 force_morg();
56 execute(getinp("-- Command: ", comlist));
57 }
58}
59/*
60 * This routine gets the names of the players
61 */
62getplayers() {
63
64 reg char *sp;
65 reg int i, j;
66 char buf[257];
67
68blew_it:
69 for (;;) {
70 if ((num_play=get_int("How many players? ")) <= 0 ||
71 num_play > MAX_PL)
72 printf("Sorry. Number must range from 1 to 9\n");
73 else
74 break;
75 }
76 cur_p = play = (PLAY *) calloc(num_play, sizeof (PLAY));
77 for (i = 0; i < num_play; i++) {
78over:
79 printf("Player %d's name: ", i + 1);
80 for (sp = buf; (*sp=getchar()) != '\n'; sp++)
81 continue;
82 if (sp == buf)
83 goto over;
84 *sp++ = '\0';
85 strcpy(name_list[i]=play[i].name=(char *)calloc(1,sp-buf),buf);
86 play[i].money = 1500;
87 }
88 name_list[i++] = "done";
89 name_list[i] = 0;
90 for (i = 0; i < num_play; i++)
91 for (j = i + 1; j < num_play; j++)
665236b2 92 if (strcasecmp(name_list[i], name_list[j]) == 0) {
5b162ab4
KB
93 if (i != num_play - 1)
94 printf("Hey!!! Some of those are IDENTICAL!! Let's try that again....\n");
95 else
96 printf("\"done\" is a reserved word. Please try again\n");
97 for (i = 0; i < num_play; i++)
98 cfree(play[i].name);
99 cfree(play);
100 goto blew_it;
101 }
102}
103/*
104 * This routine figures out who goes first
105 */
106init_players() {
107
108 reg int i, rl, cur_max;
109 bool over;
110 int max_pl;
111
112again:
113 putchar('\n');
114 for (cur_max = i = 0; i < num_play; i++) {
115 printf("%s (%d) rolls %d\n", play[i].name, i+1, rl=roll(2, 6));
116 if (rl > cur_max) {
117 over = FALSE;
118 cur_max = rl;
119 max_pl = i;
120 }
121 else if (rl == cur_max)
122 over++;
123 }
124 if (over) {
125 printf("%d people rolled the same thing, so we'll try again\n",
126 over + 1);
127 goto again;
128 }
129 player = max_pl;
130 cur_p = &play[max_pl];
131 printf("%s (%d) goes first\n", cur_p->name, max_pl + 1);
132}
133/*
134 * This routine initalizes the monopoly structures.
135 */
136init_monops() {
137
138 reg MON *mp;
139 reg int i;
140
141 for (mp = mon; mp < &mon[N_MON]; mp++) {
142 mp->name = mp->not_m;
143 for (i = 0; i < mp->num_in; i++)
2eb4ff88 144 mp->sq[i] = &board[mp->sqnums[i]];
5b162ab4
KB
145 }
146}