home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2001 November / Gamestar_34_2001-11_cd1.bin / DEMA / colobotdemoe.exe / script / ANTict.TXT < prev    next >
Text File  |  2001-07-23  |  3KB  |  106 lines

  1. extern void object::Attack( )
  2. {
  3.     int        list[], i;    // liste des objets cherchΘs
  4.     object    target;    // info sur la cible
  5.     point        center;    // coordonnΘes du centre de la zone
  6.     point        lastPos;    // derniΦre position (pr test si bloquΘe)
  7.     float        distCent;    // rayon de la zone
  8.     float        r;        // valeur alΘatoire
  9.  
  10.     errmode(0);  // ne stoppe pas si erreur
  11.     while ( ismovie() != 0 )  wait(1);
  12.  
  13.     i = 0;
  14.     list[i++] = WingedGrabber;
  15.     list[i++] = TrackedGrabber;
  16.     list[i++] = WheeledGrabber;
  17.     list[i++] = LeggedGrabber;
  18.     list[i++] = WingedShooter;
  19.     list[i++] = TrackedShooter;
  20.     list[i++] = WheeledShooter;
  21.     list[i++] = LeggedShooter;
  22.     list[i++] = WingedOrgaShooter;
  23.     list[i++] = TrackedOrgaShooter;
  24.     list[i++] = WheeledOrgaShooter;
  25.     list[i++] = LeggedOrgaShooter;
  26.     list[i++] = WingedSniffer;
  27.     list[i++] = TrackedSniffer;
  28.     list[i++] = WheeledSniffer;
  29.     list[i++] = LeggedSniffer;
  30.     list[i++] = Thumper;
  31.     list[i++] = PhazerShooter;
  32.     list[i++] = Recycler;
  33.     list[i++] = Shielder;
  34.     list[i++] = Subber;
  35.     list[i++] = Me;
  36.  
  37.     center.x = cmdline(0);    // prend les coordonnΘe
  38.     center.y = cmdline(1);    // du centre de la zone
  39.     center.z = 0;        // α patrouiller
  40.     distCent = cmdline(2);     // rayon de la zone
  41.  
  42.     lastPos = position;    // initialise
  43.     motor(1,1);            // en avant toute
  44.     while ( true )        // rΘpΦte α l'infini
  45.     {
  46.         target = radar(list, 0, 360, 0, 40);
  47.         if (target == null or topo(position)<0)// pas de cible α proximitΘ
  48.         {                                      // ou pieds dans l'eau
  49.             if (distance2d(position, center) > distCent or topo(position)<0)
  50.             {   // si la fourmi est en dehors de la zone
  51.                 motor(0, 0); //s'arrΩte
  52.                 wait(0.5);   //marque un arrΩt
  53.                 motor (-0.5, -0.5);//recule lentement
  54.                 wait (1.5);  //attend qu'ait reculΘ
  55.                 turn(direction(center));
  56.                 motor (1, 1); //puis en avant toute
  57.                 do 
  58.                 {
  59.                     lastPos = position;
  60.                     wait(0.5); //tant que pas dans la zone
  61.                     if (distance2d(lastPos, position) < 0.2)
  62.                     {   //si elle est bloquΘe par obstacle
  63.                         turn(rand()*360-180);
  64.                         motor(1,1);
  65.                         wait(1);
  66.                         turn(direction(center));
  67.                     }
  68.                 }
  69.                 while (distance2d(position, center) > distCent or topo(position)<0);
  70.             }
  71.             else
  72.             {   //si elle est bien dans la zone
  73.                 if (distance2d(lastPos, position) < 0.2)
  74.                 {   //si elle est bloquΘe par obstacle
  75.                     turn(rand()*360-180);
  76.                     motor(1,1);
  77.                     wait(1);
  78.                 }
  79.                 r = rand();
  80.                 if (r > 0.6)
  81.                 {  //dans un cas sur dix
  82.                     motor (1, 0.7);// tourne α droite
  83.                     wait(rand()*3);// pendant un moment
  84.                     motor (1, 1);  // puis tout droit
  85.                 }
  86.                 if (r < 0.4)
  87.                 {   //dans un cas sur dix
  88.                     motor (0.7, 1);// tourne α gauche
  89.                     wait(rand()*3);// pendant un moment
  90.                     motor (1, 1);  // puis tout droit
  91.                 }
  92.                 lastPos = position;
  93.                 wait(1);          //attend un moment
  94.             }
  95.         }
  96.         else
  97.         {   // si cible α proximitΘ
  98.             turn(direction(target.position));
  99.             fire(target.position); // et tire deux fois
  100.             motor(1,1);            // avance
  101.             wait(1.5);             // pendant 1.5 s
  102.         }
  103.     }
  104. }
  105.  
  106.