/*--------------------------- Torneo: CRobots (2015) ------------------------ CROBOT: mies15.r (macro) CATEGORIA: 2000 istruzioni (macro) AUTORE: Andrea Jasci Cimini Code utilization: 86% (1724 / 2000) mies15.r compiled without errors --------------------------------------------------------------------------- TECHNICAL DATA SHEET: MIES 15 At the beginning of the robot checks whether it is a f2f, if the opponents are more than one, rotates clockwise at a distance from the edges about one-third the size of the battlefield, after 5 rotations It is launched the final attack. ---------------------------------------------------------------------------*/ int a,oa,r,o,d,x,y,b,ne,t,ang; main() { while(ang<360) { if(scan(ang+=20,10)) { if(++ne>1) { t=6; while(--t) { while (loc_x()<638) firevs(0, 100); fire(90, 59); while (loc_y()<638) firevs(90, 100); fire(180,59); while (loc_x()>362) firevs(180,100); fire(270,59); while (loc_y()>362) firevs(270,100); fire(0, 59); } while(1) { if(r>40) d=a+80+(b^=1)*200; else d+=180; x=loc_x(y=loc_y()); if ((x%750)<250) d=180*(x>500)+375-30*(y<500); else if ((y%750)<250) d=180*(y>500)+105-30*(x<500); else if(damage()>75) d+=180; spara(drive(d,100)); if(scan(a-15,10)) a-=4; if(scan(a+15,10)) a+=4; spara(drive(d,100)); if(r>342) fuoco(drive(d,100)); } } else fire(a=ang,100); } } while(1) { if(r>40) d=a+80+(b^=1)*200; else d+=180; x=loc_x(y=loc_y()); if ((x%850)<150) d=180*(x>500); else if ((y%850)<150) d=180*(y>500)+90; else if(damage()>75) d+=180; spara(drive(d,100)); if(scan(a-15,10)) a-=4; if(scan(a+15,10)) a+=4; spara(drive(d,100)); if(r>372) fuoco(drive(d,100)); } } firevs(d,v) { int d,v; drive(d,v); if (r=scan(oa=a,10)) { if (scan(a-8,5)) {if (scan(a-=5,2)); else a-=4; return cannon(a+(a-oa),(scan(a,10)<<1)-r);} else if (scan(a+8,5)) {if (scan(a+=5,2)); else a+=4; return cannon(a+(a-oa),(scan(a,10)<<1)-r);} else { if (scan(a,2)) { if (scan(a-=2,2)) return cannon(a+(a-oa),(scan(a,10)<<1)-r); else return cannon((a+=4)+(a-oa),(scan(a,10)<<1)-r); } else if(r=scan(a-21,10)) cannon(a-=21,r); else {while (!(r=scan(a+=21,10))); cannon(a,r);} return cannon(a,(scan(a,10)<<1)-r); } } else if(r=scan(a-21,10)) cannon(a-=21,r); else {while (!(r=scan(a+=21,10))); cannon(a,r);} return cannon(a,(scan(a,10)<<1)-r); } fire(d,v) { int d,v; drive(d,v); if((r=scan(oa=a,10))&&(r<808)) { if (scan(a+350,10)) a+=355; else a+=5; if (scan(a+350,10)) a+=357; else a+=3; return cannon(a+(a-oa),(scan(a,10)<<1)-r); } else if(r=scan(a-21,10)) cannon(a-=21,r); else if(r=scan(a+=21,10)) cannon(a,r); else {while(!(r=scan(a+=21,10)));} return cannon(a,(scan(a,10)<<1)-r); } fuoco() { int asin,acos; if (speed()>90){if (r=scan(d,10)) {if (r<850) a=d; else return drive(d,100);}} if (scan(a,10)) { asin=(sin(a-d)>>14); acos=(cos(a-d)>>12)-230; a-=7*(scan(a-18,10)>0); a+=7*(scan(a+18,10)>0); if(scan(a-13,10)) a-=5; else if(scan(a+13,10)) a+=5; if(scan(a+12,10)) a+=4; else if(scan(a-12,10)) a-=4; if(scan(a-11,10)) a-=2; if(scan(a+11,10)) a+=2; if (o=scan(oa=a,4)) { if(scan(a-13,10)) a-=5; else if(scan(a+13,10)) a+=5; if(scan(a+12,10)) a+=4; else if(scan(a-12,10)) a-=4; if(scan(a-11,10)) a-=2; if(scan(a+11,10)) a+=2; cannon(a+(a-oa)*((880+(r=scan(a,10))>>9))-asin, r*230/(o-r-acos)); } else if (scan(a-20,10)) return firevs(a-=12,100); else if (scan(a+20,10)) return firevs(a+=12,100); else {while (!(scan(a+=20,10))); return firevs(a,100);} } else if (r=scan(a-21, 10)) return cannon(a-=21,r); else if (r=scan(a+21, 10)) return cannon(a+=21,r); else if (r=scan(d, 10)) return cannon(a=d, r); else a+=63; } spara() { if (o=scan(a, 10)) { if (scan(a-15,10)) {if (scan(a-=13,4)) {if(scan(a-3,6)) a-=6; else ++a;} else if (scan(a-5,5)) a-=5;} else if(scan(a+14,10)) {if(scan(a+=14,5)) a+=5;} else if(scan(a+4,6)) a+=6; else a-=6; } else { if (o=scan(a-=21,10)) {if (scan(a-9, 10)) {if(scan(a-=13,5)) a-=5; else ++a;} else if(scan(a+9, 10)) a+=6;} else { if (o=scan(a+=42,10)) {if (scan(a+9,10)) a+=12;} else { if (o=scan(a+=21,10)); else { if (r=scan(a-=84, 10)) return cannon(a,r); else if (r=scan(a-=21, 10)) return cannon(a,r); else if (r=scan(a+=126,10)) return cannon(a,r); else if (r=scan(a+=21, 10)) return cannon(a,r); else if (r=scan(a-=168,10)) return cannon(a,r); else if (r=scan(a-=21, 10)) return cannon(a,r); else if (r=scan(a+=210,10)) return cannon(a,r); else return a+=69; } } } } if (r=scan(a,10)) { cannon (a, r*165/(165+o-r)); if (r>740) { if ((r>o) || (r>808)) { if(ne<2) return drive(a,100); else {a+=21; while (!(scan(a+=21,10))); return;} } } return; } else if (r=scan(a-21, 10)) return cannon(a-=21,r); else if (r=scan(a+21, 10)) return cannon(a+=21,r); else if (r=scan(d, 10)) return cannon(a=d, r); else a+=63; }