|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that: (1) source distributions retain this entire copyright ! 7: * notice and comment, and (2) distributions including binaries display ! 8: * the following acknowledgement: ``This product includes software ! 9: * developed by the University of California, Berkeley and its contributors'' ! 10: * in the documentation or other materials provided with the distribution ! 11: * and in all advertising materials mentioning features or use of this ! 12: * software. Neither the name of the University nor the names of its ! 13: * contributors may be used to endorse or promote products derived ! 14: * from this software without specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #ifndef lint ! 21: static char sccsid[] = "@(#)move_robs.c 5.4 (Berkeley) 6/1/90"; ! 22: #endif /* not lint */ ! 23: ! 24: # include "robots.h" ! 25: # include <signal.h> ! 26: ! 27: /* ! 28: * move_robots: ! 29: * Move the robots around ! 30: */ ! 31: move_robots(was_sig) ! 32: bool was_sig; ! 33: { ! 34: register COORD *rp; ! 35: register int y, x; ! 36: register int mindist, d; ! 37: static COORD newpos; ! 38: ! 39: if (Real_time) ! 40: signal(SIGALRM, move_robots); ! 41: # ifdef DEBUG ! 42: move(Min.y, Min.x); ! 43: addch(inch()); ! 44: move(Max.y, Max.x); ! 45: addch(inch()); ! 46: # endif DEBUG ! 47: for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) { ! 48: if (rp->y < 0) ! 49: continue; ! 50: mvaddch(rp->y, rp->x, ' '); ! 51: Field[rp->y][rp->x]--; ! 52: rp->y += sign(My_pos.y - rp->y); ! 53: rp->x += sign(My_pos.x - rp->x); ! 54: if (rp->y <= 0) ! 55: rp->y = 0; ! 56: else if (rp->y >= Y_FIELDSIZE) ! 57: rp->y = Y_FIELDSIZE - 1; ! 58: if (rp->x <= 0) ! 59: rp->x = 0; ! 60: else if (rp->x >= X_FIELDSIZE) ! 61: rp->x = X_FIELDSIZE - 1; ! 62: Field[rp->y][rp->x]++; ! 63: } ! 64: ! 65: Min.y = Y_FIELDSIZE; ! 66: Min.x = X_FIELDSIZE; ! 67: Max.y = 0; ! 68: Max.x = 0; ! 69: for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) ! 70: if (rp->y < 0) ! 71: continue; ! 72: else if (rp->y == My_pos.y && rp->x == My_pos.x) ! 73: Dead = TRUE; ! 74: else if (Field[rp->y][rp->x] > 1) { ! 75: mvaddch(rp->y, rp->x, HEAP); ! 76: rp->y = -1; ! 77: Num_robots--; ! 78: if (Waiting) ! 79: Wait_bonus++; ! 80: add_score(ROB_SCORE); ! 81: } ! 82: else { ! 83: mvaddch(rp->y, rp->x, ROBOT); ! 84: if (rp->y < Min.y) ! 85: Min.y = rp->y; ! 86: if (rp->x < Min.x) ! 87: Min.x = rp->x; ! 88: if (rp->y > Max.y) ! 89: Max.y = rp->y; ! 90: if (rp->x > Max.x) ! 91: Max.x = rp->x; ! 92: } ! 93: ! 94: if (was_sig) { ! 95: refresh(); ! 96: if (Dead || Num_robots <= 0) ! 97: longjmp(End_move); ! 98: } ! 99: ! 100: # ifdef DEBUG ! 101: standout(); ! 102: move(Min.y, Min.x); ! 103: addch(inch()); ! 104: move(Max.y, Max.x); ! 105: addch(inch()); ! 106: standend(); ! 107: # endif DEBUG ! 108: if (Real_time) ! 109: alarm(3); ! 110: } ! 111: ! 112: /* ! 113: * add_score: ! 114: * Add a score to the overall point total ! 115: */ ! 116: add_score(add) ! 117: int add; ! 118: { ! 119: Score += add; ! 120: move(Y_SCORE, X_SCORE); ! 121: printw("%d", Score); ! 122: } ! 123: ! 124: /* ! 125: * sign: ! 126: * Return the sign of the number ! 127: */ ! 128: sign(n) ! 129: int n; ! 130: { ! 131: if (n < 0) ! 132: return -1; ! 133: else if (n > 0) ! 134: return 1; ! 135: else ! 136: return 0; ! 137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.