|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)main.c 1.1 83/03/17"; ! 3: #endif ! 4: #include "externs.h" ! 5: ! 6: #define distance(x,y) (abs(x) >= abs(y) ? abs(x) + abs(y)/2 : abs(y) + abs(x)/2) ! 7: ! 8: range(fromship, toship) ! 9: register int fromship, toship; ! 10: { ! 11: int bow1r, bow1c, bow2r, bow2c; ! 12: int stern1r, stern1c, stern2c, stern2r; ! 13: register int bb, bs, sb, ss, result; ! 14: ! 15: if (fromship > scene[game].vessels ! 16: || toship > scene[game].vessels) /* just in case */ ! 17: return(30000); ! 18: if (!pos[toship].dir) ! 19: return(30000); ! 20: stern1r = bow1r = pos[fromship].row; ! 21: stern1c = bow1c = pos[fromship].col; ! 22: stern2r = bow2r = pos[toship].row; ! 23: stern2c = bow2c = pos[toship].col; ! 24: result = bb = distance((bow2r - bow1r), (bow2c - bow1c)); ! 25: if (bb < 5) ! 26: { ! 27: drdc(&stern2r, &stern2c, pos[toship].dir); ! 28: drdc(&stern1r, &stern1c, pos[fromship].dir); ! 29: bs = distance((bow2r - stern1r) ,(bow2c - stern1c)); ! 30: sb = distance((bow1r - stern2r) ,(bow1c - stern2c)); ! 31: ss = distance((stern2r - stern1r) ,(stern2c - stern1c)); ! 32: result = min(bb, min(bs, min(sb, ss))); ! 33: } ! 34: return(result); ! 35: } ! 36: ! 37: drdc(dr, dc, dir) ! 38: register int *dr, *dc; ! 39: int dir; ! 40: { ! 41: switch (dir) ! 42: { ! 43: case 1: ! 44: (*dr)++; ! 45: break; ! 46: case 2: ! 47: (*dr)++; ! 48: (*dc)--; ! 49: break; ! 50: case 3: ! 51: (*dc)--; ! 52: break; ! 53: case 4: ! 54: (*dr)--; ! 55: (*dc)--; ! 56: break; ! 57: case 5: ! 58: (*dr)--; ! 59: break; ! 60: case 6: ! 61: (*dr)--; ! 62: (*dc)++; ! 63: break; ! 64: case 7: ! 65: (*dc)++; ! 66: break; ! 67: case 8: ! 68: (*dr)++; ! 69: (*dc)++; ! 70: break; ! 71: } ! 72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.