xref: /csrg-svn/games/robots/play_level.c (revision 21470)
1*21470Smckusick /*
2*21470Smckusick  * Copyright (c) 1980 Regents of the University of California.
3*21470Smckusick  * All rights reserved.  The Berkeley software License Agreement
4*21470Smckusick  * specifies the terms and conditions for redistribution.
5*21470Smckusick  */
6*21470Smckusick 
7*21470Smckusick #ifndef lint
8*21470Smckusick static char sccsid[] = "@(#)play_level.c	5.1 (Berkeley) 05/30/85";
9*21470Smckusick #endif not lint
10*21470Smckusick 
11*21470Smckusick # include	"robots.h"
12*21470Smckusick 
13*21470Smckusick /*
14*21470Smckusick  * play_level:
15*21470Smckusick  *	Let the player play the current level
16*21470Smckusick  */
17*21470Smckusick play_level()
18*21470Smckusick {
19*21470Smckusick 	register COORD	*cp;
20*21470Smckusick 	register int	y, x, bonus;
21*21470Smckusick 
22*21470Smckusick 	move(My_pos.y, My_pos.x);
23*21470Smckusick 	addch(PLAYER);
24*21470Smckusick 	refresh();
25*21470Smckusick 	for (cp = Robots; cp < &Robots[MAXROBOTS]; cp++) {
26*21470Smckusick 		move(cp->y, cp->x);
27*21470Smckusick 		addch(ROBOT);
28*21470Smckusick 	}
29*21470Smckusick 	refresh();
30*21470Smckusick # ifdef DEBUG
31*21470Smckusick 	standout();
32*21470Smckusick 	move(Min.y, Min.x);
33*21470Smckusick 	addch(inch());
34*21470Smckusick 	move(Max.y, Max.x);
35*21470Smckusick 	addch(inch());
36*21470Smckusick 	standend();
37*21470Smckusick # endif DEBUG
38*21470Smckusick 	setjmp(End_move);
39*21470Smckusick 	flush_in();
40*21470Smckusick 	while (!Dead && Num_robots > 0) {
41*21470Smckusick 		move(My_pos.y, My_pos.x);
42*21470Smckusick 		if (!jumping())
43*21470Smckusick 			refresh();
44*21470Smckusick 		get_move();
45*21470Smckusick 		if (Real_time)
46*21470Smckusick 			alarm(0);
47*21470Smckusick 		if (Field[My_pos.y][My_pos.x] != 0)
48*21470Smckusick 			Dead = TRUE;
49*21470Smckusick 		if (!Dead)
50*21470Smckusick 			move_robots(FALSE);
51*21470Smckusick 		if (Was_bonus) {
52*21470Smckusick 			move(Y_PROMPT, X_PROMPT);
53*21470Smckusick 			clrtoeol();
54*21470Smckusick 			move(Y_PROMPT + 1, X_PROMPT);
55*21470Smckusick 			clrtoeol();
56*21470Smckusick 			Was_bonus = FALSE;
57*21470Smckusick 		}
58*21470Smckusick 	}
59*21470Smckusick 
60*21470Smckusick 	/*
61*21470Smckusick 	 * if the player didn't die, add on the possible bonuses
62*21470Smckusick 	 */
63*21470Smckusick 
64*21470Smckusick 	if (!Dead) {
65*21470Smckusick 		Was_bonus = FALSE;
66*21470Smckusick 
67*21470Smckusick 		if (Level == Start_level && Start_level > 1) {
68*21470Smckusick 			move(Y_PROMPT, X_PROMPT);
69*21470Smckusick 			printw("Advance bonus: %d", S_BONUS);
70*21470Smckusick 			refresh();
71*21470Smckusick 			add_score(S_BONUS);
72*21470Smckusick 			Was_bonus = TRUE;
73*21470Smckusick 		}
74*21470Smckusick 
75*21470Smckusick 		if (Wait_bonus != 0) {
76*21470Smckusick 			if (!Was_bonus)
77*21470Smckusick 				move(Y_PROMPT, X_PROMPT);
78*21470Smckusick 			else
79*21470Smckusick 				move(Y_PROMPT + 1, X_PROMPT);
80*21470Smckusick 			printw("Wait bonus: %d", Wait_bonus);
81*21470Smckusick 			refresh();
82*21470Smckusick 			add_score(Wait_bonus);
83*21470Smckusick 			Was_bonus = TRUE;
84*21470Smckusick 		}
85*21470Smckusick 	}
86*21470Smckusick }
87