Annotation of 43BSD/games/trek/compkl.c, revision 1.1.1.1

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[] = "@(#)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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.