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