xref: /csrg-svn/games/robots/play_level.c (revision 25019)
121470Smckusick /*
221470Smckusick  * Copyright (c) 1980 Regents of the University of California.
321470Smckusick  * All rights reserved.  The Berkeley software License Agreement
421470Smckusick  * specifies the terms and conditions for redistribution.
521470Smckusick  */
621470Smckusick 
721470Smckusick #ifndef lint
8*25019Smckusick static char sccsid[] = "@(#)play_level.c	5.2 (Berkeley) 09/23/85";
921470Smckusick #endif not lint
1021470Smckusick 
1121470Smckusick # include	"robots.h"
1221470Smckusick 
1321470Smckusick /*
1421470Smckusick  * play_level:
1521470Smckusick  *	Let the player play the current level
1621470Smckusick  */
1721470Smckusick play_level()
1821470Smckusick {
1921470Smckusick 	register COORD	*cp;
2021470Smckusick 	register int	y, x, bonus;
2121470Smckusick 
2221470Smckusick 	move(My_pos.y, My_pos.x);
2321470Smckusick 	addch(PLAYER);
2421470Smckusick 	refresh();
2521470Smckusick 	for (cp = Robots; cp < &Robots[MAXROBOTS]; cp++) {
26*25019Smckusick 		if (cp->y < 0)
27*25019Smckusick 			continue;
2821470Smckusick 		move(cp->y, cp->x);
2921470Smckusick 		addch(ROBOT);
3021470Smckusick 	}
3121470Smckusick 	refresh();
3221470Smckusick # ifdef DEBUG
3321470Smckusick 	standout();
3421470Smckusick 	move(Min.y, Min.x);
3521470Smckusick 	addch(inch());
3621470Smckusick 	move(Max.y, Max.x);
3721470Smckusick 	addch(inch());
3821470Smckusick 	standend();
3921470Smckusick # endif DEBUG
4021470Smckusick 	setjmp(End_move);
4121470Smckusick 	flush_in();
4221470Smckusick 	while (!Dead && Num_robots > 0) {
4321470Smckusick 		move(My_pos.y, My_pos.x);
4421470Smckusick 		if (!jumping())
4521470Smckusick 			refresh();
4621470Smckusick 		get_move();
4721470Smckusick 		if (Real_time)
4821470Smckusick 			alarm(0);
4921470Smckusick 		if (Field[My_pos.y][My_pos.x] != 0)
5021470Smckusick 			Dead = TRUE;
5121470Smckusick 		if (!Dead)
5221470Smckusick 			move_robots(FALSE);
5321470Smckusick 		if (Was_bonus) {
5421470Smckusick 			move(Y_PROMPT, X_PROMPT);
5521470Smckusick 			clrtoeol();
5621470Smckusick 			move(Y_PROMPT + 1, X_PROMPT);
5721470Smckusick 			clrtoeol();
5821470Smckusick 			Was_bonus = FALSE;
5921470Smckusick 		}
6021470Smckusick 	}
6121470Smckusick 
6221470Smckusick 	/*
6321470Smckusick 	 * if the player didn't die, add on the possible bonuses
6421470Smckusick 	 */
6521470Smckusick 
6621470Smckusick 	if (!Dead) {
6721470Smckusick 		Was_bonus = FALSE;
6821470Smckusick 
6921470Smckusick 		if (Level == Start_level && Start_level > 1) {
7021470Smckusick 			move(Y_PROMPT, X_PROMPT);
7121470Smckusick 			printw("Advance bonus: %d", S_BONUS);
7221470Smckusick 			refresh();
7321470Smckusick 			add_score(S_BONUS);
7421470Smckusick 			Was_bonus = TRUE;
7521470Smckusick 		}
7621470Smckusick 
7721470Smckusick 		if (Wait_bonus != 0) {
7821470Smckusick 			if (!Was_bonus)
7921470Smckusick 				move(Y_PROMPT, X_PROMPT);
8021470Smckusick 			else
8121470Smckusick 				move(Y_PROMPT + 1, X_PROMPT);
8221470Smckusick 			printw("Wait bonus: %d", Wait_bonus);
8321470Smckusick 			refresh();
8421470Smckusick 			add_score(Wait_bonus);
8521470Smckusick 			Was_bonus = TRUE;
8621470Smckusick 		}
8721470Smckusick 	}
8821470Smckusick }
89