121469Smckusick /* 221469Smckusick * Copyright (c) 1980 Regents of the University of California. 333690Sbostic * All rights reserved. 433690Sbostic * 5*42589Sbostic * %sccs.include.redist.c% 621469Smckusick */ 721469Smckusick 821469Smckusick #ifndef lint 9*42589Sbostic static char sccsid[] = "@(#)move_robs.c 5.4 (Berkeley) 06/01/90"; 1033690Sbostic #endif /* not lint */ 1121469Smckusick 1221469Smckusick # include "robots.h" 1321469Smckusick # include <signal.h> 1421469Smckusick 1521469Smckusick /* 1621469Smckusick * move_robots: 1721469Smckusick * Move the robots around 1821469Smckusick */ 1921469Smckusick move_robots(was_sig) 2021469Smckusick bool was_sig; 2121469Smckusick { 2221469Smckusick register COORD *rp; 2321469Smckusick register int y, x; 2421469Smckusick register int mindist, d; 2521469Smckusick static COORD newpos; 2621469Smckusick 2721469Smckusick if (Real_time) 2821469Smckusick signal(SIGALRM, move_robots); 2921469Smckusick # ifdef DEBUG 3021469Smckusick move(Min.y, Min.x); 3121469Smckusick addch(inch()); 3221469Smckusick move(Max.y, Max.x); 3321469Smckusick addch(inch()); 3421469Smckusick # endif DEBUG 3521469Smckusick for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) { 3621469Smckusick if (rp->y < 0) 3721469Smckusick continue; 3821469Smckusick mvaddch(rp->y, rp->x, ' '); 3921469Smckusick Field[rp->y][rp->x]--; 4021469Smckusick rp->y += sign(My_pos.y - rp->y); 4121469Smckusick rp->x += sign(My_pos.x - rp->x); 4221469Smckusick if (rp->y <= 0) 4321469Smckusick rp->y = 0; 4421469Smckusick else if (rp->y >= Y_FIELDSIZE) 4521469Smckusick rp->y = Y_FIELDSIZE - 1; 4621469Smckusick if (rp->x <= 0) 4721469Smckusick rp->x = 0; 4821469Smckusick else if (rp->x >= X_FIELDSIZE) 4921469Smckusick rp->x = X_FIELDSIZE - 1; 5021469Smckusick Field[rp->y][rp->x]++; 5121469Smckusick } 5221469Smckusick 5321469Smckusick Min.y = Y_FIELDSIZE; 5421469Smckusick Min.x = X_FIELDSIZE; 5521469Smckusick Max.y = 0; 5621469Smckusick Max.x = 0; 5721469Smckusick for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) 5821469Smckusick if (rp->y < 0) 5921469Smckusick continue; 6021469Smckusick else if (rp->y == My_pos.y && rp->x == My_pos.x) 6121469Smckusick Dead = TRUE; 6221469Smckusick else if (Field[rp->y][rp->x] > 1) { 6321469Smckusick mvaddch(rp->y, rp->x, HEAP); 6421469Smckusick rp->y = -1; 6521469Smckusick Num_robots--; 6621469Smckusick if (Waiting) 6721469Smckusick Wait_bonus++; 6821469Smckusick add_score(ROB_SCORE); 6921469Smckusick } 7021469Smckusick else { 7121469Smckusick mvaddch(rp->y, rp->x, ROBOT); 7221469Smckusick if (rp->y < Min.y) 7321469Smckusick Min.y = rp->y; 7421469Smckusick if (rp->x < Min.x) 7521469Smckusick Min.x = rp->x; 7621469Smckusick if (rp->y > Max.y) 7721469Smckusick Max.y = rp->y; 7821469Smckusick if (rp->x > Max.x) 7921469Smckusick Max.x = rp->x; 8021469Smckusick } 8121469Smckusick 8221469Smckusick if (was_sig) { 8321469Smckusick refresh(); 8421469Smckusick if (Dead || Num_robots <= 0) 8521469Smckusick longjmp(End_move); 8621469Smckusick } 8721469Smckusick 8821469Smckusick # ifdef DEBUG 8921469Smckusick standout(); 9021469Smckusick move(Min.y, Min.x); 9121469Smckusick addch(inch()); 9221469Smckusick move(Max.y, Max.x); 9321469Smckusick addch(inch()); 9421469Smckusick standend(); 9521469Smckusick # endif DEBUG 9621469Smckusick if (Real_time) 9721469Smckusick alarm(3); 9821469Smckusick } 9921469Smckusick 10021469Smckusick /* 10121469Smckusick * add_score: 10221469Smckusick * Add a score to the overall point total 10321469Smckusick */ 10421469Smckusick add_score(add) 10521469Smckusick int add; 10621469Smckusick { 10721469Smckusick Score += add; 10821469Smckusick move(Y_SCORE, X_SCORE); 10921469Smckusick printw("%d", Score); 11021469Smckusick } 11121469Smckusick 11221469Smckusick /* 11321469Smckusick * sign: 11421469Smckusick * Return the sign of the number 11521469Smckusick */ 11621469Smckusick sign(n) 11721469Smckusick int n; 11821469Smckusick { 11921469Smckusick if (n < 0) 12021469Smckusick return -1; 12121469Smckusick else if (n > 0) 12221469Smckusick return 1; 12321469Smckusick else 12421469Smckusick return 0; 12521469Smckusick } 126