home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2001 November / Gamestar_34_2001-11_cd1.bin / DEMA / colobotdemoe.exe / script / ANTicv.TXT < prev    next >
Text File  |  2001-07-23  |  3KB  |  107 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.     float   mp;         // vitesse maxi
  10.     float   minAlt;     // altitude minimale (danger lave!)
  11.  
  12.     errmode(0);  // ne stoppe pas si erreur
  13.     while ( ismovie() != 0 )  wait(1);
  14.  
  15.     i = 0;
  16.     list[i++] = WingedGrabber;
  17.     list[i++] = TrackedGrabber;
  18.     list[i++] = WheeledGrabber;
  19.     list[i++] = LeggedGrabber;
  20.     list[i++] = WingedShooter;
  21.     list[i++] = TrackedShooter;
  22.     list[i++] = WheeledShooter;
  23.     list[i++] = LeggedShooter;
  24.     list[i++] = WingedOrgaShooter;
  25.     list[i++] = TrackedOrgaShooter;
  26.     list[i++] = WheeledOrgaShooter;
  27.     list[i++] = LeggedOrgaShooter;
  28.     list[i++] = WingedSniffer;
  29.     list[i++] = TrackedSniffer;
  30.     list[i++] = WheeledSniffer;
  31.     list[i++] = LeggedSniffer;
  32.     list[i++] = Thumper;
  33.     list[i++] = PhazerShooter;
  34.     list[i++] = Recycler;
  35.     list[i++] = Shielder;
  36.     list[i++] = Subber;
  37.     list[i++] = Me;
  38.  
  39.     center.x = cmdline(0);  // prend les coordonnΘe
  40.     center.y = cmdline(1);  // du centre de la zone
  41.     center.z = 0;           // α patrouiller
  42.     distCent = cmdline(2);  // rayon de la zone
  43.     mp = 0.4;
  44.     minAlt = cmdline(3);
  45.  
  46.     lastPos = position;  // initialise
  47.     motor(mp, mp);       // en avant toute
  48.     while ( true )       // rΘpΦre α l'infini
  49.     {
  50.         target = radar(list, 0, 360, 0, 40);
  51.         if (target == null or topo(position)<minAlt)// pas de cible α proximitΘ
  52.         {                                      // ou pieds dans l'eau
  53.             if (distance2d(position, center) > distCent or topo(position)<minAlt)
  54.             {   // si la fourmi est en dehors de la zone
  55.                 motor(0, 0); //s'arrΩte
  56.                 wait(0.5);   //marque un arrΩt
  57.                 motor (-0.4, -0.4);//recule lentement
  58.                 wait (1.5);  //attend qu'ait reculΘ
  59.                 turn(direction(center));
  60.                 motor (mp, mp); //puis en avant toute
  61.                 do 
  62.                 {
  63.                     lastPos = position;
  64.                     wait(0.5); //tant que pas dans la zone
  65.                     if (distance2d(lastPos, position) < 0.1)
  66.                     {   //si elle est bloquΘe par obstacle
  67.                         turn(rand()*360-180);
  68.                         motor(mp, mp);
  69.                         wait(0.5);
  70.                         turn(direction(center));
  71.                     }
  72.                 }
  73.                 while (distance2d(position, center) > distCent or topo(position)<minAlt);
  74.             }
  75.             else
  76.             {   //si elle est bien dans la zone
  77.                 if (distance2d(lastPos, position) < 0.1)
  78.                 {   //si elle est bloquΘe par obstacle
  79.                     turn(rand()*360-180);
  80.                     motor(mp, mp);
  81.                     wait(0.5);
  82.                 }
  83.                 r = rand();
  84.                 if (r > 0.6)
  85.                 {  //dans un cas sur dix
  86.                     motor (mp, mp*0.5);// tourne α droite
  87.                     wait(rand()*2);// pendant un moment
  88.                     motor (mp, mp);  // puis tout droit
  89.                 }
  90.                 if (r < 0.4)
  91.                 {   //dans un cas sur dix
  92.                     motor (mp*0.5, mp);// tourne α gauche
  93.                     wait(rand()*2);// pendant un moment
  94.                     motor (mp, mp);  // puis tout droit
  95.                 }
  96.                 lastPos = position;
  97.                 if(r>0.4 and r<0.6) wait(1);//attend un moment
  98.             }
  99.         }
  100.         else
  101.         {   // si cible α proximitΘ
  102.             turn(direction(target.position));
  103.             fire(target.position); // tourne vers la cible
  104.         }
  105.     }
  106. }
  107.