home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revista CD Expert 51
/
PCGamer51_17Demos.iso
/
games
/
colobotdemo
/
colobotdemo10e.exe
/
script
/
ANTice.TXT
< prev
next >
Wrap
Text File
|
2001-06-10
|
3KB
|
111 lines
extern void object::Attack( )
{
int list[], i; // liste des objets cherchΘs
object target; // info sur la cible
point center; // coordonnΘes du centre de la zone
point lastPos; // derniΦre position (pr test si bloquΘe)
float distCent; // rayon de la zone
float r; // valeur alΘatoire
float stdHight; // Altitude du point de dΘpart
float tolHight; // tolΘrance acceptΘe par rapport α stdHight
errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1);
i = 0;
list[i++] = WingedGrabber;
list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber;
list[i++] = WingedShooter;
list[i++] = TrackedShooter;
list[i++] = WheeledShooter;
list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer;
list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer;
list[i++] = Thumper;
list[i++] = PhazerShooter;
list[i++] = Recycler;
list[i++] = Shielder;
list[i++] = Subber;
// list[i++] = Me;
center.x = cmdline(0); // prend les coordonnΘe
center.y = cmdline(1); // du centre de la zone
center.z = 0; // α patrouiller
distCent = cmdline(2); // rayon de la zone
stdHight = topo(position);//L'altitude dont il ne faut pas s'Θcarter
tolHight = 9;
lastPos = position; // initialise
motor(1,1); // en avant toute
while ( true ) // rΘpΦre α l'infini
{
target = radar(WingedShooter);
if (target.position.y < 20
or abs(topo(position)-stdHight) > tolHight)//pas de cible α proximitΘ
{ // ou s'Θcarte trop de l'altitude de dΘpart
if (distance2d(position, center) > distCent or
abs(topo(position)-stdHight) > tolHight)
{ // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrΩte
wait(0.5); //marque un arrΩt
motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculΘ
turn(direction(center));
motor (1, 1); //puis en avant toute
do
{
lastPos = position;
wait(1); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquΘe par obstacle
turn(rand()*360-180);
motor(1,1);
wait(1);
turn(direction(center));
}
}
while (distance2d(position, center) > distCent or
abs(topo(position)-stdHight) > tolHight);
}
else
{ //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquΘe par obstacle
turn(rand()*360-180);
motor(1,1);
wait(1);
}
r = rand();
if (r > 0.6)
{ //dans un cas sur dix
motor (1, 0.5);// tourne α droite
wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit
}
if (r < 0.4)
{ //dans un cas sur dix
motor (0.5, 1);// tourne α gauche
wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit
}
lastPos = position;
wait(1); //attend un moment
}
}
else
{ // si cible α proximitΘ
turn(direction(target.position));
fire(target.position); // tourne vers la cible
}
}
}