home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 2 / CDPD_II_2352.bin / scope / 126-150 / scopedisk128 / crobots23 / seekem.r < prev    next >
Text File  |  1992-10-27  |  2KB  |  76 lines

  1. S Holmstead
  2. S Holmstead
  3. /* Seek 'em and Kill 'em */
  4.  
  5. int angle, range;
  6.  
  7. main ()
  8. {
  9.     /* main loop */
  10.     while (1)
  11.     {
  12.         /* search for someone to kill */
  13.         drive (angle, 0);
  14.         while (!(range = scan (angle -= 10, 10)));
  15.  
  16.         /* shoot at him */
  17.         cannon (angle, range);
  18.  
  19.         /* loop until we loose sight of him */
  20.         while (range = scan (angle = track (angle, 5, 20), 10))
  21.         {
  22.             /* shoot at him */
  23.             cannon (angle, range);
  24.  
  25.             /* if he is too far away, move in closer */
  26.             if (range > 200)
  27.                 drive (angle, 50);
  28.             else
  29.                 drive (angle, 0);
  30.         }
  31.     }
  32. }
  33.  
  34. /* track: pinpoints the enemy (optimized from tiger's routine) */
  35. track (d, r, l)
  36. int d, r, l;
  37. {
  38.     /* check for the end of recursion case */
  39.     if (r <= l)
  40.     {
  41.         /* see if he is still in front of us */
  42.         if (scan (d, r) > 0)
  43.         {
  44.             return (d);
  45.         }
  46.         else
  47.         {
  48.             /* see if he moved left */
  49.             if (scan (d-r, r) > 0)
  50.             {
  51.                 return (d-r);
  52.             }
  53.             else
  54.             {
  55.                 /* see if he moved right */
  56.                 if (scan (d+r, r) > 0)
  57.                 {
  58.                     return (d+r);
  59.                 }
  60.                 else
  61.                 {
  62.                     /* can't find him */
  63.                     /* expand our search range and try again */
  64.                     return (track (d, r*2, l));
  65.                 }
  66.             }
  67.         }
  68.     }
  69.     else
  70.     {
  71.         /* can't find him, give up */
  72.         return (d);
  73.     }
  74. }
  75.  
  76.