xref: /netbsd-src/games/monop/jail.c (revision c41a4eebefede43f6950f838a387dc18c6a431bf)
1 /*	$NetBSD: jail.c,v 1.4 1997/10/12 17:45:14 christos Exp $	*/
2 
3 /*
4  * Copyright (c) 1980, 1993
5  *	The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *	This product includes software developed by the University of
18  *	California, Berkeley and its contributors.
19  * 4. Neither the name of the University nor the names of its contributors
20  *    may be used to endorse or promote products derived from this software
21  *    without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33  * SUCH DAMAGE.
34  */
35 
36 #include <sys/cdefs.h>
37 #ifndef lint
38 #if 0
39 static char sccsid[] = "@(#)jail.c	8.1 (Berkeley) 5/31/93";
40 #else
41 __RCSID("$NetBSD: jail.c,v 1.4 1997/10/12 17:45:14 christos Exp $");
42 #endif
43 #endif /* not lint */
44 
45 #include "monop.ext"
46 
47 /*
48  *	This routine uses a get-out-of-jail-free card to get the
49  * player out of jail.
50  */
51 void
52 card()
53 {
54 
55 	if (cur_p->loc != JAIL) {
56 		printf("But you're not IN Jail\n");
57 		return;
58 	}
59 	if (cur_p->num_gojf == 0) {
60 		printf("But you don't HAVE a get out of jail free card\n");
61 		return;
62 	}
63 	ret_card(cur_p);
64 	cur_p->loc = 10;			/* just visiting	*/
65 	cur_p->in_jail = 0;
66 }
67 /*
68  *	This routine returns the players get-out-of-jail-free card
69  * to a deck.
70  */
71 void
72 ret_card(plr)
73 PLAY	*plr;
74 {
75 
76 	plr->num_gojf--;
77 	if (CC_D.gojf_used)
78 		CC_D.gojf_used = FALSE;
79 	else
80 		CH_D.gojf_used = FALSE;
81 }
82 /*
83  *	This routine deals with paying your way out of jail.
84  */
85 void
86 pay()
87 {
88 
89 	if (cur_p->loc != JAIL) {
90 		printf("But you're not IN Jail\n");
91 		return;
92 	}
93 	cur_p->loc = 10;
94 	cur_p->money -= 50;
95 	cur_p->in_jail = 0;
96 	printf("That cost you $50\n");
97 }
98 /*
99  *	This routine deals with a move in jail
100  */
101 int
102 move_jail(r1, r2)
103 int	r1, r2;
104 {
105 
106 	if (r1 != r2) {
107 		printf("Sorry, that doesn't get you out\n");
108 		if (++(cur_p->in_jail) == 3) {
109 			printf("It's your third turn and you didn't roll doubles.  You have to pay $50\n");
110 			cur_p->money -= 50;
111 moveit:
112 			cur_p->loc = 10;
113 			cur_p->in_jail = 0;
114 			move(r1+r2);
115 			r1 = r2 - 1;	/* kludge: stop new roll w/doub	*/
116 			return TRUE;
117 		}
118 		return FALSE;
119 	}
120 	else {
121 		printf("Double roll gets you out.\n");
122 		goto moveit;
123 	}
124 }
125 
126 void
127 printturn()
128 {
129 
130 	if (cur_p->loc != JAIL)
131 		return;
132 	printf("(This is your ");
133 	switch (cur_p->in_jail) {
134 	  case 0:
135 		printf("1st");
136 		break;
137 	  case 1:
138 		printf("2nd");
139 		break;
140 	  case 2:
141 		printf("3rd (and final)");
142 		break;
143 	}
144 	printf(" turn in JAIL)\n");
145 }
146