|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)compkl.c 4.2 (Berkeley) 5/27/83"; ! 3: #endif not lint ! 4: ! 5: # include "trek.h" ! 6: ! 7: /* ! 8: ** compute klingon distances ! 9: ** ! 10: ** The klingon list has the distances for all klingons recomputed ! 11: ** and sorted. The parameter is a Boolean flag which is set if ! 12: ** we have just entered a new quadrant. ! 13: ** ! 14: ** This routine is used every time the Enterprise or the Klingons ! 15: ** move. ! 16: */ ! 17: ! 18: compkldist(f) ! 19: int f; /* set if new quadrant */ ! 20: { ! 21: register int i, dx, dy; ! 22: double d; ! 23: double temp; ! 24: ! 25: if (Etc.nkling == 0) ! 26: return; ! 27: for (i = 0; i < Etc.nkling; i++) ! 28: { ! 29: /* compute distance to the Klingon */ ! 30: dx = Ship.sectx - Etc.klingon[i].x; ! 31: dy = Ship.secty - Etc.klingon[i].y; ! 32: d = dx * dx + dy * dy; ! 33: d = sqrt(d); ! 34: ! 35: /* compute average of new and old distances to Klingon */ ! 36: if (!f) ! 37: { ! 38: temp = Etc.klingon[i].dist; ! 39: Etc.klingon[i].avgdist = 0.5 * (temp + d); ! 40: } ! 41: else ! 42: { ! 43: /* new quadrant: average is current */ ! 44: Etc.klingon[i].avgdist = d; ! 45: } ! 46: Etc.klingon[i].dist = d; ! 47: } ! 48: ! 49: /* leave them sorted */ ! 50: sortkl(); ! 51: } ! 52: ! 53: ! 54: /* ! 55: ** sort klingons ! 56: ** ! 57: ** bubble sort on ascending distance ! 58: */ ! 59: ! 60: sortkl() ! 61: { ! 62: struct kling t; ! 63: register int f, i, m; ! 64: ! 65: m = Etc.nkling - 1; ! 66: f = 1; ! 67: while (f) ! 68: { ! 69: f = 0; ! 70: for (i = 0; i < m; i++) ! 71: if (Etc.klingon[i].dist > Etc.klingon[i+1].dist) ! 72: { ! 73: bmove(&Etc.klingon[i], &t, sizeof t); ! 74: bmove(&Etc.klingon[i+1], &Etc.klingon[i], sizeof t); ! 75: bmove(&t, &Etc.klingon[i+1], sizeof t); ! 76: f = 1; ! 77: } ! 78: } ! 79: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.