|
|
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 the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)compkl.c 5.3 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: # include "trek.h"
23:
24: /*
25: ** compute klingon distances
26: **
27: ** The klingon list has the distances for all klingons recomputed
28: ** and sorted. The parameter is a Boolean flag which is set if
29: ** we have just entered a new quadrant.
30: **
31: ** This routine is used every time the Enterprise or the Klingons
32: ** move.
33: */
34:
35: compkldist(f)
36: int f; /* set if new quadrant */
37: {
38: register int i, dx, dy;
39: double d;
40: double temp;
41:
42: if (Etc.nkling == 0)
43: return;
44: for (i = 0; i < Etc.nkling; i++)
45: {
46: /* compute distance to the Klingon */
47: dx = Ship.sectx - Etc.klingon[i].x;
48: dy = Ship.secty - Etc.klingon[i].y;
49: d = dx * dx + dy * dy;
50: d = sqrt(d);
51:
52: /* compute average of new and old distances to Klingon */
53: if (!f)
54: {
55: temp = Etc.klingon[i].dist;
56: Etc.klingon[i].avgdist = 0.5 * (temp + d);
57: }
58: else
59: {
60: /* new quadrant: average is current */
61: Etc.klingon[i].avgdist = d;
62: }
63: Etc.klingon[i].dist = d;
64: }
65:
66: /* leave them sorted */
67: sortkl();
68: }
69:
70:
71: /*
72: ** sort klingons
73: **
74: ** bubble sort on ascending distance
75: */
76:
77: sortkl()
78: {
79: struct kling t;
80: register int f, i, m;
81:
82: m = Etc.nkling - 1;
83: f = 1;
84: while (f)
85: {
86: f = 0;
87: for (i = 0; i < m; i++)
88: if (Etc.klingon[i].dist > Etc.klingon[i+1].dist)
89: {
90: bmove(&Etc.klingon[i], &t, sizeof t);
91: bmove(&Etc.klingon[i+1], &Etc.klingon[i], sizeof t);
92: bmove(&t, &Etc.klingon[i+1], sizeof t);
93: f = 1;
94: }
95: }
96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.