home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2001 November / Gamestar_34_2001-11_cd1.bin / DEMA / colobotdemoe.exe / script / ANTice.TXT < prev    next >
Text File  |  2001-07-23  |  3KB  |  111 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        stdHight;    // Altitude du point de dΘpart
  10.     float        tolHight;    // tolΘrance acceptΘe par rapport α stdHight
  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.     stdHight = topo(position);//L'altitude dont il ne faut pas s'Θcarter
  44.     tolHight = 9;
  45.  
  46.     lastPos = position;    // initialise
  47.     motor(1,1);            // en avant toute
  48.     while ( true )        // rΘpΦre α l'infini
  49.     {
  50.         target = radar(WingedShooter);
  51.         if (target.position.y < 20
  52.         or abs(topo(position)-stdHight) > tolHight)//pas de cible α proximitΘ
  53.         {            // ou s'Θcarte trop de l'altitude de dΘpart
  54.             if (distance2d(position, center) > distCent or
  55.             abs(topo(position)-stdHight) > tolHight)
  56.             {   // si la fourmi est en dehors de la zone
  57.                 motor(0, 0); //s'arrΩte
  58.                 wait(0.5);   //marque un arrΩt
  59.                 motor (-0.5, -0.5);//recule lentement
  60.                 wait (1.5);  //attend qu'ait reculΘ
  61.                 turn(direction(center));
  62.                 motor (1, 1); //puis en avant toute
  63.                 do 
  64.                 {
  65.                     lastPos = position;
  66.                     wait(1); //tant que pas dans la zone
  67.                     if (distance2d(lastPos, position) < 0.2)
  68.                     {   //si elle est bloquΘe par obstacle
  69.                         turn(rand()*360-180);
  70.                         motor(1,1);
  71.                         wait(1);
  72.                         turn(direction(center));
  73.                     }
  74.                 }
  75.                 while (distance2d(position, center) > distCent or
  76.                     abs(topo(position)-stdHight) > tolHight);
  77.             }
  78.             else
  79.             {   //si elle est bien dans la zone
  80.                 if (distance2d(lastPos, position) < 0.2)
  81.                 {   //si elle est bloquΘe par obstacle
  82.                     turn(rand()*360-180);
  83.                     motor(1,1);
  84.                     wait(1);
  85.                 }
  86.                 r = rand();
  87.                 if (r > 0.6)
  88.                 {  //dans un cas sur dix
  89.                     motor (1, 0.5);// tourne α droite
  90.                     wait(rand()*3);// pendant un moment
  91.                     motor (1, 1);  // puis tout droit
  92.                 }
  93.                 if (r < 0.4)
  94.                 {   //dans un cas sur dix
  95.                     motor (0.5, 1);// tourne α gauche
  96.                     wait(rand()*3);// pendant un moment
  97.                     motor (1, 1);  // puis tout droit
  98.                 }
  99.                 lastPos = position;
  100.                 wait(1);          //attend un moment
  101.             }
  102.         }
  103.         else
  104.         {   // si cible α proximitΘ
  105.             turn(direction(target.position));
  106.             fire(target.position); // tourne vers la cible
  107.         }
  108.     }
  109. }
  110.  
  111.