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