home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 51 / PCGamer51_17Demos.iso / games / colobotdemo / colobotdemo10e.exe / script / ANTec.TXT < prev    next >
Text File  |  2001-06-10  |  3KB  |  116 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       distLim;    // rayon α ne pas dΘpasser
  9.     float        r;        // valeur alΘatoire
  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 = cmdline(0);    // prend les coordonnΘe
  39.     center.y = cmdline(1);    // du centre de la zone
  40.     center.z = 0;        // α exclure
  41.     distCent = cmdline(2);     // rayon de la zone
  42.     distLim = cmdline(3);
  43.  
  44.     lastPos = position;    // initialise
  45.     turn(rand()*360-180);
  46.     motor(1,1);            // en avant toute
  47.     while ( true )        // rΘpΦre α l'infini
  48.     {
  49.         target = radar(list, 0, 360, 0, 40);
  50.         if (target == null or topo(position)<0)// pas de cible α proximitΘ
  51.         {                                      // ou pieds dans l'eau
  52.             if (distance2d(position, center) < distCent
  53.             or distance2d(position, center) > distLim
  54.             or topo(position)<0)
  55.             {   // si la fourmi est dans la zone interdite
  56.                 motor(0, 0); //s'arrΩte
  57.                 wait(0.5);   //marque un arrΩt
  58.                 motor (-0.5, -0.5);//recule lentement
  59.                 wait (1.5);  //attend qu'ait reculΘ
  60.                 if (distance2d(position, center) < distCent+20)
  61.                 {     //si trop proche du centre
  62.                     if (direction(center)>0) turn(direction(center)-180); else turn(direction(center)+180);
  63.                     motor (1, 1); //puis en avant toute
  64.                     do 
  65.                     {
  66.                         wait(1);
  67.                     }
  68.                     while (distance2d(position, center) < distCent or topo(position)<0);
  69.                 }
  70.                 else
  71.                 {          //si trop loin du centre
  72.                     turn(direction(center));
  73.                     motor (1, 1); //puis en avant toute
  74.                     do 
  75.                     {
  76.                         wait(1); //tant que pas dans la zone
  77.                     }
  78.                     while (distance2d(position, center) > distLim or topo(position)<0);
  79.                 }
  80.             }
  81.             else
  82.             {   //si elle est bien dans la zone
  83.                 if (distance2d(lastPos, position) < 0.2)
  84.                 {   //si elle est bloquΘe par obstacle
  85.                     turn(rand()*360-180);
  86.                     motor(1,1);
  87.                     wait(1);
  88.                 }
  89.                 r = rand();
  90.                 if (r > 0.7)
  91.                 {  //dans un cas sur dix
  92.                     motor (1, 0.8);// tourne α droite
  93.                     wait(rand()*3);// pendant un moment
  94.                     motor (1, 1);  // puis tout droit
  95.                 }
  96.                 if (r < 0.3)
  97.                 {   //dans un cas sur dix
  98.                     motor (0.8, 1);// tourne α gauche
  99.                     wait(rand()*3);// pendant un moment
  100.                     motor (1, 1);  // puis tout droit
  101.                 }
  102.                 lastPos = position;
  103.                 wait(1);          //attend un moment
  104.             }
  105.         }
  106.         else
  107.         {   // si cible α proximitΘ
  108.             turn(direction(target.position));
  109.             fire(target.position); // et tire deux fois
  110.             motor(1,1);            // avance
  111.             wait(1.5);             // pendant 1.5 s
  112.         }
  113.     }
  114. }
  115.  
  116.