/*---------------------------------------------------------------------------- Nome : Rattolo.r (28-09-98) Autori : Marco Pranzo Luca Pranzo ------------------------------------------------------------------------------ Rattolo Š un robogatto programmato per uccidere i piccoli robotopi che infestano l'appartamento dei suoi creatori. Purtroppo per Rattolo i robotopi sono pesantemente armati e dotati di intenzioni piuttosto bellicose, per cui dovr… sfoderare le unghie e dimostrare di saperle usare. Rattolo Š un robogatto saggio che tiene alla sua pelliccia sintetica per cui decide sempre di mettersi in un angolino e rimanervi tranquillo difendendolo con le unghie. Oltre a difendere il suo cantuccio caldo ogni tanto si guarda anche intorno alla ricerca dei robotopi decidendo di attaccare l'ultimo sopravvissuto. Le peculiarit… di questo crobot sono la totale assenza di correzioni sulla routine di sparo, uno sparo impreciso, la quasi totale assenza di procedure ed una strategia finale pi— aggressiva se poco danneggiato, pi— cauta se ferito gravemente. ----------------------------------------------------------------------------*/ int conta1,conta2, numero,count,a, dir,corner,t, dist,ang,aux; main() { /* Rattolo si reca nell'angolo pi— vicino... */ if (loc_x() > 500) if (loc_y() > 500) { vai(800,800,5000,100); vai(999,999,2000,50); corner=180; } else { vai(800,200,5000,100); vai(999,1,2000,50); corner=90; } else if (loc_y() > 500) { vai(200,800,5000,100); vai(1,999,2000,50); corner=270; } else { vai(200,200,5000,100); vai(1,1,2000,50); corner=0; } /* ... e qui vi rimane per circa 80000 cicli... */ dir=corner+180; t=201; while (t-=1) { drive(dir+=180,100); spara();spara(); spara();spara(); drive(dir,0); spara();spara(); if (!speed()) { drive(dir+180,100); spara(); } } /* ... allo scadere dei quali... */ while(1) { /* ... se non Š moribondo si guarda intorno contando i robotopi... */ if (damage() < 90) { count=10; numero=-1; a=corner; while (count) { count-=1; numero+=!(!scan(a,5)); a+=11; } conta1=!numero; count=10; numero=-1; a=corner; while (count) { count-=1; numero+=!(!scan(a,5)); a+=11; } conta2=!numero; /* ... e se ne rimane uno solo... */ if ( conta1 && conta2 ) { /* ... e lui Š poco ferito lo insegue... */ if (damage() < 50) { while (!scan(ang,10)) ang+=21; drive(ang,100); while(1) { if (dist=scan(ang,10)) cannon(ang,dist); else { drive(ang,40); if (dist=scan(ang+180,10)) cannon(ang+=180,dist); else { ang+=318; while(!(dist=scan(ang+=21,10))); cannon(ang,dist); } while (speed()>49) ; drive(ang,100); } } } /* ... altrimenti ci gioca un po. */ else { vai(500,500,20000,100); while(1) { drive(90,100); while (loc_y() < 900) { if (scan(ang,10)) cannon(ang+=7*(!(scan(ang+356,7)))+353*(!(scan(ang+4,7))),scan(ang,10)); else ang+=21; } drive(90,0); while (speed() > 49) { if ((dist=scan(ang,10))) cannon(ang,dist); else ang+=21; } drive(270,100); while (loc_y() > 100) { if (scan(ang,10)) cannon(ang+=7*(!(scan(ang+356,7)))+353*(!(scan(ang+4,7))),scan(ang,10)); else ang+=21; } drive(270,0); while (speed() > 49) { if ((dist=scan(ang,10))) cannon(ang,dist); else ang+=21; } } } } } /* Se invece Š moribondo cerca di portare a casa la pelliccia. */ else { dir=corner+180; t=10000; while (t-=1) { drive(dir+=180,100); spara();spara(); spara();spara(); drive(dir,0); spara();spara(); if (!speed()) { drive(dir+180,100); spara(); } } } /* Mentre se sono rimasti troppi robotopi attende pazientemente. */ dir=corner+180; t=51; while (t-=1) { drive(dir+=180,100); spara();spara(); spara();spara(); drive(dir,0); spara();spara(); if (!speed()) { drive(dir+180,100); spara(); } } } } /* Routine di movimento */ vai(xx,yy,ad,vel) { drive(dir=180+180*(xx>loc_x())+atan(100000*(loc_y()-yy)/(loc_x()-xx)),vel); while( ((xx-loc_x())*(xx-loc_x())+(yy-loc_y())*(yy-loc_y())) > ad ) spara(); drive(dir,0); while (speed() > 49) if ((dist=scan(ang,10))) cannon(ang,dist); else ang+=21; } /* Routine di fuoco */ spara() { if ( (dist=scan(ang,10)) && (dist < 770) ) cannon(ang+=7*(!(scan(ang+356,7)))+353*(!(scan(ang+4,7))),scan(ang,10)); else { 0;0;0;0; aux=ang; ang+=21*(!(!scan(ang+21,10))); ang+=42*(aux==ang); } }