S Holmstead
S Holmstead
/* Seek 'em and Kill 'em */

int angle, range;

main ()
{
    /* main loop */
    while (1)
    {
        /* search for someone to kill */
        drive (angle, 0);
        while (!(range = scan (angle -= 10, 10)));

        /* shoot at him */
        cannon (angle, range);

        /* loop until we loose sight of him */
        while (range = scan (angle = track (angle, 5, 20), 10))
        {
            /* shoot at him */
            cannon (angle, range);

            /* if he is too far away, move in closer */
            if (range > 200)
                drive (angle, 50);
            else
                drive (angle, 0);
        }
    }
}

/* track: pinpoints the enemy (optimized from tiger's routine) */
track (d, r, l)
int d, r, l;
{
    /* check for the end of recursion case */
    if (r <= l)
    {
        /* see if he is still in front of us */
        if (scan (d, r) > 0)
        {
            return (d);
        }
        else
        {
            /* see if he moved left */
            if (scan (d-r, r) > 0)
            {
                return (d-r);
            }
            else
            {
                /* see if he moved right */
                if (scan (d+r, r) > 0)
                {
                    return (d+r);
                }
                else
                {
                    /* can't find him */
                    /* expand our search range and try again */
                    return (track (d, r*2, l));
                }
            }
        }
    }
    else
    {
        /* can't find him, give up */
        return (d);
    }
}