home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 51 / PCGamer51_17Demos.iso / games / colobotdemo / colobotdemo10e.exe / script / ANTt42.TXT < prev    next >
Text File  |  2001-06-10  |  3KB  |  133 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.     float    distCent;  // rayon de la zone
  7.     float    r;         // valeur alΘatoire
  8.     int      ifTarget;  // si on a trouvΘ une cible et quel genre
  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 = -65; // prend les coordonnΘe
  38.     center.y = 255; // du centre de la zone
  39.     center.z = 0;   // α patrouiller
  40.     distCent = 140; // rayon de la zone
  41.  
  42.     motor(1,1);     // en avant toute
  43.     ifTarget = 0;   // pas de cible prΘcise
  44.     while ( true )  // rΘpΦte α l'infini
  45.     {
  46.         target = radar(list);
  47.         if(target.position.y > 65)
  48.         {
  49.             if(distance2d(position, target.position)<40)
  50.             {
  51.                 shoot(target.position);
  52.             }
  53.             else
  54.             {
  55.                 head(target.position);
  56.             }
  57.         }
  58.         else Random(center, distCent);
  59.     }
  60. }
  61.  
  62. void object::head(point tarPos)
  63. {
  64.     float  mp;// puissance du moteur
  65.     mp = direction(tarPos)/180;
  66.     //if (mp>1) mp = 1;
  67.     //if (mp<-1) mp = -1;
  68.     if (mp>0)
  69.     {
  70.         motor(1-mp,1);
  71.     }
  72.     else
  73.     {
  74.         motor(1,1+mp);
  75.     }
  76.     wait(1);
  77. }
  78.  
  79. void object::Random(point center, float distCent)
  80. {
  81.     if (distance2d(position, center) > distCent or topo(position)<2)
  82.     {
  83.         HorsZone(center, distCent);
  84.     }
  85.     else
  86.     {
  87.         DansZone();
  88.     }
  89. }
  90.  
  91. void object::HorsZone(point center, float distCent)
  92. {   // si la fourmi est en dehors de la zone
  93.     motor(0, 0); //s'arrΩte
  94.     wait(0.5);   //marque un arrΩt
  95.     motor (-0.5, -0.5);//recule lentement
  96.     wait (1.5);  //attend qu'ait reculΘ
  97.     turn(direction(center));
  98.     motor (1, 1); //puis en avant toute
  99.     do 
  100.     {
  101.         wait(1); //tant que pas dans la zone
  102.     }
  103.     while (distance2d(position, center) > distCent or topo(position)<2);
  104. }
  105.  
  106. void object::DansZone()
  107. {   //si elle est bien dans la zone
  108.     float r = rand();
  109.     if (r > 0.8)
  110.     {  //dans un cas sur dix
  111.         motor (1, 0.8); // tourne α droite
  112.         wait(rand()*2); // pendant un moment
  113.         motor (1, 1);   // puis tout droit
  114.     }
  115.     if (r < 0.2)
  116.     {   //dans un cas sur dix
  117.         motor (0.8, 1); // tourne α gauche
  118.         wait(rand()*2); // pendant un moment
  119.         motor (1, 1);   // puis tout droit
  120.     }
  121.     motor(1,1);
  122.     wait(1);            //attend un moment
  123. }
  124.  
  125. void object::shoot(point tarPos)
  126. {   // si cible α proximitΘ
  127.     turn(direction(tarPos));
  128.     fire(tarPos); // tourne vers la cible
  129.     fire(tarPos); // et tire deux fois
  130.     motor(1,1);   // avance
  131.     wait(1.5);    // pendant 1.5 s
  132. }
  133.