Transform CRLF to LF line endings

Used GNU sed: sed 's/\x0D$//' -i *.txt */*.txt */*/*.txt
dev-ui
Didier Raboud 2012-12-29 11:30:42 +01:00
parent 9d829d6a14
commit d8ca5548f0
473 changed files with 13736 additions and 13744 deletions

View File

@ -1,53 +1,53 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
while ( true ) while ( true )
{ {
p = radar(WingedShooter, 0, 360, 0, 50); p = radar(WingedShooter, 0, 360, 0, 50);
if ( p == null ) if ( p == null )
{ {
nav1.x = position.x-5; nav1.x = position.x-5;
nav1.y = position.y; nav1.y = position.y;
nav2.x = position.x+5; nav2.x = position.x+5;
nav2.y = position.y; nav2.y = position.y;
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(WingedShooter, 0, 360, 0, 50); p = radar(WingedShooter, 0, 360, 0, 50);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(WingedShooter, 0, 360, 0, 50); p = radar(WingedShooter, 0, 360, 0, 50);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 40 && !advance ) if ( dist <= 40 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
prox = dist-5; prox = dist-5;
if ( prox > 40 ) prox = 40; if ( prox > 40 ) prox = 40;
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }

View File

@ -1,95 +1,95 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point dest; point dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
wait(cmdline(0)); wait(cmdline(0));
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 1000); p = radar(list, 0, 360, 0, 1000);
if ( p == null ) if ( p == null )
{ {
wait(2); wait(2);
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 40 && !advance ) if ( dist <= 40 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
//? if ( RetBaseDistance() > 20 ) //? if ( RetBaseDistance() > 20 )
{ {
prox = dist-(5+rand()*5); prox = dist-(5+rand()*5);
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }
} }
// Calcule la distance jusqu'à la base. // Calcule la distance jusqu'à la base.
float object::RetBaseDistance() float object::RetBaseDistance()
{ {
object p; object p;
float dist; float dist;
p = radar(SpaceShip, 0, 360, 0, 1000); p = radar(SpaceShip, 0, 360, 0, 1000);
if ( p == null ) return 1000; if ( p == null ) return 1000;
dist = distance(p.position, position); dist = distance(p.position, position);
return dist; return dist;
} }

View File

@ -1,91 +1,91 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p == null ) if ( p == null )
{ {
nav1.x = position.x-5; nav1.x = position.x-5;
nav1.y = position.y; nav1.y = position.y;
nav2.x = position.x+5; nav2.x = position.x+5;
nav2.y = position.y; nav2.y = position.y;
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 40 && !advance ) if ( dist <= 40 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
prox = dist-5; prox = dist-5;
if ( prox > 40 ) prox = 40; if ( prox > 40 ) prox = 40;
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }

View File

@ -1,59 +1,59 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; int list[], i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
nav1.x = cmdline(0); nav1.x = cmdline(0);
nav1.y = cmdline(1); nav1.y = cmdline(1);
nav2.x = cmdline(2); nav2.x = cmdline(2);
nav2.y = cmdline(3); nav2.y = cmdline(3);
while ( true ) while ( true )
{ {
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p == null ) break; if ( p == null ) break;
fire(p.position); fire(p.position);
} }
goto(nav1); goto(nav1);
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p == null ) break; if ( p == null ) break;
fire(p.position); fire(p.position);
} }
goto(nav2); goto(nav2);
} }
} }

View File

@ -1,62 +1,62 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; int list[], i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
nav1.x = cmdline(0); nav1.x = cmdline(0);
nav1.y = cmdline(1); nav1.y = cmdline(1);
nav2.x = cmdline(2); nav2.x = cmdline(2);
nav2.y = cmdline(3); nav2.y = cmdline(3);
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p == null ) if ( p == null )
{ {
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
fire(p.position); fire(p.position);
} }
} }
} }

View File

@ -1,18 +1,18 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
point nav1, nav2; point nav1, nav2;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
nav1.x = cmdline(0); nav1.x = cmdline(0);
nav1.y = cmdline(1); nav1.y = cmdline(1);
nav2.x = cmdline(2); nav2.x = cmdline(2);
nav2.y = cmdline(3); nav2.y = cmdline(3);
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
goto(nav2); goto(nav2);
} }
} }

View File

@ -1,86 +1,86 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 30); p = radar(list, 0, 360, 0, 30);
if ( p == null ) if ( p == null )
{ {
nav1.x = position.x-5; nav1.x = position.x-5;
nav1.y = position.y; nav1.y = position.y;
nav2.x = position.x+5; nav2.x = position.x+5;
nav2.y = position.y; nav2.y = position.y;
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(list, 0, 360, 0, 30); p = radar(list, 0, 360, 0, 30);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(list, 0, 360, 0, 30); p = radar(list, 0, 360, 0, 30);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist < 5 ) if ( dist < 5 )
{ {
fire(p.position); fire(p.position);
} }
else else
{ {
prox = dist+5; // fuite prox = dist+5; // fuite
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
} }
} }
} }
} }

View File

@ -1,67 +1,67 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; int list[], i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
nav1.x = cmdline(0); nav1.x = cmdline(0);
nav1.y = cmdline(1); nav1.y = cmdline(1);
nav2.x = cmdline(2); nav2.x = cmdline(2);
nav2.y = cmdline(3); nav2.y = cmdline(3);
while ( true ) while ( true )
{ {
while ( ismovie() != 0 ) // film en cours ? while ( ismovie() != 0 ) // film en cours ?
{ {
wait(1); wait(1);
} }
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p == null ) if ( p == null )
{ {
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
fire(p.position); fire(p.position);
} }
} }
} }

View File

@ -1,91 +1,91 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 200); p = radar(list, 0, 360, 0, 200);
if ( p == null ) if ( p == null )
{ {
nav1.x = position.x-5; nav1.x = position.x-5;
nav1.y = position.y; nav1.y = position.y;
nav2.x = position.x+5; nav2.x = position.x+5;
nav2.y = position.y; nav2.y = position.y;
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(list, 0, 360, 0, 200); p = radar(list, 0, 360, 0, 200);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(list, 0, 360, 0, 200); p = radar(list, 0, 360, 0, 200);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 40 && !advance ) if ( dist <= 40 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
prox = dist-5; prox = dist-5;
if ( prox > 40 ) prox = 40; if ( prox > 40 ) prox = 40;
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }

View File

@ -1,93 +1,93 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point dest; point dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 1000); p = radar(list, 0, 360, 0, 1000);
if ( p == null ) if ( p == null )
{ {
wait(2); wait(2);
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 40 && !advance ) if ( dist <= 40 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
//? if ( RetBaseDistance() > 20 ) //? if ( RetBaseDistance() > 20 )
{ {
prox = dist-(5+rand()*5); prox = dist-(5+rand()*5);
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }
} }
// Calcule la distance jusqu'à la base. // Calcule la distance jusqu'à la base.
float object::RetBaseDistance() float object::RetBaseDistance()
{ {
object p; object p;
float dist; float dist;
p = radar(SpaceShip, 0, 360, 0, 1000); p = radar(SpaceShip, 0, 360, 0, 1000);
if ( p == null ) return 1000; if ( p == null ) return 1000;
dist = distance(p.position, position); dist = distance(p.position, position);
return dist; return dist;
} }

View File

@ -1,95 +1,95 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point dest; point dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
wait(cmdline(0)); wait(cmdline(0));
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 1000); p = radar(list, 0, 360, 0, 1000);
if ( p == null ) if ( p == null )
{ {
wait(2); wait(2);
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 20 && !advance ) if ( dist <= 20 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
//? if ( RetBaseDistance() > 20 ) //? if ( RetBaseDistance() > 20 )
{ {
prox = dist-(5+rand()*5); prox = dist-(5+rand()*5);
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest, 0, 6); goto(dest, 0, 6);
advance = false; advance = false;
} }
} }
} }
} }
} }
// Calcule la distance jusqu'à la base. // Calcule la distance jusqu'à la base.
float object::RetBaseDistance() float object::RetBaseDistance()
{ {
object p; object p;
float dist; float dist;
p = radar(SpaceShip, 0, 360, 0, 1000); p = radar(SpaceShip, 0, 360, 0, 1000);
if ( p == null ) return 1000; if ( p == null ) return 1000;
dist = distance(p.position, position); dist = distance(p.position, position);
return dist; return dist;
} }

View File

@ -1,92 +1,92 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; int list[], i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean lock, advance; boolean lock, advance;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
nav1.x = cmdline(0); nav1.x = cmdline(0);
nav1.y = cmdline(1); nav1.y = cmdline(1);
nav2.x = cmdline(2); nav2.x = cmdline(2);
nav2.y = cmdline(3); nav2.y = cmdline(3);
lock = false; lock = false;
while ( !lock ) while ( !lock )
{ {
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) if ( p != null )
{ {
fire(p.position); fire(p.position);
lock = true; lock = true;
break; break;
} }
goto(nav1); goto(nav1);
p = radar(list, 0, 360, 0, 40); p = radar(list, 0, 360, 0, 40);
if ( p != null ) if ( p != null )
{ {
fire(p.position); fire(p.position);
lock = true; lock = true;
break; break;
} }
goto(nav2); goto(nav2);
} }
advance = true; advance = true;
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 1000); p = radar(list, 0, 360, 0, 1000);
if ( p == null ) if ( p == null )
{ {
wait(1); wait(1);
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 40 && !advance ) if ( dist <= 40 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
} }
else else
{ {
prox = dist-5; prox = dist-5;
if ( prox > 40 ) prox = 40; if ( prox > 40 ) prox = 40;
if ( prox < 5 ) prox = 5; if ( prox < 5 ) prox = 5;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }

View File

@ -1,145 +1,145 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distTar; // distance de la cible float distTar; // distance de la cible
float dirTar; // direction de la cible float dirTar; // direction de la cible
float r; // valeur aléatoire float r; // valeur aléatoire
float mp; // puissance moteur float mp; // puissance moteur
float tangle; // angle d'esquive en cas d'eau float tangle; // angle d'esquive en cas d'eau
boolean ifmove; // si on avance en tirant ou pas boolean ifmove; // si on avance en tirant ou pas
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
wait(cmdline(0)); // attend pour entrer en action wait(cmdline(0)); // attend pour entrer en action
lastPos = position; // initialise lastPos = position; // initialise
ifmove = true; ifmove = true;
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list); target = radar(list);
dirTar = direction(target.position); dirTar = direction(target.position);
distTar = distance(position, target.position); distTar = distance(position, target.position);
if(distTar<30) if(distTar<30)
{ {
turn(dirTar); turn(dirTar);
fire(target.position); fire(target.position);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
for(int i=0; i<3; i=i+1) for(int i=0; i<3; i=i+1)
{ {
if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove) if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove)
{ {
ifmove = false; ifmove = false;
} }
else else
{ {
lastPos = position; lastPos = position;
motor(1,1); motor(1,1);
wait(0.5); wait(0.5);
if (distance(position, lastPos) < 0.2) ifmove = false; if (distance(position, lastPos) < 0.2) ifmove = false;
} }
} }
} }
else else
{ {
ifmove = true; ifmove = true;
if (distance(lastPos, position) < 0.2) if (distance(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
lastPos = position; lastPos = position;
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
} }
else else
{ {
lastPos = position; lastPos = position;
if (topo(position)>1) if (topo(position)>1)
{ {
mp = direction(target.position)/180; mp = direction(target.position)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
else else
{ {
motor (-0.5, -0.5); motor (-0.5, -0.5);
wait(1.5); wait(1.5);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
tangle = 0; tangle = 0;
do do
{ {
tangle = tangle + 22.5; tangle = tangle + 22.5;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tangle > 180) break; if (tangle > 180) break;
} }
while (true); while (true);
turn(tangle); turn(tangle);
motor(1,1); motor(1,1);
wait(2); wait(2);
} }
} }
} }
} }
} }
int object::tp(float angle) int object::tp(float angle)
{ {
point tpoint; point tpoint;
tpoint.x = position.x + cos(orientation + angle)*10; tpoint.x = position.x + cos(orientation + angle)*10;
tpoint.y = position.y + sin(orientation + angle)*10; tpoint.y = position.y + sin(orientation + angle)*10;
tpoint.z = 0; tpoint.z = 0;
if (topo(tpoint) < 1.5) return(1); else return(0); if (topo(tpoint) < 1.5) return(1); else return(0);
} }

View File

@ -1,145 +1,145 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distTar; // distance de la cible float distTar; // distance de la cible
float dirTar; // direction de la cible float dirTar; // direction de la cible
float r; // valeur aléatoire float r; // valeur aléatoire
float mp; // puissance moteur float mp; // puissance moteur
float tangle; // angle d'esquive en cas d'eau float tangle; // angle d'esquive en cas d'eau
boolean ifmove; // si on avance en tirant ou pas boolean ifmove; // si on avance en tirant ou pas
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
wait(cmdline(0)); // attend pour entrer en action wait(cmdline(0)); // attend pour entrer en action
lastPos = position; // initialise lastPos = position; // initialise
ifmove = true; ifmove = true;
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list); target = radar(list);
dirTar = direction(target.position); dirTar = direction(target.position);
distTar = distance(position, target.position); distTar = distance(position, target.position);
if(distTar<40) if(distTar<40)
{ {
turn(dirTar); turn(dirTar);
fire(target.position); fire(target.position);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
for(int i=0; i<3; i=i+1) for(int i=0; i<3; i=i+1)
{ {
if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove) if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove)
{ {
ifmove = false; ifmove = false;
} }
else else
{ {
lastPos = position; lastPos = position;
motor(1,1); motor(1,1);
wait(0.5); wait(0.5);
if (distance(position, lastPos) < 0.2) ifmove = false; if (distance(position, lastPos) < 0.2) ifmove = false;
} }
} }
} }
else else
{ {
ifmove = true; ifmove = true;
if (distance(lastPos, position) < 0.2) if (distance(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
lastPos = position; lastPos = position;
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
} }
else else
{ {
lastPos = position; lastPos = position;
if (topo(position)>1) if (topo(position)>1)
{ {
mp = direction(target.position)/180; mp = direction(target.position)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
else else
{ {
motor (-0.5, -0.5); motor (-0.5, -0.5);
wait(1.5); wait(1.5);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
tangle = 0; tangle = 0;
do do
{ {
tangle = tangle + 22.5; tangle = tangle + 22.5;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tangle > 180) break; if (tangle > 180) break;
} }
while (true); while (true);
turn(tangle); turn(tangle);
motor(1,1); motor(1,1);
wait(2); wait(2);
} }
} }
} }
} }
} }
int object::tp(float angle) int object::tp(float angle)
{ {
point tpoint; point tpoint;
tpoint.x = position.x + cos(orientation + angle)*10; tpoint.x = position.x + cos(orientation + angle)*10;
tpoint.y = position.y + sin(orientation + angle)*10; tpoint.y = position.y + sin(orientation + angle)*10;
tpoint.z = 0; tpoint.z = 0;
if (topo(tpoint) < 1.5) return(1); else return(0); if (topo(tpoint) < 1.5) return(1); else return(0);
} }

View File

@ -1,145 +1,145 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distTar; // distance de la cible float distTar; // distance de la cible
float dirTar; // direction de la cible float dirTar; // direction de la cible
float r; // valeur aléatoire float r; // valeur aléatoire
float mp; // puissance moteur float mp; // puissance moteur
float tangle; // angle d'esquive en cas d'eau float tangle; // angle d'esquive en cas d'eau
boolean ifmove; // si on avance en tirant ou pas boolean ifmove; // si on avance en tirant ou pas
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
// wait(cmdline(0)); // attend pour entrer en action // wait(cmdline(0)); // attend pour entrer en action
lastPos = position; // initialise lastPos = position; // initialise
ifmove = true; ifmove = true;
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list); target = radar(list);
dirTar = direction(target.position); dirTar = direction(target.position);
distTar = distance(position, target.position); distTar = distance(position, target.position);
if(distTar<40) if(distTar<40)
{ {
turn(dirTar); turn(dirTar);
fire(target.position); fire(target.position);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
for(int i=0; i<3; i=i+1) for(int i=0; i<3; i=i+1)
{ {
if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove) if(topo(position)<2 or distance(position, target.position) < 8 or !ifmove)
{ {
ifmove = false; ifmove = false;
} }
else else
{ {
lastPos = position; lastPos = position;
motor(1,1); motor(1,1);
wait(0.5); wait(0.5);
if (distance(position, lastPos) < 0.2) ifmove = false; if (distance(position, lastPos) < 0.2) ifmove = false;
} }
} }
} }
else else
{ {
ifmove = true; ifmove = true;
if (distance(lastPos, position) < 0.2) if (distance(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
lastPos = position; lastPos = position;
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
} }
else else
{ {
lastPos = position; lastPos = position;
if (topo(position)>1) if (topo(position)>1)
{ {
mp = direction(target.position)/180; mp = direction(target.position)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
else else
{ {
motor (-0.5, -0.5); motor (-0.5, -0.5);
wait(1.5); wait(1.5);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
tangle = 0; tangle = 0;
do do
{ {
tangle = tangle + 22.5; tangle = tangle + 22.5;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tangle > 180) break; if (tangle > 180) break;
} }
while (true); while (true);
turn(tangle); turn(tangle);
motor(1,1); motor(1,1);
wait(2); wait(2);
} }
} }
} }
} }
} }
int object::tp(float angle) int object::tp(float angle)
{ {
point tpoint; point tpoint;
tpoint.x = position.x + cos(orientation + angle)*10; tpoint.x = position.x + cos(orientation + angle)*10;
tpoint.y = position.y + sin(orientation + angle)*10; tpoint.y = position.y + sin(orientation + angle)*10;
tpoint.z = 0; tpoint.z = 0;
if (topo(tpoint) < 1.5) return(1); else return(0); if (topo(tpoint) < 1.5) return(1); else return(0);
} }

View File

@ -1,115 +1,115 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float distLim; // rayon à ne pas dépasser float distLim; // rayon à ne pas dépasser
float r; // valeur aléatoire float r; // valeur aléatoire
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à exclure center.z = 0; // à exclure
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
distLim = cmdline(3); distLim = cmdline(3);
lastPos = position; // initialise lastPos = position; // initialise
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); // en avant toute motor(1,1); // en avant toute
while ( true ) // répère à l'infini while ( true ) // répère à l'infini
{ {
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target == null or topo(position)<0)// pas de cible à proximité if (target == null or topo(position)<0)// pas de cible à proximité
{ // ou pieds dans l'eau { // ou pieds dans l'eau
if (distance2d(position, center) < distCent if (distance2d(position, center) < distCent
or distance2d(position, center) > distLim or distance2d(position, center) > distLim
or topo(position)<0) or topo(position)<0)
{ // si la fourmi est dans la zone interdite { // si la fourmi est dans la zone interdite
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
if (distance2d(position, center) < distCent+20) if (distance2d(position, center) < distCent+20)
{ //si trop proche du centre { //si trop proche du centre
if (direction(center)>0) turn(direction(center)-180); else turn(direction(center)+180); if (direction(center)>0) turn(direction(center)-180); else turn(direction(center)+180);
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
wait(1); wait(1);
} }
while (distance2d(position, center) < distCent or topo(position)<0); while (distance2d(position, center) < distCent or topo(position)<0);
} }
else else
{ //si trop loin du centre { //si trop loin du centre
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
} }
while (distance2d(position, center) > distLim or topo(position)<0); while (distance2d(position, center) > distLim or topo(position)<0);
} }
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
} }
r = rand(); r = rand();
if (r > 0.7) if (r > 0.7)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.8);// tourne à droite motor (1, 0.8);// tourne à droite
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.3) if (r < 0.3)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.8, 1);// tourne à gauche motor (0.8, 1);// tourne à gauche
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
lastPos = position; lastPos = position;
wait(1); //attend un moment wait(1); //attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
turn(direction(target.position)); turn(direction(target.position));
fire(target.position); // et tire deux fois fire(target.position); // et tire deux fois
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }
} }
} }

View File

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

View File

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

View File

@ -1,113 +1,113 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
float stdHight; // Altitude du point de départ float stdHight; // Altitude du point de départ
float tolHight; // tolérance acceptée par rapport à stdHight float tolHight; // tolérance acceptée par rapport à stdHight
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
stdHight = topo(position);//L'altitude dont il ne faut pas s'écarter stdHight = topo(position);//L'altitude dont il ne faut pas s'écarter
tolHight = cmdline(3); // tolérance admise tolHight = cmdline(3); // tolérance admise
lastPos = position; // initialise lastPos = position; // initialise
motor(1,1); // en avant toute motor(1,1); // en avant toute
while ( true ) // répère à l'infini while ( true ) // répère à l'infini
{ {
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target == null if (target == null
or topo(position)-stdHight > tolHight or topo(position)-stdHight > tolHight
or stdHight-topo(position) > tolHight)//pas de cible à proximité or stdHight-topo(position) > tolHight)//pas de cible à proximité
{ // ou s'écarte trop de l'altitude de départ { // ou s'écarte trop de l'altitude de départ
if (distance2d(position, center) > distCent if (distance2d(position, center) > distCent
or abs(topo(position)-stdHight) > tolHight) or abs(topo(position)-stdHight) > tolHight)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
lastPos = position; lastPos = position;
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
turn(direction(center)); turn(direction(center));
} }
} }
while (distance2d(position, center) > distCent or while (distance2d(position, center) > distCent or
abs(topo(position)-stdHight) > tolHight); abs(topo(position)-stdHight) > tolHight);
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
} }
r = rand(); r = rand();
if (r > 0.6) if (r > 0.6)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.7);// tourne à droite motor (1, 0.7);// tourne à droite
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.4) if (r < 0.4)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.7, 1);// tourne à gauche motor (0.7, 1);// tourne à gauche
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
lastPos = position; lastPos = position;
wait(1); //attend un moment wait(1); //attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
turn(direction(target.position)); turn(direction(target.position));
fire(target.position); // tourne vers la cible fire(target.position); // tourne vers la cible
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }
} }
} }

View File

@ -1,216 +1,216 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
float distTar; // distance de la cible float distTar; // distance de la cible
float dirTar; // direction de la cible float dirTar; // direction de la cible
float mp; // puissance moteur float mp; // puissance moteur
float tangle; // angle d'esquive en cas d'eau float tangle; // angle d'esquive en cas d'eau
boolean ifmove; // si on avance en tirant ou pas boolean ifmove; // si on avance en tirant ou pas
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
lastPos = position; // initialise lastPos = position; // initialise
motor(1,1); // en avant toute motor(1,1); // en avant toute
while (radar(list, 0, 360, 0, 40) == null) // répète jusqu'à contact while (radar(list, 0, 360, 0, 40) == null) // répète jusqu'à contact
{ {
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target == null or topo(position)<0)// pas de cible à proximité if (target == null or topo(position)<0)// pas de cible à proximité
{ // ou pieds dans l'eau { // ou pieds dans l'eau
if (distance2d(position, center) > distCent or topo(position)<0) if (distance2d(position, center) > distCent or topo(position)<0)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
if (direction(center)>0) motor (0,1); else motor (1,0); if (direction(center)>0) motor (0,1); else motor (1,0);
do wait(0.2); //tourne vers le centre do wait(0.2); //tourne vers le centre
while (direction(center) > 20 while (direction(center) > 20
or direction(center) < -20); or direction(center) < -20);
//tant que pas orienté vers le centre //tant que pas orienté vers le centre
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
lastPos = position; lastPos = position;
wait(0.5); //tant que pas dans la zone wait(0.5); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
turn(direction(center)); turn(direction(center));
} }
} }
while (distance2d(position, center) > distCent or topo(position)<0); while (distance2d(position, center) > distCent or topo(position)<0);
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
} }
r = rand(); r = rand();
if (r > 0.9) if (r > 0.9)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.5);// tourne à droite motor (1, 0.5);// tourne à droite
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.1) if (r < 0.1)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.5, 1);// tourne à gauche motor (0.5, 1);// tourne à gauche
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
lastPos = position; lastPos = position;
wait(0.2); //attend un moment wait(0.2); //attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
turn(direction(target.position)); turn(direction(target.position));
fire(target.position); // tourne vers la cible fire(target.position); // tourne vers la cible
fire(target.position); // et tire deux fois fire(target.position); // et tire deux fois
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }
} }
//a eu un contact avec l'astronaute //a eu un contact avec l'astronaute
lastPos = position; // initialise lastPos = position; // initialise
ifmove = true; ifmove = true;
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list); target = radar(list);
dirTar = direction(target.position); dirTar = direction(target.position);
distTar = distance(position, target.position); distTar = distance(position, target.position);
if (target != null) if (target != null)
{ {
if(distTar<40) if(distTar<40)
{ {
turn(dirTar); turn(dirTar);
fire(target.position); fire(target.position);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
for(int i=0; i<3; i=i+1) for(int i=0; i<3; i=i+1)
{ {
if(topo(position)<1.5 or distance(position, target.position) < 8 or !ifmove) if(topo(position)<1.5 or distance(position, target.position) < 8 or !ifmove)
{ {
ifmove = false; ifmove = false;
} }
else else
{ {
lastPos = position; lastPos = position;
motor(1,1); motor(1,1);
wait(1); wait(1);
if (distance(position, lastPos) < 0.2) ifmove = false; if (distance(position, lastPos) < 0.2) ifmove = false;
} }
} }
} }
else else
{ {
ifmove = true; ifmove = true;
if (distance(lastPos, position) < 0.2) if (distance(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
lastPos = position; lastPos = position;
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
} }
else else
{ {
lastPos = position; lastPos = position;
if (topo(position)>1.5) if (topo(position)>1.5)
{ {
mp = direction(target.position)/180; mp = direction(target.position)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
else else
{ {
motor (-0.5, -0.5); motor (-0.5, -0.5);
wait(1.5); wait(1.5);
target = radar(list); target = radar(list);
turn(direction(target.position)); turn(direction(target.position));
tangle = 0; tangle = 0;
do do
{ {
tangle = tangle + 22.5; tangle = tangle + 22.5;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tp(tangle) == 0) break; if (tp(tangle) == 0) break;
tangle = -tangle; tangle = -tangle;
if (tangle > 180) break; if (tangle > 180) break;
} }
while (true); while (true);
turn(tangle); turn(tangle);
motor(1,1); motor(1,1);
wait(2); wait(2);
} }
} }
} }
} }
else else
{ {
wait(1); wait(1);
} }
} }
} }
int object::tp(float angle) int object::tp(float angle)
{ {
point tpoint; point tpoint;
tpoint.x = position.x + cos(orientation + angle)*10; tpoint.x = position.x + cos(orientation + angle)*10;
tpoint.y = position.y + sin(orientation + angle)*10; tpoint.y = position.y + sin(orientation + angle)*10;
tpoint.z = 0; tpoint.z = 0;
if (topo(tpoint) < 2) return(1); else return(0); if (topo(tpoint) < 2) return(1); else return(0);
} }

View File

@ -1,103 +1,103 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
lastPos = position; // initialise lastPos = position; // initialise
motor(1,1); // en avant toute motor(1,1); // en avant toute
while ( true ) // répère à l'infini while ( true ) // répère à l'infini
{ {
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target == null or topo(position)<0)// pas de cible à proximité if (target == null or topo(position)<0)// pas de cible à proximité
{ // ou pieds dans l'eau { // ou pieds dans l'eau
if (distance2d(position, center) > distCent or topo(position)<0) if (distance2d(position, center) > distCent or topo(position)<0)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
lastPos = position; lastPos = position;
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
turn(direction(center)); turn(direction(center));
} }
} }
while (distance2d(position, center) > distCent or topo(position)<0); while (distance2d(position, center) > distCent or topo(position)<0);
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
} }
r = rand(); r = rand();
if (r > 0.6) if (r > 0.6)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.5);// tourne à droite motor (1, 0.5);// tourne à droite
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.4) if (r < 0.4)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.5, 1);// tourne à gauche motor (0.5, 1);// tourne à gauche
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
lastPos = position; lastPos = position;
wait(1); //attend un moment wait(1); //attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
turn(direction(target.position)); turn(direction(target.position));
fire(target.position); // tourne vers la cible fire(target.position); // tourne vers la cible
} }
} }
} }

View File

@ -1,105 +1,105 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
lastPos = position; // initialise lastPos = position; // initialise
motor(1,1); // en avant toute motor(1,1); // en avant toute
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target == null or topo(position)<0)// pas de cible à proximité if (target == null or topo(position)<0)// pas de cible à proximité
{ // ou pieds dans l'eau { // ou pieds dans l'eau
if (distance2d(position, center) > distCent or topo(position)<0) if (distance2d(position, center) > distCent or topo(position)<0)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
lastPos = position; lastPos = position;
wait(0.5); //tant que pas dans la zone wait(0.5); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
turn(direction(center)); turn(direction(center));
} }
} }
while (distance2d(position, center) > distCent or topo(position)<0); while (distance2d(position, center) > distCent or topo(position)<0);
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
} }
r = rand(); r = rand();
if (r > 0.6) if (r > 0.6)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.7);// tourne à droite motor (1, 0.7);// tourne à droite
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.4) if (r < 0.4)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.7, 1);// tourne à gauche motor (0.7, 1);// tourne à gauche
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
lastPos = position; lastPos = position;
wait(1); //attend un moment wait(1); //attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
turn(direction(target.position)); turn(direction(target.position));
fire(target.position); // et tire deux fois fire(target.position); // et tire deux fois
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }
} }
} }

View File

@ -1,106 +1,106 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
float mp; // vitesse maxi float mp; // vitesse maxi
float minAlt; // altitude minimale (danger lave!) float minAlt; // altitude minimale (danger lave!)
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
mp = 0.4; mp = 0.4;
minAlt = cmdline(3); minAlt = cmdline(3);
lastPos = position; // initialise lastPos = position; // initialise
motor(mp, mp); // en avant toute motor(mp, mp); // en avant toute
while ( true ) // répère à l'infini while ( true ) // répère à l'infini
{ {
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target == null or topo(position)<minAlt)// pas de cible à proximité if (target == null or topo(position)<minAlt)// pas de cible à proximité
{ // ou pieds dans l'eau { // ou pieds dans l'eau
if (distance2d(position, center) > distCent or topo(position)<minAlt) if (distance2d(position, center) > distCent or topo(position)<minAlt)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.4, -0.4);//recule lentement motor (-0.4, -0.4);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (mp, mp); //puis en avant toute motor (mp, mp); //puis en avant toute
do do
{ {
lastPos = position; lastPos = position;
wait(0.5); //tant que pas dans la zone wait(0.5); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.1) if (distance2d(lastPos, position) < 0.1)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(mp, mp); motor(mp, mp);
wait(0.5); wait(0.5);
turn(direction(center)); turn(direction(center));
} }
} }
while (distance2d(position, center) > distCent or topo(position)<minAlt); while (distance2d(position, center) > distCent or topo(position)<minAlt);
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.1) if (distance2d(lastPos, position) < 0.1)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(mp, mp); motor(mp, mp);
wait(0.5); wait(0.5);
} }
r = rand(); r = rand();
if (r > 0.6) if (r > 0.6)
{ //dans un cas sur dix { //dans un cas sur dix
motor (mp, mp*0.5);// tourne à droite motor (mp, mp*0.5);// tourne à droite
wait(rand()*2);// pendant un moment wait(rand()*2);// pendant un moment
motor (mp, mp); // puis tout droit motor (mp, mp); // puis tout droit
} }
if (r < 0.4) if (r < 0.4)
{ //dans un cas sur dix { //dans un cas sur dix
motor (mp*0.5, mp);// tourne à gauche motor (mp*0.5, mp);// tourne à gauche
wait(rand()*2);// pendant un moment wait(rand()*2);// pendant un moment
motor (mp, mp); // puis tout droit motor (mp, mp); // puis tout droit
} }
lastPos = position; lastPos = position;
if(r>0.4 and r<0.6) wait(1);//attend un moment if(r>0.4 and r<0.6) wait(1);//attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
turn(direction(target.position)); turn(direction(target.position));
fire(target.position); // tourne vers la cible fire(target.position); // tourne vers la cible
} }
} }
} }

View File

@ -1,48 +1,48 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
while (true) while (true)
{ {
while (radar(list, 0, 360, 0, 20) == null) wait(1); while (radar(list, 0, 360, 0, 20) == null) wait(1);
move(5); move(5);
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
while (target != null) while (target != null)
{ {
fire(target.position); fire(target.position);
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
} }
turn(90 - orientation); turn(90 - orientation);
move(5); move(5);
turn(180); turn(180);
} }
} }

View File

@ -1,40 +1,40 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
while (true) while (true)
{ {
while (radar(list, 0, 360, 0, 40) == null) wait(1); while (radar(list, 0, 360, 0, 40) == null) wait(1);
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
fire(target.position); fire(target.position);
} }
} }

View File

@ -1,137 +1,137 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
object queen; // info sur la reine object queen; // info sur la reine
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
int ifTarget; // si on a trouvé une cible et quel genre int ifTarget; // si on a trouvé une cible et quel genre
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = -65; // prend les coordonnée center.x = -65; // prend les coordonnée
center.y = 255; // du centre de la zone center.y = 255; // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = 140; // rayon de la zone distCent = 140; // rayon de la zone
motor(1,1); // en avant toute motor(1,1); // en avant toute
ifTarget = 0; // pas de cible précise ifTarget = 0; // pas de cible précise
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
queen = radar(AlienQueen); queen = radar(AlienQueen);
if (rand() < 0.2 and queen != null) ifTarget = 2;//on retourne vers la reine if (rand() < 0.2 and queen != null) ifTarget = 2;//on retourne vers la reine
if (queen == null and ifTarget == 2) ifTarget = 0; if (queen == null and ifTarget == 2) ifTarget = 0;
target = radar(list, 0, 360, 0, 40); target = radar(list, 0, 360, 0, 40);
if (target != null) if (target != null)
{ {
shoot(target.position); shoot(target.position);
} }
else else
{ {
if (ifTarget == 2) if (ifTarget == 2)
{ {
if(distance2d(position, queen.position)>8) head(queen.position); if(distance2d(position, queen.position)>8) head(queen.position);
else ifTarget = 0; else ifTarget = 0;
} }
else Random(center, distCent); else Random(center, distCent);
} }
} }
} }
void object::head(point tarPos) void object::head(point tarPos)
{ {
float mp;// puissance du moteur float mp;// puissance du moteur
mp = direction(tarPos)/180; mp = direction(tarPos)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
void object::Random(point center, float distCent) void object::Random(point center, float distCent)
{ {
if (distance2d(position, center) > distCent or topo(position)<2) if (distance2d(position, center) > distCent or topo(position)<2)
{ {
HorsZone(center, distCent); HorsZone(center, distCent);
} }
else else
{ {
DansZone(); DansZone();
} }
} }
void object::HorsZone(point center, float distCent) void object::HorsZone(point center, float distCent)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
} }
while (distance2d(position, center) > distCent or topo(position)<2); while (distance2d(position, center) > distCent or topo(position)<2);
} }
void object::DansZone() void object::DansZone()
{ //si elle est bien dans la zone { //si elle est bien dans la zone
float r = rand(); float r = rand();
if (r > 0.6) if (r > 0.6)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.7); // tourne à droite motor (1, 0.7); // tourne à droite
wait(rand()*3); // pendant un moment wait(rand()*3); // pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.4) if (r < 0.4)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.7, 1); // tourne à gauche motor (0.7, 1); // tourne à gauche
wait(rand()*3); // pendant un moment wait(rand()*3); // pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
motor(1,1); motor(1,1);
wait(1); // attend un moment wait(1); // attend un moment
} }
void object::shoot(point tarPos) void object::shoot(point tarPos)
{ // si cible à proximité { // si cible à proximité
turn(direction(tarPos)); turn(direction(tarPos));
fire(tarPos); // tourne vers la cible fire(tarPos); // tourne vers la cible
fire(tarPos); // et tire deux fois fire(tarPos); // et tire deux fois
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }

View File

@ -1,132 +1,132 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
int ifTarget; // si on a trouvé une cible et quel genre int ifTarget; // si on a trouvé une cible et quel genre
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = -65; // prend les coordonnée center.x = -65; // prend les coordonnée
center.y = 255; // du centre de la zone center.y = 255; // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = 140; // rayon de la zone distCent = 140; // rayon de la zone
motor(1,1); // en avant toute motor(1,1); // en avant toute
ifTarget = 0; // pas de cible précise ifTarget = 0; // pas de cible précise
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list); target = radar(list);
if(target.position.y > 65) if(target.position.y > 65)
{ {
if(distance2d(position, target.position)<40) if(distance2d(position, target.position)<40)
{ {
shoot(target.position); shoot(target.position);
} }
else else
{ {
head(target.position); head(target.position);
} }
} }
else Random(center, distCent); else Random(center, distCent);
} }
} }
void object::head(point tarPos) void object::head(point tarPos)
{ {
float mp;// puissance du moteur float mp;// puissance du moteur
mp = direction(tarPos)/180; mp = direction(tarPos)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
void object::Random(point center, float distCent) void object::Random(point center, float distCent)
{ {
if (distance2d(position, center) > distCent or topo(position)<2) if (distance2d(position, center) > distCent or topo(position)<2)
{ {
HorsZone(center, distCent); HorsZone(center, distCent);
} }
else else
{ {
DansZone(); DansZone();
} }
} }
void object::HorsZone(point center, float distCent) void object::HorsZone(point center, float distCent)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
} }
while (distance2d(position, center) > distCent or topo(position)<2); while (distance2d(position, center) > distCent or topo(position)<2);
} }
void object::DansZone() void object::DansZone()
{ //si elle est bien dans la zone { //si elle est bien dans la zone
float r = rand(); float r = rand();
if (r > 0.8) if (r > 0.8)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.8); // tourne à droite motor (1, 0.8); // tourne à droite
wait(rand()*2); // pendant un moment wait(rand()*2); // pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.2) if (r < 0.2)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.8, 1); // tourne à gauche motor (0.8, 1); // tourne à gauche
wait(rand()*2); // pendant un moment wait(rand()*2); // pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
motor(1,1); motor(1,1);
wait(1); //attend un moment wait(1); //attend un moment
} }
void object::shoot(point tarPos) void object::shoot(point tarPos)
{ // si cible à proximité { // si cible à proximité
turn(direction(tarPos)); turn(direction(tarPos));
fire(tarPos); // tourne vers la cible fire(tarPos); // tourne vers la cible
fire(tarPos); // et tire deux fois fire(tarPos); // et tire deux fois
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }

View File

@ -1,132 +1,132 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
int ifTarget; // si on a trouvé une cible et quel genre int ifTarget; // si on a trouvé une cible et quel genre
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = -65; // prend les coordonnée center.x = -65; // prend les coordonnée
center.y = 255; // du centre de la zone center.y = 255; // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = 140; // rayon de la zone distCent = 140; // rayon de la zone
motor(1,1); // en avant toute motor(1,1); // en avant toute
ifTarget = 0; // pas de cible précise ifTarget = 0; // pas de cible précise
while ( true ) // répète à l'infini while ( true ) // répète à l'infini
{ {
target = radar(list); target = radar(list);
if(target.position.y > 180) if(target.position.y > 180)
{ {
if(distance2d(position, target.position)<40) if(distance2d(position, target.position)<40)
{ {
shoot(target.position); shoot(target.position);
} }
else else
{ {
head(target.position); head(target.position);
} }
} }
else Random(center, distCent); else Random(center, distCent);
} }
} }
void object::head(point tarPos) void object::head(point tarPos)
{ {
float mp;// puissance du moteur float mp;// puissance du moteur
mp = direction(tarPos)/180; mp = direction(tarPos)/180;
//if (mp>1) mp = 1; //if (mp>1) mp = 1;
//if (mp<-1) mp = -1; //if (mp<-1) mp = -1;
if (mp>0) if (mp>0)
{ {
motor(1-mp,1); motor(1-mp,1);
} }
else else
{ {
motor(1,1+mp); motor(1,1+mp);
} }
wait(1); wait(1);
} }
void object::Random(point center, float distCent) void object::Random(point center, float distCent)
{ {
if (distance2d(position, center) > distCent or topo(position)<2) if (distance2d(position, center) > distCent or topo(position)<2)
{ {
HorsZone(center, distCent); HorsZone(center, distCent);
} }
else else
{ {
DansZone(); DansZone();
} }
} }
void object::HorsZone(point center, float distCent) void object::HorsZone(point center, float distCent)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
} }
while (distance2d(position, center) > distCent or topo(position)<2); while (distance2d(position, center) > distCent or topo(position)<2);
} }
void object::DansZone() void object::DansZone()
{ //si elle est bien dans la zone { //si elle est bien dans la zone
float r = rand(); float r = rand();
if (r > 0.8) if (r > 0.8)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.8); // tourne à droite motor (1, 0.8); // tourne à droite
wait(rand()*2); // pendant un moment wait(rand()*2); // pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.2) if (r < 0.2)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.8, 1); // tourne à gauche motor (0.8, 1); // tourne à gauche
wait(rand()*2); // pendant un moment wait(rand()*2); // pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
motor(1,1); motor(1,1);
wait(1); // attend un moment wait(1); // attend un moment
} }
void object::shoot(point tarPos) void object::shoot(point tarPos)
{ // si cible à proximité { // si cible à proximité
turn(direction(tarPos)); turn(direction(tarPos));
fire(tarPos); // tourne vers la cible fire(tarPos); // tourne vers la cible
fire(tarPos); // et tire deux fois fire(tarPos); // et tire deux fois
motor(1,1); // avance motor(1,1); // avance
wait(1.5); // pendant 1.5 s wait(1.5); // pendant 1.5 s
} }

View File

@ -1,13 +1,13 @@
extern void object::Recharge1() extern void object::Recharge1()
{ {
point start; // variable for initial pos. point start; // variable for initial pos.
object item; // info. about power station object item; // info. about power station
start = position; // store initial position start = position; // store initial position
item = radar(PowerStation); // look for station item = radar(PowerStation); // look for station
goto(item.position); // go to the power station goto(item.position); // go to the power station
wait(5); // wait 5 seconds wait(5); // wait 5 seconds
goto(start); // go back to initial pos. goto(start); // go back to initial pos.
} }

View File

@ -1,18 +1,18 @@
extern void object::Recharge2() extern void object::Recharge2()
{ {
point start; // variable for initial pos. point start; // variable for initial pos.
object item; // info. about power station object item; // info. about power station
start = position; // store initial position start = position; // store initial position
item = radar(PowerStation); // look for station item = radar(PowerStation); // look for station
goto(item.position); // go to the power station goto(item.position); // go to the power station
while ( energyCell.energyLevel < 1 ) while ( energyCell.energyLevel < 1 )
{ {
wait(1); // wait until recharged wait(1); // wait until recharged
} }
goto(start); // go back to initial pos. goto(start); // go back to initial pos.
message("Recharge completed"); message("Recharge completed");
} }

View File

@ -1,18 +1,18 @@
extern void object::Recharge3() extern void object::Recharge3()
{ {
point start; // variable for initial pos. point start; // variable for initial pos.
object item; // info. about power station object item; // info. about power station
start = position; // store initial position start = position; // store initial position
item = radar(PowerCaptor); // look for station item = radar(PowerCaptor); // look for station
goto(item.position); // go to the power station goto(item.position); // go to the power station
while ( energyCell.energyLevel < 1 ) while ( energyCell.energyLevel < 1 )
{ {
wait(1); // wait until recharged wait(1); // wait until recharged
} }
goto(start); // go back to initial pos. goto(start); // go back to initial pos.
message("Recharge completed"); message("Recharge completed");
} }

View File

@ -1,57 +1,57 @@
extern void object::Convert( ) extern void object::Convert( )
{ {
object p; object p;
point pConvert; point pConvert;
p = radar(Converter); p = radar(Converter);
if ( p == null ) if ( p == null )
{ {
message("Vous devez d'abord construire un convertisseur"); message("Vous devez d'abord construire un convertisseur");
return; return;
} }
pConvert = p.position; pConvert = p.position;
while ( true ) while ( true )
{ {
if ( load.category != TitaniumOre ) if ( load.category != TitaniumOre )
{ {
p = radar(TitaniumOre); p = radar(TitaniumOre);
if ( p == null ) if ( p == null )
{ {
message("Minerai pas trouvé"); message("Minerai pas trouvé");
return; return;
} }
goto(p.position); goto(p.position);
grab(); // prend minerai grab(); // prend minerai
p = radar(Converter); p = radar(Converter);
if ( p == null ) if ( p == null )
{ {
message("Convertisseur pas trouvé"); message("Convertisseur pas trouvé");
return; return;
} }
goto(p.position); goto(p.position);
drop(); // dépose minerai drop(); // dépose minerai
move(-4); move(-4);
wait(15); // attend conversion wait(15); // attend conversion
move(4); move(4);
grab(); // prend métal grab(); // prend métal
move(-4); move(-4);
} }
p = radar(SpaceShip); p = radar(SpaceShip);
if ( p == null ) if ( p == null )
{ {
message("Vaisseau spatial pas trouvé"); message("Vaisseau spatial pas trouvé");
return; return;
} }
goto(p.position); goto(p.position);
drop(); // dépose minerai drop(); // dépose minerai
if ( energyCell.energyLevel < 0.25 ) if ( energyCell.energyLevel < 0.25 )
{ {
message("Veuillez changer la pile"); message("Veuillez changer la pile");
return; return;
} }
} }
} }

View File

@ -1,11 +1,11 @@
extern void object::SwitchCell1() extern void object::SwitchCell1()
{ {
grab(InFront); // take the new cell in front grab(InFront); // take the new cell in front
drop(Behind); // and drop it behind drop(Behind); // and drop it behind
grab(EnergyCell); // take the cell from the bot grab(EnergyCell); // take the cell from the bot
drop(InFront); // and drop it in front drop(InFront); // and drop it in front
grab(Behind); // take the new cell grab(Behind); // take the new cell
drop(EnergyCell); // and drop it on the bot drop(EnergyCell); // and drop it on the bot
} }

View File

@ -1,8 +1,8 @@
extern void object::Flash( ) extern void object::Flash( )
{ {
while ( true ) while ( true )
{ {
if ( energyCell.energyLevel == 0 ) break; if ( energyCell.energyLevel == 0 ) break;
wait(1); wait(1);
} }
} }

View File

@ -1,47 +1,47 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
float d1, d2; float d1, d2;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
d1 = 2+rand()*2; d1 = 2+rand()*2;
d2 = 1+rand()*3; d2 = 1+rand()*3;
turn(-50); turn(-50);
turn(110); turn(110);
turn(30); turn(30);
move(d1); move(d1);
wait(0.5); wait(0.5);
turn(-90); turn(-90);
if ( rand() < 0.5 ) if ( rand() < 0.5 )
{ {
wait(2+rand()*2); wait(2+rand()*2);
} }
else else
{ {
turn(-60); turn(-60);
turn(110); turn(110);
turn(-50); turn(-50);
} }
turn(-90); turn(-90);
move(d1+d2); move(d1+d2);
wait(0.5); wait(0.5);
turn(90); turn(90);
if ( rand() < 0.5 ) if ( rand() < 0.5 )
{ {
wait(2+rand()*2); wait(2+rand()*2);
} }
else else
{ {
turn(-30); turn(-30);
turn(60); turn(60);
turn(-30); turn(-30);
} }
turn(90); turn(90);
move(d2); move(d2);
wait(0.5); wait(0.5);
turn(-90); turn(-90);
} }
} }

View File

@ -1,16 +1,16 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
turn(-144); turn(-144);
move(2); move(2);
turn(-90); turn(-90);
wait(5+rand()*8); wait(5+rand()*8);
turn(-90); turn(-90);
move(2); move(2);
turn(-36); turn(-36);
wait(2+rand()*5); wait(2+rand()*5);
} }
} }

View File

@ -1,22 +1,22 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
float dist; float dist;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
dist = 2+rand()*3; dist = 2+rand()*3;
turn(90); turn(90);
move(dist); move(dist);
wait(0.5); wait(0.5);
turn(-90); turn(-90);
wait(2+rand()*3); wait(2+rand()*3);
turn(-90); turn(-90);
move(dist); move(dist);
wait(0.5); wait(0.5);
turn(90); turn(90);
wait(1+rand()*1); wait(1+rand()*1);
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
goto(15,-6, 0,0,1); goto(15,-6, 0,0,1);
goto(2,-6, 0,0,1); goto(2,-6, 0,0,1);
} }
} }

View File

@ -1,13 +1,13 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
wait(2); wait(2);
goto(-13,-16, 0,0,1); goto(-13,-16, 0,0,1);
turn(180); turn(180);
goto(14,-12, 0,0,1); goto(14,-12, 0,0,1);
turn(180); turn(180);
} }
} }

View File

@ -1,29 +1,29 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
goto(-10,-12, 0,0,1); goto(-10,-12, 0,0,1);
wait(1); wait(1);
grab(); grab();
turn(180); turn(180);
goto( -3,-12, 0,0,1); goto( -3,-12, 0,0,1);
drop(); drop();
wait(1); wait(1);
turn(180); turn(180);
goto(-10,-12, 0,0,1); goto(-10,-12, 0,0,1);
turn(180); turn(180);
goto( -3,-12, 0,0,1); goto( -3,-12, 0,0,1);
wait(1); wait(1);
grab(); grab();
turn(180); turn(180);
goto(-10,-12, 0,0,1); goto(-10,-12, 0,0,1);
drop(); drop();
turn(180); turn(180);
goto( -3,-12, 0,0,1); goto( -3,-12, 0,0,1);
turn(180); turn(180);
} }
} }

View File

@ -1,23 +1,23 @@
extern void object::Activity( ) extern void object::Activity( )
{ {
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( true ) while ( true )
{ {
motor(-0.2, 0.2); motor(-0.2, 0.2);
wait(1); wait(1);
motor(0.2, -0.2); motor(0.2, -0.2);
wait(1); wait(1);
motor(0, 0); motor(0, 0);
wait(4); wait(4);
motor(0.4, -0.4); motor(0.4, -0.4);
wait(2); wait(2);
motor(0, 0); motor(0, 0);
wait(1); wait(1);
motor(-0.4, 0.4); motor(-0.4, 0.4);
wait(2); wait(2);
motor(0, 0); motor(0, 0);
wait(1); wait(1);
} }
} }

View File

@ -1,18 +1,18 @@
extern void object::KillAnt1() extern void object::KillAnt1()
{ {
object item; // info. about object object item; // info. about object
goto(-30, 0); // go west goto(-30, 0); // go west
aim(0); // aim straight aim(0); // aim straight
while ( true ) // repeat forever: while ( true ) // repeat forever:
{ {
item = radar(AlienAnt, 0, 360, 0, 40); item = radar(AlienAnt, 0, 360, 0, 40);
if ( item != null ) // ant detected ? if ( item != null ) // ant detected ?
{ {
turn(direction(item.position)); turn(direction(item.position));
fire(0.5); // shoot 0.5 s fire(0.5); // shoot 0.5 s
} }
wait(1); // wait 1 second wait(1); // wait 1 second
} }
} }

View File

@ -1,48 +1,48 @@
extern void object::Produce( ) extern void object::Produce( )
{ {
point path[4]; point path[4];
int i; int i;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
path[0].x = cmdline(0); path[0].x = cmdline(0);
path[0].y = cmdline(1); path[0].y = cmdline(1);
path[1].x = cmdline(2); path[1].x = cmdline(2);
path[1].y = cmdline(3); path[1].y = cmdline(3);
path[2].x = cmdline(4); path[2].x = cmdline(4);
path[2].y = cmdline(5); path[2].y = cmdline(5);
path[3].x = cmdline(6); path[3].x = cmdline(6);
path[3].y = cmdline(7); path[3].y = cmdline(7);
i = 1; i = 1;
while ( true ) while ( true )
{ {
goto(path[i%4]); goto(path[i%4]);
if ( i%5 == 4 && WaspCount() < 2 ) if ( i%5 == 4 && WaspCount() < 2 )
{ {
produce(position, orientation, AlienWasp, "wasp01.txt"); produce(position, orientation, AlienWasp, "wasp01.txt");
} }
i ++; i ++;
} }
} }
int object::WaspCount() int object::WaspCount()
{ {
object item; object item;
int total = 0; int total = 0;
int i = 0; int i = 0;
while ( true ) while ( true )
{ {
item = retobject(i++); item = retobject(i++);
if ( item == null ) return total; if ( item == null ) return total;
if ( item.category == AlienWasp ) if ( item.category == AlienWasp )
{ {
total ++; total ++;
} }
} }
} }

View File

@ -1,74 +1,74 @@
extern void object::Produce( ) extern void object::Produce( )
{ {
point path[7]; point path[7];
int i; int i;
float r; float r;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
ipf(10); // 10 instructions / second ipf(10); // 10 instructions / second
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
path[0].x = cmdline(0); path[0].x = cmdline(0);
path[0].y = cmdline(1); path[0].y = cmdline(1);
path[1].x = cmdline(2); path[1].x = cmdline(2);
path[1].y = cmdline(3); path[1].y = cmdline(3);
path[2].x = cmdline(4); path[2].x = cmdline(4);
path[2].y = cmdline(5); path[2].y = cmdline(5);
path[3].x = cmdline(6); path[3].x = cmdline(6);
path[3].y = cmdline(7); path[3].y = cmdline(7);
path[4].x = cmdline(8); path[4].x = cmdline(8);
path[4].y = cmdline(9); path[4].y = cmdline(9);
path[5].x = cmdline(10); path[5].x = cmdline(10);
path[5].y = cmdline(11); path[5].y = cmdline(11);
path[6].x = cmdline(12); path[6].x = cmdline(12);
path[6].y = cmdline(13); path[6].y = cmdline(13);
i = 1; i = 1;
while ( true ) while ( true )
{ {
goto(path[i%7]); goto(path[i%7]);
if ( rand() < 0.2 ) // attaqueuse 1x / 5 if ( rand() < 0.2 ) // attaqueuse 1x / 5
{ {
produce(position, orientation, AlienAnt, "antattsw.txt"); produce(position, orientation, AlienAnt, "antattsw.txt");
} }
else else
{ {
if ( AlienCount() < 10 ) if ( AlienCount() < 10 )
{ {
r = rand(); r = rand();
if( r < 0.3 ) if( r < 0.3 )
{ {
produce(position, orientation, AlienAnt, "antt41.txt"); produce(position, orientation, AlienAnt, "antt41.txt");
} }
if( r >= 0.6 ) if( r >= 0.6 )
{ {
produce(position, orientation, AlienAnt, "antt42.txt"); produce(position, orientation, AlienAnt, "antt42.txt");
} }
if( r < 0.6 and r >= 0.3 ) if( r < 0.6 and r >= 0.3 )
{ {
produce(position, orientation, AlienAnt, "antt43.txt"); produce(position, orientation, AlienAnt, "antt43.txt");
} }
} }
} }
i ++; i ++;
} }
} }
int object::AlienCount() int object::AlienCount()
{ {
object item; object item;
int total = 0; int total = 0;
int i = 0; int i = 0;
while ( true ) while ( true )
{ {
item = retobject(i++); item = retobject(i++);
if ( item == null ) return total; if ( item == null ) return total;
if ( item.category == AlienAnt ) if ( item.category == AlienAnt )
{ {
total ++; total ++;
} }
} }
} }

View File

@ -1,49 +1,49 @@
extern void object::Run() extern void object::Run()
{ {
point circuit[]; point circuit[];
int i, max; int i, max;
i = 0; i = 0;
circuit[i].x = 35; circuit[i].y = 55; circuit[i++].z = 10; circuit[i].x = 35; circuit[i].y = 55; circuit[i++].z = 10;
circuit[i].x = 37; circuit[i].y = 90; circuit[i++].z = 10; circuit[i].x = 37; circuit[i].y = 90; circuit[i++].z = 10;
circuit[i].x = 98; circuit[i].y = 82; circuit[i++].z = 10; circuit[i].x = 98; circuit[i].y = 82; circuit[i++].z = 10;
circuit[i].x = 134; circuit[i].y = 104; circuit[i++].z = 10; circuit[i].x = 134; circuit[i].y = 104; circuit[i++].z = 10;
circuit[i].x = 112; circuit[i].y = 161; circuit[i++].z = 10; circuit[i].x = 112; circuit[i].y = 161; circuit[i++].z = 10;
circuit[i].x = 148; circuit[i].y = 190; circuit[i++].z = 10; circuit[i].x = 148; circuit[i].y = 190; circuit[i++].z = 10;
circuit[i].x = 205; circuit[i].y = 216; circuit[i++].z = 10; circuit[i].x = 205; circuit[i].y = 216; circuit[i++].z = 10;
circuit[i].x = 244; circuit[i].y = 219; circuit[i++].z = 10; circuit[i].x = 244; circuit[i].y = 219; circuit[i++].z = 10;
circuit[i].x = 255; circuit[i].y = 76; circuit[i++].z = 4; circuit[i].x = 255; circuit[i].y = 76; circuit[i++].z = 4;
circuit[i].x = 185; circuit[i].y = 45; circuit[i++].z = 10; circuit[i].x = 185; circuit[i].y = 45; circuit[i++].z = 10;
circuit[i].x = 162; circuit[i].y = -1; circuit[i++].z = 10; circuit[i].x = 162; circuit[i].y = -1; circuit[i++].z = 10;
circuit[i].x = 139; circuit[i].y = -45; circuit[i++].z = 90; circuit[i].x = 139; circuit[i].y = -45; circuit[i++].z = 90;
circuit[i].x = 165; circuit[i].y = -80; circuit[i++].z = 10; circuit[i].x = 165; circuit[i].y = -80; circuit[i++].z = 10;
circuit[i].x = 235; circuit[i].y =-134; circuit[i++].z = 10; circuit[i].x = 235; circuit[i].y =-134; circuit[i++].z = 10;
circuit[i].x = 226; circuit[i].y =-203; circuit[i++].z = 10; circuit[i].x = 226; circuit[i].y =-203; circuit[i++].z = 10;
circuit[i].x = 185; circuit[i].y =-262; circuit[i++].z = 90; circuit[i].x = 185; circuit[i].y =-262; circuit[i++].z = 90;
circuit[i].x = 173; circuit[i].y =-300; circuit[i++].z = 90; circuit[i].x = 173; circuit[i].y =-300; circuit[i++].z = 90;
circuit[i].x = 144; circuit[i].y =-340; circuit[i++].z = 90; circuit[i].x = 144; circuit[i].y =-340; circuit[i++].z = 90;
circuit[i].x = 35; circuit[i].y =-322; circuit[i++].z = 10; circuit[i].x = 35; circuit[i].y =-322; circuit[i++].z = 10;
circuit[i].x = -27; circuit[i].y =-240; circuit[i++].z = 10; circuit[i].x = -27; circuit[i].y =-240; circuit[i++].z = 10;
circuit[i].x = -87; circuit[i].y =-250; circuit[i++].z = 10; circuit[i].x = -87; circuit[i].y =-250; circuit[i++].z = 10;
circuit[i].x =-137; circuit[i].y =-259; circuit[i++].z = 10; circuit[i].x =-137; circuit[i].y =-259; circuit[i++].z = 10;
circuit[i].x =-182; circuit[i].y =-274; circuit[i++].z = 10; circuit[i].x =-182; circuit[i].y =-274; circuit[i++].z = 10;
max = i; max = i;
// for ( i=0 ; i<max ; i++ ) // for ( i=0 ; i<max ; i++ )
// { // {
// produce(circuit[i], 0, WayPoint, ""); // produce(circuit[i], 0, WayPoint, "");
// } // }
grab(); grab();
for ( i=0 ; i<max ; i++ ) for ( i=0 ; i<max ; i++ )
{ {
goto(circuit[i], circuit[i].z, 1,1); goto(circuit[i], circuit[i].z, 1,1);
// message(i); // message(i);
} }
goto(-233, -215, 10, 0,1); goto(-233, -215, 10, 0,1);
drop(); drop();
goto(-333, -64, 20, 1,1); goto(-333, -64, 20, 1,1);
} }

View File

@ -1,6 +1,6 @@
extern void object::Outward() extern void object::Outward()
{ {
shield(1,15); // activate the shield shield(1,15); // activate the shield
goto(6,160); // go close to the key goto(6,160); // go close to the key
shield(0,15); // deactivate the shield shield(0,15); // deactivate the shield
} }

View File

@ -1,6 +1,6 @@
extern void object::Return() extern void object::Return()
{ {
shield(1,15); // activate the shield shield(1,15); // activate the shield
goto(8,60); // go to the spaceship goto(8,60); // go to the spaceship
shield(0,15); // deactivate the shield shield(0,15); // deactivate the shield
} }

View File

@ -1,33 +1,33 @@
extern void object::FollowPhazer() extern void object::FollowPhazer()
{ {
object item; // info. about phazer object item; // info. about phazer
point dest; // position where to go point dest; // position where to go
float dist; // distance to phazer float dist; // distance to phazer
item = radar(PhazerShooter); item = radar(PhazerShooter);
if ( item == null ) if ( item == null )
{ {
message("No phazer found"); message("No phazer found");
return; // stop the program return; // stop the program
} }
shield(1, 25); // activate the shield shield(1, 25); // activate the shield
while ( true ) // repeat forever while ( true ) // repeat forever
{ {
item = radar(PhazerShooter);// look for phazer item = radar(PhazerShooter);// look for phazer
if ( item == null ) break; if ( item == null ) break;
dist = distance(item.position, position); dist = distance(item.position, position);
if ( dist < 5 ) if ( dist < 5 )
{ // if closer than 5 m: { // if closer than 5 m:
wait(1); // wait wait(1); // wait
} }
else // otherwise: else // otherwise:
{ // Calculate a position 5 m before the phazer { // Calculate a position 5 m before the phazer
dest.x = (item.position.x-position.x)*((dist-5)/dist)+position.x; dest.x = (item.position.x-position.x)*((dist-5)/dist)+position.x;
dest.y = (item.position.y-position.y)*((dist-5)/dist)+position.y; dest.y = (item.position.y-position.y)*((dist-5)/dist)+position.y;
dest.z = (item.position.z-position.z)*((dist-5)/dist)+position.z; dest.z = (item.position.z-position.z)*((dist-5)/dist)+position.z;
goto(dest, 0, 1, 1); // and go there goto(dest, 0, 1, 1); // and go there
} }
} }
} }

View File

@ -1,63 +1,63 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int enemy; int enemy;
object p; object p;
float dist; float dist;
point nav1, nav2, nav3, nav4, dest; point nav1, nav2, nav3, nav4, dest;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
// enemy = WheeledGrabber; // enemy = WheeledGrabber;
enemy = WingedOrgaShooter; enemy = WingedOrgaShooter;
while ( true ) while ( true )
{ {
p = radar(enemy, 0, 360, 0, 50); p = radar(enemy, 0, 360, 0, 50);
if ( p == null ) if ( p == null )
{ {
nav1.x = position.x+2.5; nav1.x = position.x+2.5;
nav1.y = position.y+2.5; nav1.y = position.y+2.5;
nav2.x = position.x+2.5; nav2.x = position.x+2.5;
nav2.y = position.y-2.5; nav2.y = position.y-2.5;
nav3.x = position.x-2.5; nav3.x = position.x-2.5;
nav3.y = position.y-2.5; nav3.y = position.y-2.5;
nav4.x = position.x-2.5; nav4.x = position.x-2.5;
nav4.y = position.y+2.5; nav4.y = position.y+2.5;
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(enemy, 0, 360, 0, 50); p = radar(enemy, 0, 360, 0, 50);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(enemy, 0, 360, 0, 50); p = radar(enemy, 0, 360, 0, 50);
if ( p != null ) break; if ( p != null ) break;
goto(nav3); goto(nav3);
p = radar(enemy, 0, 360, 0, 50); p = radar(enemy, 0, 360, 0, 50);
if ( p != null ) break; if ( p != null ) break;
goto(nav4); goto(nav4);
p = radar(enemy, 0, 360, 0, 50); p = radar(enemy, 0, 360, 0, 50);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 7.5 ) if ( dist <= 7.5 )
{ {
fire(); fire();
} }
else else
{ {
dest.x = (position.x+p.position.x)/2; dest.x = (position.x+p.position.x)/2;
dest.y = (position.y+p.position.y)/2; dest.y = (position.y+p.position.y)/2;
dest.z = (position.z+p.position.z)/2; dest.z = (position.z+p.position.z)/2;
goto(dest); goto(dest);
} }
} }
} }
} }

View File

@ -1,74 +1,74 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[]; int list[];
int i; int i;
object p; object p;
float dist, prox; float dist, prox;
point dest; point dest;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
list[i++] = Derrick; list[i++] = Derrick;
list[i++] = BotFactory; list[i++] = BotFactory;
list[i++] = PowerStation; list[i++] = PowerStation;
list[i++] = Converter; list[i++] = Converter;
list[i++] = RepairCenter; list[i++] = RepairCenter;
list[i++] = DefenseTower; list[i++] = DefenseTower;
list[i++] = AlienNest; list[i++] = AlienNest;
list[i++] = ResearchCenter; list[i++] = ResearchCenter;
list[i++] = RadarStation; list[i++] = RadarStation;
list[i++] = ExchangePost; list[i++] = ExchangePost;
list[i++] = PowerPlant; list[i++] = PowerPlant;
list[i++] = AutoLab; list[i++] = AutoLab;
list[i++] = NuclearPlant; list[i++] = NuclearPlant;
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 30); p = radar(list, 0, 360, 0, 30);
if ( p == null ) if ( p == null )
{ {
wait(2); wait(2);
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 10 ) if ( dist <= 10 )
{ {
fire(); fire();
} }
else else
{ {
prox = dist-5; prox = dist-5;
if ( prox > 25 ) prox = 25; if ( prox > 25 ) prox = 25;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
} }
} }
} }
} }

View File

@ -1,59 +1,59 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; int list[], i;
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
nav1.x = cmdline(0); nav1.x = cmdline(0);
nav1.y = cmdline(1); nav1.y = cmdline(1);
nav2.x = cmdline(2); nav2.x = cmdline(2);
nav2.y = cmdline(3); nav2.y = cmdline(3);
while ( true ) while ( true )
{ {
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 10); p = radar(list, 0, 360, 0, 10);
if ( p == null ) break; if ( p == null ) break;
fire(); fire();
} }
goto(nav1); goto(nav1);
while ( true ) while ( true )
{ {
p = radar(list, 0, 360, 0, 10); p = radar(list, 0, 360, 0, 10);
if ( p == null ) break; if ( p == null ) break;
fire(); fire();
} }
goto(nav2); goto(nav2);
} }
} }

View File

@ -1,102 +1,102 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
int list[], i; // liste des objets cherchés int list[], i; // liste des objets cherchés
object target; // info sur la cible object target; // info sur la cible
point center; // coordonnées du centre de la zone point center; // coordonnées du centre de la zone
point lastPos; // dernière position (pr test si bloquée) point lastPos; // dernière position (pr test si bloquée)
float distCent; // rayon de la zone float distCent; // rayon de la zone
float r; // valeur aléatoire float r; // valeur aléatoire
errmode(0); // ne stoppe pas si erreur errmode(0); // ne stoppe pas si erreur
while ( ismovie() != 0 ) wait(1); while ( ismovie() != 0 ) wait(1);
i = 0; i = 0;
list[i++] = WingedGrabber; list[i++] = WingedGrabber;
list[i++] = TrackedGrabber; list[i++] = TrackedGrabber;
list[i++] = WheeledGrabber; list[i++] = WheeledGrabber;
list[i++] = LeggedGrabber; list[i++] = LeggedGrabber;
list[i++] = WingedShooter; list[i++] = WingedShooter;
list[i++] = TrackedShooter; list[i++] = TrackedShooter;
list[i++] = WheeledShooter; list[i++] = WheeledShooter;
list[i++] = LeggedShooter; list[i++] = LeggedShooter;
list[i++] = WingedOrgaShooter; list[i++] = WingedOrgaShooter;
list[i++] = TrackedOrgaShooter; list[i++] = TrackedOrgaShooter;
list[i++] = WheeledOrgaShooter; list[i++] = WheeledOrgaShooter;
list[i++] = LeggedOrgaShooter; list[i++] = LeggedOrgaShooter;
list[i++] = WingedSniffer; list[i++] = WingedSniffer;
list[i++] = TrackedSniffer; list[i++] = TrackedSniffer;
list[i++] = WheeledSniffer; list[i++] = WheeledSniffer;
list[i++] = LeggedSniffer; list[i++] = LeggedSniffer;
list[i++] = Thumper; list[i++] = Thumper;
list[i++] = PhazerShooter; list[i++] = PhazerShooter;
list[i++] = Recycler; list[i++] = Recycler;
list[i++] = Shielder; list[i++] = Shielder;
list[i++] = Subber; list[i++] = Subber;
list[i++] = Me; list[i++] = Me;
center.x = cmdline(0); // prend les coordonnée center.x = cmdline(0); // prend les coordonnée
center.y = cmdline(1); // du centre de la zone center.y = cmdline(1); // du centre de la zone
center.z = 0; // à patrouiller center.z = 0; // à patrouiller
distCent = cmdline(2); // rayon de la zone distCent = cmdline(2); // rayon de la zone
lastPos = position; // initialise lastPos = position; // initialise
motor(1,1); // en avant toute motor(1,1); // en avant toute
while ( true ) // répère à l'infini while ( true ) // répère à l'infini
{ {
target = radar(list, 0, 360, 0, 10); target = radar(list, 0, 360, 0, 10);
if (target == null or topo(position)<0)// pas de cible à proximité if (target == null or topo(position)<0)// pas de cible à proximité
{ // ou pieds dans l'eau { // ou pieds dans l'eau
if (distance2d(position, center) > distCent or topo(position)<0) if (distance2d(position, center) > distCent or topo(position)<0)
{ // si la fourmi est en dehors de la zone { // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé wait (1.5); //attend qu'ait reculé
turn(direction(center)); turn(direction(center));
motor (1, 1); //puis en avant toute motor (1, 1); //puis en avant toute
do do
{ {
lastPos = position; lastPos = position;
wait(1); //tant que pas dans la zone wait(1); //tant que pas dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
turn(direction(center)); turn(direction(center));
} }
} }
while (distance2d(position, center) > distCent or topo(position)<0); while (distance2d(position, center) > distCent or topo(position)<0);
} }
else else
{ //si elle est bien dans la zone { //si elle est bien dans la zone
if (distance2d(lastPos, position) < 0.2) if (distance2d(lastPos, position) < 0.2)
{ //si elle est bloquée par obstacle { //si elle est bloquée par obstacle
turn(rand()*360-180); turn(rand()*360-180);
motor(1,1); motor(1,1);
wait(1); wait(1);
} }
r = rand(); r = rand();
if (r > 0.6) if (r > 0.6)
{ //dans un cas sur dix { //dans un cas sur dix
motor (1, 0.7);// tourne à droite motor (1, 0.7);// tourne à droite
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
if (r < 0.4) if (r < 0.4)
{ //dans un cas sur dix { //dans un cas sur dix
motor (0.7, 1);// tourne à gauche motor (0.7, 1);// tourne à gauche
wait(rand()*3);// pendant un moment wait(rand()*3);// pendant un moment
motor (1, 1); // puis tout droit motor (1, 1); // puis tout droit
} }
lastPos = position; lastPos = position;
wait(1); //attend un moment wait(1); //attend un moment
} }
} }
else else
{ // si cible à proximité { // si cible à proximité
fire(); fire();
} }
} }
} }

View File

@ -1,20 +1,20 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
point traject[10]; point traject[10];
int nb, i; int nb, i;
errmode(0); errmode(0);
nb = cmdline(0)+1; nb = cmdline(0)+1;
traject[0] = position; traject[0] = position;
for ( i=1 ; i<nb ; i++ ) for ( i=1 ; i<nb ; i++ )
{ {
traject[i].x = cmdline((i-1)*2+1); traject[i].x = cmdline((i-1)*2+1);
traject[i].y = cmdline((i-1)*2+2); traject[i].y = cmdline((i-1)*2+2);
} }
for ( i=1 ; true ; i++ ) for ( i=1 ; true ; i++ )
{ {
goto(traject[i%nb] ,0,0,2); goto(traject[i%nb] ,0,0,2);
} }
} }

View File

@ -1,21 +1,21 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
point traject[10]; point traject[10];
int nb, i; int nb, i;
errmode(0); errmode(0);
nb = cmdline(0)+1; nb = cmdline(0)+1;
traject[0] = position; traject[0] = position;
for ( i=1 ; i<nb ; i++ ) for ( i=1 ; i<nb ; i++ )
{ {
traject[i].x = cmdline((i-1)*2+1); traject[i].x = cmdline((i-1)*2+1);
traject[i].y = cmdline((i-1)*2+2); traject[i].y = cmdline((i-1)*2+2);
} }
for ( i=1 ; true ; i++ ) for ( i=1 ; true ; i++ )
{ {
goto(traject[i%nb], 0,0,2); goto(traject[i%nb], 0,0,2);
sniff(); sniff();
} }
} }

View File

@ -1,12 +1,12 @@
extern void object::Solution() extern void object::Solution()
{ {
turn(90); turn(90);
while (true) while (true)
{ {
motor(1,-1); motor(1,-1);
fire(2); fire(2);
motor(-1,1); motor(-1,1);
fire(2); fire(2);
} }
} }

View File

@ -1,18 +1,18 @@
extern void object::Solution() extern void object::Solution()
{ {
object item; object item;
jet(0.2); jet(0.2);
while(position.z < 20) while(position.z < 20)
{ {
wait(0.2); wait(0.2);
} }
jet(0); jet(0);
while(true) while(true)
{ {
item = radar(AlienAnt); item = radar(AlienAnt);
turn(direction(item.position)); turn(direction(item.position));
fire(1); fire(1);
} }
} }

View File

@ -1,22 +1,22 @@
extern void object::Solution() extern void object::Solution()
{ {
object item; object item;
jet(0.2); jet(0.2);
while(position.z < 20) while(position.z < 20)
{ {
wait(0.2); wait(0.2);
} }
jet(0); jet(0);
while(true) while(true)
{ {
item = radar(AlienAnt); item = radar(AlienAnt);
turn(direction(item.position)); turn(direction(item.position));
while (radar(AlienAnt, 0, 360, 0, 40) == null) while (radar(AlienAnt, 0, 360, 0, 40) == null)
{ {
wait(0.2); wait(0.2);
} }
fire(1); fire(1);
} }
} }

View File

@ -1,28 +1,28 @@
extern void object::Solution() extern void object::Solution()
{ {
object item; object item;
aim(-20); aim(-20);
jet(0.2); jet(0.2);
while (position.z < 10) while (position.z < 10)
{ {
wait(0.2); wait(0.2);
} }
while (true) while (true)
{ {
while (radar(AlienAnt, 0, 360, 0, 20) == null) while (radar(AlienAnt, 0, 360, 0, 20) == null)
{ {
item = radar(AlienAnt); item = radar(AlienAnt);
turn(direction(item.position)); turn(direction(item.position));
motor(1,1); motor(1,1);
wait(0.2); wait(0.2);
} }
fire(1); fire(1);
} }
} }

View File

@ -1,35 +1,35 @@
extern void object::Solution() extern void object::Solution()
{ {
object item; object item;
aim(-20); aim(-20);
while (true) while (true)
{ {
while (radar(AlienAnt, 0, 360, 0, 20) == null) while (radar(AlienAnt, 0, 360, 0, 20) == null)
{ {
item = radar(AlienAnt); item = radar(AlienAnt);
turn(direction(item.position)); turn(direction(item.position));
motor(1,1); motor(1,1);
jet(0); jet(0);
if (position.z-topo(position) < 6) if (position.z-topo(position) < 6)
{ {
jet(1); jet(1);
} }
if (position.z-topo(position) > 9) if (position.z-topo(position) > 9)
{ {
jet(-1); jet(-1);
} }
wait(0.2); wait(0.2);
} }
fire(1); fire(1);
} }
} }

View File

@ -1,14 +1,14 @@
extern void object::Solution() extern void object::Solution()
{ {
grab(); grab();
turn(90); turn(90);
drop(); drop();
turn(-180); turn(-180);
grab(); grab();
turn(90); turn(90);
drop(); drop();
} }

View File

@ -1,18 +1,18 @@
extern void object::Solution() extern void object::Solution()
{ {
object item; object item;
while(true) while(true)
{ {
item = radar(PowerCell); item = radar(PowerCell);
goto(item.position); goto(item.position);
grab(); grab();
item = radar(WingedShooter); item = radar(WingedShooter);
goto(item.position); goto(item.position);
drop(); drop();
} }
} }

View File

@ -1,33 +1,32 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
aim(-3); aim(-3);
while ( true ) while ( true )
{ {
object target; object target;
float a, b; float a, b;
target = radar(TargetBot); target = radar(TargetBot);
if ( target == null ) break; if ( target == null ) break;
a = direction(target.position); a = direction(target.position);
turn(a); turn(a);
target = radar(TargetBot); target = radar(TargetBot);
if ( target == null ) break; if ( target == null ) break;
b = direction(target.position); b = direction(target.position);
if ( a == b ) // standing still ? if ( a == b ) // standing still ?
{ {
wait(0.2); wait(0.2);
target = radar(TargetBot); target = radar(TargetBot);
if ( target == null ) break; if ( target == null ) break;
a = direction(target.position); a = direction(target.position);
if ( a == b ) if ( a == b )
{ {
fire(2); fire(2);
wait(2); wait(2);
} }
} }
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Chasse( ) extern void object::Chasse( )
{ {
while ( true ) while ( true )
{ {
float x = 10+rand()*20; float x = 10+rand()*20;
float y = -62; float y = -62;
goto(x,y,0); goto(x,y,0);
wait(1); wait(1);
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Chasse( ) extern void object::Chasse( )
{ {
while ( true ) while ( true )
{ {
float x = 33; float x = 33;
float y = -85+rand()*20; float y = -85+rand()*20;
goto(x,y,0); goto(x,y,0);
wait(1); wait(1);
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Chasse( ) extern void object::Chasse( )
{ {
while ( true ) while ( true )
{ {
float x = 10+rand()*20; float x = 10+rand()*20;
float y = -88; float y = -88;
goto(x,y,0); goto(x,y,0);
wait(1); wait(1);
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Chasse( ) extern void object::Chasse( )
{ {
while ( true ) while ( true )
{ {
float x = 7; float x = 7;
float y = -85+rand()*20; float y = -85+rand()*20;
goto(x,y,0); goto(x,y,0);
wait(1); wait(1);
} }
} }

View File

@ -1,17 +1,16 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
point start; point start;
start = position; // remember starting position start = position; // remember starting position
motor(1, 1); // full throttle motor(1, 1); // full throttle
while ( true ) // repeat forever while ( true ) // repeat forever
{ {
float len = distance(position, start); float len = distance(position, start);
if ( len > 25-2 ) if ( len > 25-2 )
{ {
motor( (25-len)/2, (25-len)/2 ); motor( (25-len)/2, (25-len)/2 );
} }
} }
} }

View File

@ -1,19 +1,19 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
while ( true ) while ( true )
{ {
float left, right; float left, right;
left = radar(WayPoint, 45, 120, 0, 20); left = radar(WayPoint, 45, 120, 0, 20);
right = radar(WayPoint, -45, 120, 0, 20); right = radar(WayPoint, -45, 120, 0, 20);
if ( left == 0 && right == 0 ) // nothing ? if ( left == 0 && right == 0 ) // nothing ?
{ {
turn(180); // turn around turn(180); // turn around
} }
else else
{ {
motor(left, right); motor(left, right);
} }
} }
} }

View File

@ -1,11 +1,11 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
float dir; float dir;
for ( int i=0 ; i<5 ; i=i+1 ) for ( int i=0 ; i<5 ; i=i+1 )
{ {
move(20); move(20);
dir = receive("Direction"); dir = receive("Direction");
turn(dir); turn(dir);
} }
} }

View File

@ -1,16 +1,16 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
float dir, len; float dir, len;
while ( true ) while ( true )
{ {
dir = receive("Direction"); dir = receive("Direction");
if ( dir == nan ) break; if ( dir == nan ) break;
len = receive("Length"); len = receive("Length");
if ( len == nan ) break; if ( len == nan ) break;
turn(dir); turn(dir);
move(len); move(len);
} }
} }

View File

@ -1,33 +1,33 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
while ( true ) while ( true )
{ {
object target; object target;
float dir, len; float dir, len;
target = radar(TargetBot); target = radar(TargetBot);
if ( target == null ) if ( target == null )
{ {
motor(0, 0); // stop motor(0, 0); // stop
break; break;
} }
len = distance(position, target.position); len = distance(position, target.position);
if ( len < 5 ) // too close ? if ( len < 5 ) // too close ?
{ {
motor(len/5-1, len/5-1); // move backward motor(len/5-1, len/5-1); // move backward
} }
else else
{ {
dir = direction(target.position); dir = direction(target.position);
if ( dir < 0 ) // on the right ? if ( dir < 0 ) // on the right ?
{ {
motor(1, 1+dir/90); motor(1, 1+dir/90);
} }
else // on the left ? else // on the left ?
{ {
motor(1-dir/90, 1); motor(1-dir/90, 1);
} }
} }
} }
} }

View File

@ -1,43 +1,42 @@
extern void object::Hare( ) extern void object::Hare( )
{ {
int nb = 0; int nb = 0;
while ( true ) while ( true )
{ {
point dest; point dest;
float dist; float dist;
object bot; object bot;
do do
{ {
dest.x = 8+rand()*24; dest.x = 8+rand()*24;
dest.y = -89.5+rand()*24; dest.y = -89.5+rand()*24;
dist = distance(dest, position); dist = distance(dest, position);
} }
while ( dist < 10 ); while ( dist < 10 );
goto(dest); goto(dest);
wait(2); wait(2);
bot = radar(PracticeBot, 0, 360, 0, 10); bot = radar(PracticeBot, 0, 360, 0, 10);
if ( bot == null ) if ( bot == null )
{ {
nb = 0; nb = 0;
message("Failure, you are too far away. Start again 10x."); message("Failure, you are too far away. Start again 10x.");
} }
else else
{ {
nb ++; nb ++;
if ( nb < 10 ) if ( nb < 10 )
{ {
message("Distance OK, "+(10-nb)+" more to come"); message("Distance OK, "+(10-nb)+" more to come");
} }
else else
{ {
message("Well done, let's go home."); message("Well done, let's go home.");
goto(-2, -77.5, 0); goto(-2, -77.5, 0);
break; break;
} }
} }
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
for ( int i=0 ; i<6 ; i=i+1 ) // repeat 6 times for ( int i=0 ; i<6 ; i=i+1 ) // repeat 6 times
{ {
move(5); // move 5m forward move(5); // move 5m forward
turn(90); // quarter turn left turn(90); // quarter turn left
fire(1); // shoot fire(1); // shoot
turn(-90); // quarter turn right turn(-90); // quarter turn right
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
for ( int i=0 ; i<4 ; i=i+1 ) // repeat 4 times for ( int i=0 ; i<4 ; i=i+1 ) // repeat 4 times
{ {
move(10); // move 10m forward move(10); // move 10m forward
turn(90); // quarter turn left turn(90); // quarter turn left
fire(1); // destroy the target fire(1); // destroy the target
turn(-180); // turns around turn(-180); // turns around
} }
} }

View File

@ -1,16 +1,16 @@
extern void object::CollectTitanium1() extern void object::CollectTitanium1()
{ {
// 1) Variable definition. // 1) Variable definition.
object item; // info. about objects object item; // info. about objects
// 2) Go to the titanium ore and grab it. // 2) Go to the titanium ore and grab it.
item = radar(TitaniumOre);// look for titanium ore item = radar(TitaniumOre);// look for titanium ore
goto(item.position); // go to the position goto(item.position); // go to the position
grab(); // grab the titanium grab(); // grab the titanium
// 3) Go to the converter and drop it. // 3) Go to the converter and drop it.
item = radar(Converter); // look for converter item = radar(Converter); // look for converter
goto(item.position); // go to the position goto(item.position); // go to the position
drop(); // drop the titanium drop(); // drop the titanium
move(-2.5); // step back 2.5 m move(-2.5); // step back 2.5 m
} }

View File

@ -1,24 +1,24 @@
extern void object::CollectTitanium2() extern void object::CollectTitanium2()
{ {
// 1) Variable definition. // 1) Variable definition.
object item; // info. about objects object item; // info. about objects
// 2) Go to the titanium ore and grab it. // 2) Go to the titanium ore and grab it.
item = radar(TitaniumOre);// look for titanium ore item = radar(TitaniumOre);// look for titanium ore
goto(item.position); // go to the position goto(item.position); // go to the position
grab(); // grab the titanium grab(); // grab the titanium
// 3) Go to the converter and drop it. // 3) Go to the converter and drop it.
item = radar(Converter); // look for converter item = radar(Converter); // look for converter
goto(item.position); // go to the position goto(item.position); // go to the position
drop(); // drop the titanium drop(); // drop the titanium
move(-2.5); // step back 2.5 m move(-2.5); // step back 2.5 m
// 4) If power cell half empty, recharges. // 4) If power cell half empty, recharges.
if ( energyCell.energyLevel < 0.5 ) if ( energyCell.energyLevel < 0.5 )
{ // if so: { // if so:
item = radar(PowerStation); // look for station item = radar(PowerStation); // look for station
goto(item.position); // go there goto(item.position); // go there
wait(5); // wait wait(5); // wait
} }
} }

View File

@ -1,48 +1,48 @@
extern void object::CollectTitanium3() extern void object::CollectTitanium3()
{ {
// 1) Variable definition. // 1) Variable definition.
object item; // info. about objects object item; // info. about objects
while (true) // repeat forever while (true) // repeat forever
{ {
// 2) Go to the titanium ore and grab it. // 2) Go to the titanium ore and grab it.
item = radar(TitaniumOre);// look for titanium ore item = radar(TitaniumOre);// look for titanium ore
goto(item.position); // go to the position goto(item.position); // go to the position
grab(); // grab the titanium grab(); // grab the titanium
// 3) Go to the converter and drop it. // 3) Go to the converter and drop it.
item = radar(Converter); // look for converter item = radar(Converter); // look for converter
goto(item.position); // go to the position goto(item.position); // go to the position
drop(); // drop the titanium drop(); // drop the titanium
move(-2.5); // step back 2.5 m move(-2.5); // step back 2.5 m
// 4) Wait until titanium converted and grabs // 4) Wait until titanium converted and grabs
do do
{ {
wait(1); // wait for cube wait(1); // wait for cube
item = radar(Titanium, 0, 45, 0, 5); item = radar(Titanium, 0, 45, 0, 5);
} }
while ( item == null ); while ( item == null );
goto(item.position); goto(item.position);
grab(); // take it grab(); // take it
// 5) Go to free space and drop it // 5) Go to free space and drop it
goto(space(position)); // go to free space goto(space(position)); // go to free space
drop(); // drop titanium drop(); // drop titanium
// If power cell half empty, recharges. // If power cell half empty, recharges.
if ( energyCell.energyLevel < 0.5 ) if ( energyCell.energyLevel < 0.5 )
{ // if so: { // if so:
item = radar(PowerStation); item = radar(PowerStation);
if ( item != null ) // station found ? if ( item != null ) // station found ?
{ {
goto(item.position); // go there goto(item.position); // go there
while ( energyCell.energyLevel < 1 ) while ( energyCell.energyLevel < 1 )
{ // until recharged: { // until recharged:
wait(1); // wait wait(1); // wait
} }
} }
} }
} }
} }

View File

@ -1,50 +1,50 @@
extern void object::CollectTitanium4() extern void object::CollectTitanium4()
{ {
// 1) Variable definition. // 1) Variable definition.
object item; // info. about objects object item; // info. about objects
while (true) // repeat forever while (true) // repeat forever
{ {
// 2) Go to the titanium ore and grab it. // 2) Go to the titanium ore and grab it.
item = radar(TitaniumOre);// look for titanium ore item = radar(TitaniumOre);// look for titanium ore
goto(item.position); // go to the position goto(item.position); // go to the position
grab(); // grab the titanium grab(); // grab the titanium
// 3) Go to the converter and drop it. // 3) Go to the converter and drop it.
item = radar(Converter); // look for converter item = radar(Converter); // look for converter
goto(item.position); // go to the position goto(item.position); // go to the position
drop(); // drop the titanium drop(); // drop the titanium
move(-2.5); // step back 2.5 m move(-2.5); // step back 2.5 m
// 4) Wait until titanium converted and grabs // 4) Wait until titanium converted and grabs
do do
{ {
wait(1); // wait for cube wait(1); // wait for cube
item = radar(Titanium, 0, 45, 0, 5); item = radar(Titanium, 0, 45, 0, 5);
} }
while ( item == null ); while ( item == null );
goto(item.position); goto(item.position);
grab(); // take it grab(); // take it
// 5) Go to free space and drop it // 5) Go to free space and drop it
goto(space(position)); // go to free space goto(space(position)); // go to free space
drop(); // drop titanium drop(); // drop titanium
// If power cell half empty, recharges. // If power cell half empty, recharges.
if ( energyCell.energyLevel < 0.5 ) if ( energyCell.energyLevel < 0.5 )
{ // if so: { // if so:
item = radar(PowerCaptor); item = radar(PowerCaptor);
if ( item != null ) // station found ? if ( item != null ) // station found ?
{ {
goto(item.position); // go there goto(item.position); // go there
while ( energyCell.energyLevel < 1 ) while ( energyCell.energyLevel < 1 )
{ // until recharged: { // until recharged:
wait(1); // wait wait(1); // wait
} }
} }
} }
} }
} }

View File

@ -1,26 +1,26 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
object front, left, right; object front, left, right;
front = radar(Barrier, 0, 45, 0, 5); front = radar(Barrier, 0, 45, 0, 5);
left = radar(Barrier, 90, 45, 0, 5); left = radar(Barrier, 90, 45, 0, 5);
right = radar(Barrier, -90, 45, 0, 5); right = radar(Barrier, -90, 45, 0, 5);
if ( front == null ) if ( front == null )
{ {
move(5); move(5);
return; return;
} }
if ( left == null ) if ( left == null )
{ {
turn(90); turn(90);
move(5); move(5);
return; return;
} }
if ( right == null ) if ( right == null )
{ {
turn(-90); turn(-90);
move(5); move(5);
return; return;
} }
} }

View File

@ -1,28 +1,28 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
while ( true ) while ( true )
{ {
object front, left, right; object front, left, right;
front = radar(Barrier, 0, 45, 0, 5); front = radar(Barrier, 0, 45, 0, 5);
left = radar(Barrier, 90, 45, 0, 5); left = radar(Barrier, 90, 45, 0, 5);
right = radar(Barrier, -90, 45, 0, 5); right = radar(Barrier, -90, 45, 0, 5);
if ( front == null ) if ( front == null )
{ {
move(5); move(5);
continue; continue;
} }
if ( left == null ) if ( left == null )
{ {
turn(90); turn(90);
continue; continue;
} }
if ( right == null ) if ( right == null )
{ {
turn(-90); turn(-90);
continue; continue;
} }
break; break;
} }
} }

View File

@ -1,10 +1,10 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
move(20); // go to checkpoint 1 move(20); // go to checkpoint 1
turn(90); turn(90);
move(20); // go to checkpoint 2 move(20); // go to checkpoint 2
turn(-90); turn(-90);
move(20); // go to checkpoint 3 move(20); // go to checkpoint 3
turn(-90); turn(-90);
move(20); // go to finishing pad move(20); // go to finishing pad
} }

View File

@ -1,15 +1,15 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
float dist, dir; float dist, dir;
dist = 20; dist = 20;
dir = 90; dir = 90;
move(dist); // go to checkpoint 1 move(dist); // go to checkpoint 1
turn(dir); turn(dir);
move(dist); // go to checkpoint 2 move(dist); // go to checkpoint 2
turn(-dir); turn(-dir);
move(dist); // go to checkpoint 3 move(dist); // go to checkpoint 3
turn(-dir); turn(-dir);
move(dist); // goeto finishing pad move(dist); // goeto finishing pad
} }

View File

@ -1,15 +1,15 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
float dist, dir; float dist, dir;
dist = 20; dist = 20;
dir = 90; dir = 90;
move(dist); move(dist);
turn(dir); turn(dir);
move(dist*2); move(dist*2);
turn(dir); turn(dir);
move(dist); move(dist);
turn(dir); turn(dir);
move(dist); move(dist);
} }

View File

@ -1,31 +1,31 @@
extern void object::ServiceTower1() extern void object::ServiceTower1()
{ {
object tower; // info. about tower object tower; // info. about tower
object station; // info. about station object station; // info. about station
// 1) go to the defense tower // 1) go to the defense tower
tower = radar(DefenseTower); // look for tower tower = radar(DefenseTower); // look for tower
goto(tower.position); // go there goto(tower.position); // go there
while ( true ) // repeat forever while ( true ) // repeat forever
{ {
// 2) wait until power cell is empty // 2) wait until power cell is empty
while ( tower.energyCell.energyLevel > 0.2 ) while ( tower.energyCell.energyLevel > 0.2 )
{ {
wait(2); wait(2);
} }
grab(); // grab the power cell grab(); // grab the power cell
// 3) go to the power station to recharge // 3) go to the power station to recharge
station = radar(PowerStation); station = radar(PowerStation);
goto(station.position); // go there goto(station.position); // go there
while ( load.energyLevel < 1 ) while ( load.energyLevel < 1 )
{ {
wait(1); // wait until recharged wait(1); // wait until recharged
} }
// 4) go back to defense tower // 4) go back to defense tower
goto(tower.position); // go to tower goto(tower.position); // go to tower
drop(); // drop the power cell drop(); // drop the power cell
} }
} }

View File

@ -1,15 +1,14 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
Square(15); Square(15);
Square(25); Square(25);
} }
void object::Square(float length) void object::Square(float length)
{ {
for ( int i=0 ; i<4 ; i=i+1 ) for ( int i=0 ; i<4 ; i=i+1 )
{ {
move(length); move(length);
turn(90); turn(90);
} }
} }

View File

@ -1,18 +1,18 @@
void object::Part(float length) void object::Part(float length)
{ {
for ( int i=0 ; i<2 ; i=i+1 ) for ( int i=0 ; i<2 ; i=i+1 )
{ {
move(length); move(length);
turn(90); turn(90);
} }
} }
extern void object::Solution( ) extern void object::Solution( )
{ {
float rest = 25; float rest = 25;
while ( rest > 0 ) while ( rest > 0 )
{ {
Part(rest); Part(rest);
rest = rest-5; rest = rest-5;
} }
} }

View File

@ -1,24 +1,24 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
object item; object item;
float dir, dist; float dir, dist;
while ( true ) while ( true )
{ {
do do
{ {
item = radar(AlienAnt, 0, 360, 0, 100); item = radar(AlienAnt, 0, 360, 0, 100);
} }
while ( item == null ); while ( item == null );
dir = direction(item.position); dir = direction(item.position);
turn(dir); turn(dir);
dist = distance(item.position, position); dist = distance(item.position, position);
if ( dist < 40 ) if ( dist < 40 )
{ {
fire(0.2); fire(0.2);
wait(2); wait(2);
} }
} }
} }

View File

@ -1,53 +1,53 @@
extern void object::Attack( ) extern void object::Attack( )
{ {
object p; object p;
float dist, prox; float dist, prox;
point nav1, nav2, dest; point nav1, nav2, dest;
boolean advance = true; boolean advance = true;
wait(5); wait(5);
while ( true ) while ( true )
{ {
p = radar(WheeledShooter); p = radar(WheeledShooter);
if ( p == null ) if ( p == null )
{ {
nav1.x = position.x-5; nav1.x = position.x-5;
nav1.y = position.y; nav1.y = position.y;
nav2.x = position.x+5; nav2.x = position.x+5;
nav2.y = position.y; nav2.y = position.y;
while ( true ) while ( true )
{ {
goto(nav1); goto(nav1);
p = radar(WheeledShooter); p = radar(WheeledShooter);
if ( p != null ) break; if ( p != null ) break;
goto(nav2); goto(nav2);
p = radar(WheeledShooter); p = radar(WheeledShooter);
if ( p != null ) break; if ( p != null ) break;
} }
} }
else else
{ {
dist = distance(p.position, position); dist = distance(p.position, position);
if ( dist <= 25 && !advance ) if ( dist <= 25 && !advance )
{ {
fire(p.position); fire(p.position);
advance = true; advance = true;
wait(2); wait(2);
} }
else else
{ {
prox = dist-5; prox = dist-5;
if ( prox > 25 ) prox = 25; if ( prox > 25 ) prox = 25;
if ( prox < 15 ) prox = 15; if ( prox < 15 ) prox = 15;
dest.x = (position.x-p.position.x)*prox/dist + p.position.x; dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
dest.y = (position.y-p.position.y)*prox/dist + p.position.y; dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
dest.z = (position.z-p.position.z)*prox/dist + p.position.z; dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
goto(dest); goto(dest);
advance = false; advance = false;
} }
} }
} }
} }

View File

@ -1,26 +1,25 @@
extern void object::Solution( ) extern void object::Solution( )
{ {
while ( true ) while ( true )
{ {
object spot; object spot;
float dir; float dir;
spot = radar(WayPoint); spot = radar(WayPoint);
if ( spot == null ) // no more ? if ( spot == null ) // no more ?
{ {
motor(0, 0); // stops motor(0, 0); // stops
break; break;
} }
dir = direction(spot.position); dir = direction(spot.position);
if ( dir < 0 ) // on the right ? if ( dir < 0 ) // on the right ?
{ {
motor(1, 1+dir/90); motor(1, 1+dir/90);
} }
else // on the left ? else // on the left ?
{ {
motor(1-dir/90, 1); motor(1-dir/90, 1);
} }
} }
} }

View File

@ -1,32 +1,32 @@
extern void object::Sow( ) extern void object::Sow( )
{ {
while ( true ) while ( true )
{ {
float x, y; float x, y;
x = 8+rand()*24; x = 8+rand()*24;
y = -89.5+rand()*24; y = -89.5+rand()*24;
goto(x,y,0); goto(x,y,0);
produce(position, 0, WayPoint, ""); produce(position, 0, WayPoint, "");
while ( Compte(WayPoint) >= 20 ) while ( Compte(WayPoint) >= 20 )
{ {
wait(2); wait(2);
} }
} }
} }
int Compte(int cat) int Compte(int cat)
{ {
int i, total; int i, total;
object p; object p;
total = 0; total = 0;
for ( i=0 ; i<10000 ; i++ ) for ( i=0 ; i<10000 ; i++ )
{ {
p = retobject(i); p = retobject(i);
if ( p == null ) break; if ( p == null ) break;
if ( p.category == cat ) total ++; if ( p.category == cat ) total ++;
} }
return total; return total;
} }

View File

@ -1,14 +1,14 @@
extern void object::Remote( ) extern void object::Remote( )
{ {
send("order", 1, 100); // send "grab" order send("order", 1, 100); // send "grab" order
wait(5); wait(5);
send("order", 3, 100); // send "move(10)" order send("order", 3, 100); // send "move(10)" order
wait(5); wait(5);
send("order", 2, 100); // send "drop" order send("order", 2, 100); // send "drop" order
wait(5); wait(5);
send("order", 4, 100); // send "move(-10)" order send("order", 4, 100); // send "move(-10)" order
wait(5); wait(5);
} }

View File

@ -1,46 +1,46 @@
extern void object::Slave( ) extern void object::Slave( )
{ {
float order; float order;
errmode(0); // don't stop on errors errmode(0); // don't stop on errors
while ( true ) while ( true )
{ {
// wait for order completion ... // wait for order completion ...
while ( !testinfo("order", 100) ) while ( !testinfo("order", 100) )
{ {
wait(1); wait(1);
} }
// get the order // get the order
order = receive("order", 100); order = receive("order", 100);
if ( order == 1 ) if ( order == 1 )
{ {
message("grab( )"); message("grab( )");
grab(); grab();
} }
else if ( order == 2 ) else if ( order == 2 )
{ {
message("drop( )"); message("drop( )");
drop(); drop();
} }
else if ( order == 3 ) else if ( order == 3 )
{ {
message("move(10)"); message("move(10)");
move(10); move(10);
} }
else if ( order == 4 ) else if ( order == 4 )
{ {
message("move(-10)"); message("move(-10)");
move(-10); move(-10);
} }
else else
{ {
message("Unknown order"); message("Unknown order");
} }
// signal "end of work" // signal "end of work"
deleteinfo("order", 100); deleteinfo("order", 100);
} }
} }

View File

@ -1,25 +1,25 @@
extern void object::Remote( ) extern void object::Remote( )
{ {
SendToPost(1, 20); // move(20); SendToPost(1, 20); // move(20);
SendToPost(2, 90); // turn(90); SendToPost(2, 90); // turn(90);
SendToPost(1, 20); // move(20); SendToPost(1, 20); // move(20);
SendToPost(2, 90); // turn(90); SendToPost(2, 90); // turn(90);
SendToPost(1, 10); // move(10); SendToPost(1, 10); // move(10);
SendToPost(2, 90); // turn(90); SendToPost(2, 90); // turn(90);
SendToPost(1, 10); // move(10); SendToPost(1, 10); // move(10);
SendToPost(2,-90); // turn(-90); SendToPost(2,-90); // turn(-90);
SendToPost(1, 10); // move(10); SendToPost(1, 10); // move(10);
} }
void object::SendToPost(float order, float param) void object::SendToPost(float order, float param)
{ {
// send the order and the parameter // send the order and the parameter
send("order", order, 100); send("order", order, 100);
send("param", param, 100); send("param", param, 100);
// wait for end of work // wait for end of work
while ( testinfo("order", 100) ) while ( testinfo("order", 100) )
{ {
wait(1); wait(1);
} }
} }

View File

@ -1,35 +1,35 @@
extern void object::Slave( ) extern void object::Slave( )
{ {
float order, param; float order, param;
while ( true ) while ( true )
{ {
// wait for order ... // wait for order ...
while ( !testinfo("order", 100) ) while ( !testinfo("order", 100) )
{ {
wait(1); wait(1);
} }
// read the order and the parameter // read the order and the parameter
order = receive("order", 100); order = receive("order", 100);
param = receive("param", 100); param = receive("param", 100);
if ( order == 1 ) if ( order == 1 )
{ {
message("move("+param+")"); message("move("+param+")");
move(param); move(param);
} }
else if ( order == 2 ) else if ( order == 2 )
{ {
message("turn("+param+")"); message("turn("+param+")");
turn(param); turn(param);
} }
else else
{ {
message("Unknown order"); message("Unknown order");
} }
// signal "end of work" // signal "end of work"
deleteinfo("order", 100); deleteinfo("order", 100);
} }
} }

View File

@ -1,22 +1,22 @@
extern void object::Remote3( ) extern void object::Remote3( )
{ {
SendOrder("move(20)"); SendOrder("move(20)");
SendOrder("turn(90)"); SendOrder("turn(90)");
SendOrder("move(20)"); SendOrder("move(20)");
SendOrder("turn(90)"); SendOrder("turn(90)");
SendOrder("move(10)"); SendOrder("move(10)");
SendOrder("turn(90)"); SendOrder("turn(90)");
SendOrder("move(10)"); SendOrder("move(10)");
SendOrder("turn(-90)"); SendOrder("turn(-90)");
SendOrder("move(10)"); SendOrder("move(10)");
} }
void object::SendOrder(string order) void object::SendOrder(string order)
{ {
exchange list(); exchange list();
while ( list.put(order) == false ) while ( list.put(order) == false )
{ {
wait(1); wait(1);
} }
} }

View File

@ -1,52 +1,52 @@
public class exchange public class exchange
{ {
static private string m_order = ""; static private string m_order = "";
// Put an order // Put an order
synchronized bool put(string order) synchronized bool put(string order)
{ {
if ( m_order == "" ) if ( m_order == "" )
{ {
m_order = order; m_order = order;
return true; return true;
} }
else else
{ {
return false; return false;
} }
} }
// Get an order // Get an order
synchronized string get() synchronized string get()
{ {
string ret = m_order; string ret = m_order;
m_order = ""; m_order = "";
return ret; return ret;
} }
} }
extern void object::Slave3( ) extern void object::Slave3( )
{ {
exchange list(); exchange list();
string todo; string todo;
while ( true ) while ( true )
{ {
while ( true ) while ( true )
{ {
todo = list.get(); todo = list.get();
if ( todo != "" ) break; if ( todo != "" ) break;
wait(1); wait(1);
} }
message(todo); message(todo);
if ( strfind(todo, "move") == 0 ) if ( strfind(todo, "move") == 0 )
{ {
move(strval(strmid(todo,5))); move(strval(strmid(todo,5)));
} }
if ( strfind(todo, "turn") == 0 ) if ( strfind(todo, "turn") == 0 )
{ {
turn(strval(strmid(todo,5))); turn(strval(strmid(todo,5)));
} }
} }
} }

View File

@ -1,26 +1,26 @@
extern void object::Remote4( ) extern void object::Remote4( )
{ {
SendOrder(1, 20); // move(20); SendOrder(1, 20); // move(20);
SendOrder(2, 90); // turn(90); SendOrder(2, 90); // turn(90);
SendOrder(1, 20); // move(20); SendOrder(1, 20); // move(20);
SendOrder(2, 90); // turn(90); SendOrder(2, 90); // turn(90);
SendOrder(1, 10); // move(10); SendOrder(1, 10); // move(10);
SendOrder(2, 90); // turn(90); SendOrder(2, 90); // turn(90);
SendOrder(1, 10); // move(10); SendOrder(1, 10); // move(10);
SendOrder(2,-90); // turn(-90); SendOrder(2,-90); // turn(-90);
SendOrder(1, 10); // move(10); SendOrder(1, 10); // move(10);
} }
void object::SendOrder(float order, float param) void object::SendOrder(float order, float param)
{ {
exchange list(); exchange list();
order todo(); order todo();
todo.m_type = order; todo.m_type = order;
todo.m_param = param; todo.m_param = param;
while ( list.put(todo) == false ) while ( list.put(todo) == false )
{ {
wait(1); wait(1);
} }
} }

View File

@ -1,68 +1,68 @@
public class order public class order
{ {
int m_type = nan; int m_type = nan;
float m_param; float m_param;
} }
public class exchange public class exchange
{ {
static private order m_order = new order; static private order m_order = new order;
// Put an order // Put an order
synchronized bool put(order a) synchronized bool put(order a)
{ {
if ( m_order.m_type == nan ) if ( m_order.m_type == nan )
{ {
m_order = a; m_order = a;
return true; return true;
} }
else else
{ {
return false; return false;
} }
} }
// Get an order // Get an order
synchronized order get() synchronized order get()
{ {
return m_order; return m_order;
} }
// Delete an order. // Delete an order.
synchronized void delete() synchronized void delete()
{ {
m_order.m_type = nan; m_order.m_type = nan;
} }
} }
extern void object::Slave4( ) extern void object::Slave4( )
{ {
exchange list(); exchange list();
order todo; order todo;
while ( true ) while ( true )
{ {
while ( true ) while ( true )
{ {
todo = list.get(); todo = list.get();
if ( todo.m_type != nan ) break; if ( todo.m_type != nan ) break;
wait(1); wait(1);
} }
if ( todo.m_type == 1 ) if ( todo.m_type == 1 )
{ {
message("move("+todo.m_param+")"); message("move("+todo.m_param+")");
move(todo.m_param); move(todo.m_param);
} }
else if ( todo.m_type == 2 ) else if ( todo.m_type == 2 )
{ {
message("turn("+todo.m_param+")"); message("turn("+todo.m_param+")");
turn(todo.m_param); turn(todo.m_param);
} }
else else
{ {
message("Unknown order"); message("Unknown order");
} }
list.delete(); list.delete();
} }
} }

View File

@ -1,22 +1,22 @@
extern void object::Remote5( ) extern void object::Remote5( )
{ {
SendOrder(1, 20); // move(20); SendOrder(1, 20); // move(20);
SendOrder(2, 90); // turn(90); SendOrder(2, 90); // turn(90);
SendOrder(1, 20); // move(20); SendOrder(1, 20); // move(20);
SendOrder(2, 90); // turn(90); SendOrder(2, 90); // turn(90);
SendOrder(1, 10); // move(10); SendOrder(1, 10); // move(10);
SendOrder(2, 90); // turn(90); SendOrder(2, 90); // turn(90);
SendOrder(1, 10); // move(10); SendOrder(1, 10); // move(10);
SendOrder(2,-90); // turn(-90); SendOrder(2,-90); // turn(-90);
SendOrder(1, 10); // move(10); SendOrder(1, 10); // move(10);
} }
void object::SendOrder(float order, float param) void object::SendOrder(float order, float param)
{ {
exchange list(); exchange list();
order todo(); order todo();
todo.m_type = order; todo.m_type = order;
todo.m_param = param; todo.m_param = param;
list.put(todo); list.put(todo);
} }

View File

@ -1,62 +1,62 @@
public class order public class order
{ {
int m_type; int m_type;
float m_param; float m_param;
} }
public class exchange public class exchange
{ {
static private order m_fifo[] = null; static private order m_fifo[] = null;
// Put an order into the fifo // Put an order into the fifo
synchronized void put(order a) synchronized void put(order a)
{ {
m_fifo[sizeof(m_fifo)] = a; m_fifo[sizeof(m_fifo)] = a;
} }
// Get an order from the fifo // Get an order from the fifo
synchronized order get() synchronized order get()
{ {
if ( sizeof(m_fifo) == 0 ) return null; if ( sizeof(m_fifo) == 0 ) return null;
order a = m_fifo[0]; order a = m_fifo[0];
order copy[] = null; order copy[] = null;
for ( int i=1 ; i<sizeof(m_fifo) ; i++ ) for ( int i=1 ; i<sizeof(m_fifo) ; i++ )
{ {
copy[i-1] = m_fifo[i]; copy[i-1] = m_fifo[i];
} }
m_fifo = copy; m_fifo = copy;
return a; return a;
} }
} }
extern void object::Slave5( ) extern void object::Slave5( )
{ {
exchange list(); exchange list();
order todo; order todo;
while ( true ) while ( true )
{ {
while ( true ) while ( true )
{ {
todo = list.get(); todo = list.get();
if ( todo != null ) break; if ( todo != null ) break;
wait(1); wait(1);
} }
if ( todo.m_type == 1 ) if ( todo.m_type == 1 )
{ {
message("move("+todo.m_param+")"); message("move("+todo.m_param+")");
move(todo.m_param); move(todo.m_param);
} }
else if ( todo.m_type == 2 ) else if ( todo.m_type == 2 )
{ {
message("turn("+todo.m_param+")"); message("turn("+todo.m_param+")");
turn(todo.m_param); turn(todo.m_param);
} }
else else
{ {
message("Unknown order"); message("Unknown order");
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show More