|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #ifndef lint ! 8: static char sccsid[] = "@(#)move_robs.c 5.1 (Berkeley) 5/30/85"; ! 9: #endif not lint ! 10: ! 11: # include "robots.h" ! 12: # include <signal.h> ! 13: ! 14: /* ! 15: * move_robots: ! 16: * Move the robots around ! 17: */ ! 18: move_robots(was_sig) ! 19: bool was_sig; ! 20: { ! 21: register COORD *rp; ! 22: register int y, x; ! 23: register int mindist, d; ! 24: static COORD newpos; ! 25: ! 26: if (Real_time) ! 27: signal(SIGALRM, move_robots); ! 28: # ifdef DEBUG ! 29: move(Min.y, Min.x); ! 30: addch(inch()); ! 31: move(Max.y, Max.x); ! 32: addch(inch()); ! 33: # endif DEBUG ! 34: for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) { ! 35: if (rp->y < 0) ! 36: continue; ! 37: mvaddch(rp->y, rp->x, ' '); ! 38: Field[rp->y][rp->x]--; ! 39: rp->y += sign(My_pos.y - rp->y); ! 40: rp->x += sign(My_pos.x - rp->x); ! 41: if (rp->y <= 0) ! 42: rp->y = 0; ! 43: else if (rp->y >= Y_FIELDSIZE) ! 44: rp->y = Y_FIELDSIZE - 1; ! 45: if (rp->x <= 0) ! 46: rp->x = 0; ! 47: else if (rp->x >= X_FIELDSIZE) ! 48: rp->x = X_FIELDSIZE - 1; ! 49: Field[rp->y][rp->x]++; ! 50: } ! 51: ! 52: Min.y = Y_FIELDSIZE; ! 53: Min.x = X_FIELDSIZE; ! 54: Max.y = 0; ! 55: Max.x = 0; ! 56: for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) ! 57: if (rp->y < 0) ! 58: continue; ! 59: else if (rp->y == My_pos.y && rp->x == My_pos.x) ! 60: Dead = TRUE; ! 61: else if (Field[rp->y][rp->x] > 1) { ! 62: mvaddch(rp->y, rp->x, HEAP); ! 63: rp->y = -1; ! 64: Num_robots--; ! 65: if (Waiting) ! 66: Wait_bonus++; ! 67: add_score(ROB_SCORE); ! 68: } ! 69: else { ! 70: mvaddch(rp->y, rp->x, ROBOT); ! 71: if (rp->y < Min.y) ! 72: Min.y = rp->y; ! 73: if (rp->x < Min.x) ! 74: Min.x = rp->x; ! 75: if (rp->y > Max.y) ! 76: Max.y = rp->y; ! 77: if (rp->x > Max.x) ! 78: Max.x = rp->x; ! 79: } ! 80: ! 81: if (was_sig) { ! 82: refresh(); ! 83: if (Dead || Num_robots <= 0) ! 84: longjmp(End_move); ! 85: } ! 86: ! 87: # ifdef DEBUG ! 88: standout(); ! 89: move(Min.y, Min.x); ! 90: addch(inch()); ! 91: move(Max.y, Max.x); ! 92: addch(inch()); ! 93: standend(); ! 94: # endif DEBUG ! 95: if (Real_time) ! 96: alarm(3); ! 97: } ! 98: ! 99: /* ! 100: * add_score: ! 101: * Add a score to the overall point total ! 102: */ ! 103: add_score(add) ! 104: int add; ! 105: { ! 106: Score += add; ! 107: move(Y_SCORE, X_SCORE); ! 108: printw("%d", Score); ! 109: } ! 110: ! 111: /* ! 112: * sign: ! 113: * Return the sign of the number ! 114: */ ! 115: sign(n) ! 116: int n; ! 117: { ! 118: if (n < 0) ! 119: return -1; ! 120: else if (n > 0) ! 121: return 1; ! 122: else ! 123: return 0; ! 124: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.