home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 51 / PCGamer51_17Demos.iso / games / colobotdemo / colobotdemo10e.exe / script / ANTt41.TXT < prev    next >
Text File  |  2001-06-10  |  3KB  |  138 lines

  1. extern void object::Attack( )
  2. {
  3.     int         list[], i;  // liste des objets cherchΘs
  4.     object      target;     // info sur la cible
  5.     object      queen;      // info sur la reine
  6.     point       center;     // coordonnΘes du centre de la zone
  7.     float       distCent;    // rayon de la zone
  8.     float       r;            // valeur alΘatoire
  9.     int         ifTarget;    // si on a trouvΘ une cible et quel genre
  10.  
  11.     errmode(0);  // ne stoppe pas si erreur
  12.     while ( ismovie() != 0 )  wait(1);
  13.  
  14.     i = 0;
  15.     list[i++] = WingedGrabber;
  16.     list[i++] = TrackedGrabber;
  17.     list[i++] = WheeledGrabber;
  18.     list[i++] = LeggedGrabber;
  19.     list[i++] = WingedShooter;
  20.     list[i++] = TrackedShooter;
  21.     list[i++] = WheeledShooter;
  22.     list[i++] = LeggedShooter;
  23.     list[i++] = WingedOrgaShooter;
  24.     list[i++] = TrackedOrgaShooter;
  25.     list[i++] = WheeledOrgaShooter;
  26.     list[i++] = LeggedOrgaShooter;
  27.     list[i++] = WingedSniffer;
  28.     list[i++] = TrackedSniffer;
  29.     list[i++] = WheeledSniffer;
  30.     list[i++] = LeggedSniffer;
  31.     list[i++] = Thumper;
  32.     list[i++] = PhazerShooter;
  33.     list[i++] = Recycler;
  34.     list[i++] = Shielder;
  35.     list[i++] = Subber;
  36.     list[i++] = Me;
  37.  
  38.     center.x = -65; // prend les coordonnΘe
  39.     center.y = 255; // du centre de la zone
  40.     center.z = 0;   // α patrouiller
  41.     distCent = 140; // rayon de la zone
  42.  
  43.     motor(1,1);     // en avant toute
  44.     ifTarget = 0;   // pas de cible prΘcise
  45.     while ( true )  // rΘpΦte α l'infini
  46.     {
  47.         queen = radar(AlienMother);
  48.         if (rand() < 0.2 and queen != null) ifTarget = 2;//on retourne vers la reine
  49.         if (queen == null and ifTarget == 2) ifTarget = 0;
  50.         target = radar(list, 0, 360, 0, 40);
  51.         if (target != null) 
  52.         {
  53.             shoot(target.position);
  54.         }
  55.         else
  56.         {
  57.             if (ifTarget == 2)
  58.             {
  59.                 if(distance2d(position, queen.position)>8) head(queen.position);
  60.                 else ifTarget = 0;
  61.             }
  62.             else Random(center, distCent);
  63.         }
  64.     }
  65. }
  66.  
  67. void object::head(point tarPos)
  68. {
  69.     float  mp;// puissance du moteur
  70.     mp = direction(tarPos)/180;
  71.     //if (mp>1) mp = 1;
  72.     //if (mp<-1) mp = -1;
  73.     if (mp>0)
  74.     {
  75.         motor(1-mp,1);
  76.     }
  77.     else
  78.     {
  79.         motor(1,1+mp);
  80.     }
  81.     wait(1);
  82. }
  83.  
  84. void object::Random(point center, float distCent)
  85. {
  86.     if (distance2d(position, center) > distCent or topo(position)<2)
  87.     {
  88.         HorsZone(center, distCent);
  89.     }
  90.     else
  91.     {
  92.         DansZone();
  93.     }
  94. }
  95.  
  96. void object::HorsZone(point center, float distCent)
  97. {   // si la fourmi est en dehors de la zone
  98.     motor(0, 0); //s'arrΩte
  99.     wait(0.5);   //marque un arrΩt
  100.     motor (-0.5, -0.5);//recule lentement
  101.     wait (1.5);  //attend qu'ait reculΘ
  102.     turn(direction(center));
  103.     motor (1, 1); //puis en avant toute
  104.     do 
  105.     {
  106.         wait(1); //tant que pas dans la zone
  107.     }
  108.     while (distance2d(position, center) > distCent or topo(position)<2);
  109. }
  110.  
  111. void object::DansZone()
  112. {   //si elle est bien dans la zone
  113.     float r = rand();
  114.     if (r > 0.6)
  115.     {  //dans un cas sur dix
  116.         motor (1, 0.7); // tourne α droite
  117.         wait(rand()*3); // pendant un moment
  118.         motor (1, 1);   // puis tout droit
  119.     }
  120.     if (r < 0.4)
  121.     {   //dans un cas sur dix
  122.         motor (0.7, 1); // tourne α gauche
  123.         wait(rand()*3); // pendant un moment
  124.         motor (1, 1);   // puis tout droit
  125.     }
  126.     motor(1,1);
  127.     wait(1);            // attend un moment
  128. }
  129.  
  130. void object::shoot(point tarPos)
  131. {   // si cible α proximitΘ
  132.     turn(direction(tarPos));
  133.     fire(tarPos); // tourne vers la cible
  134.     fire(tarPos); // et tire deux fois
  135.     motor(1,1);   // avance
  136.     wait(1.5);    // pendant 1.5 s
  137. }
  138.