home *** CD-ROM | disk | FTP | other *** search
- extern void object::Attack( )
- {
- int list[], i; // liste des objets cherchΘs
- object target; // info sur la cible
- point lastPos; // derniΦre position (pr test si bloquΘe)
- float distTar; // distance de la cible
- float dirTar; // direction de la cible
- float r; // valeur alΘatoire
- float mp; // puissance moteur
- float tangle; // angle d'esquive en cas d'eau
- boolean ifmove; // si on avance en tirant ou pas
-
- 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;
- list[i++] = Derrick;
- list[i++] = BotFactory;
- list[i++] = PowerStation;
- list[i++] = Converter;
- list[i++] = RepairCenter;
- list[i++] = DefenseTower;
- list[i++] = ResearchCenter;
- list[i++] = RadarStation;
- list[i++] = ExchangePost;
- list[i++] = PowerPlant;
- list[i++] = AutoLab;
- list[i++] = NuclearPlant;
-
- wait(cmdline(0)); // attend pour entrer en action
- lastPos = position; // initialise
- ifmove = true;
- while ( true ) // rΘpΦte α l'infini
- {
- target = radar(list);
- dirTar = direction(target.position);
- distTar = distance(position, target.position);
- if(distTar<30)
- {
- turn(dirTar);
- fire(target.position);
- target = radar(list);
- turn(direction(target.position));
- for(int i=0; i<3; i=i+1)
- {
- if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove)
- {
- ifmove = false;
- }
- else
- {
- lastPos = position;
- motor(1,1);
- wait(0.5);
- if (distance(position, lastPos) < 0.2) ifmove = false;
- }
- }
- }
- else
- {
- ifmove = true;
- if (distance(lastPos, position) < 0.2)
- { //si elle est bloquΘe par obstacle
- lastPos = position;
- turn(rand()*360-180);
- motor(1,1);
- wait(1);
- target = radar(list);
- turn(direction(target.position));
- }
- else
- {
- lastPos = position;
- if (topo(position)>1)
- {
- mp = direction(target.position)/180;
- //if (mp>1) mp = 1;
- //if (mp<-1) mp = -1;
- if (mp>0)
- {
- motor(1-mp,1);
- }
- else
- {
- motor(1,1+mp);
- }
- wait(1);
- }
- else
- {
- motor (-0.5, -0.5);
- wait(1.5);
- target = radar(list);
- turn(direction(target.position));
- tangle = 0;
- do
- {
- tangle = tangle + 22.5;
- if (tp(tangle) == 0) break;
- tangle = -tangle;
- if (tp(tangle) == 0) break;
- tangle = -tangle;
- if (tangle > 180) break;
- }
- while (true);
- turn(tangle);
- motor(1,1);
- wait(2);
- }
- }
- }
- }
- }
-
- int object::tp(float angle)
- {
- point tpoint;
-
- tpoint.x = position.x + cos(orientation + angle)*10;
- tpoint.y = position.y + sin(orientation + angle)*10;
- tpoint.z = 0;
- if (topo(tpoint) < 1.5) return(1); else return(0);
- }
-