/*------------------------------------------------------------------------------- Robot: colossus.r Versione: w3 Data: 11-09-1997 Autore: Cisana Gianluca Strategia: Raggiunge l'angolo piu' vicino dell'arena ed oscilla verticalmente vicino alla parete. Se i danni subiti superano un valore prefissato trova un angolo non presidiato da avversari e vi si colloca. La routine di fuoco interpola angolo e range di tiro solo nel caso in cui l'avversario si trovasse ancora nella posizione corrispondente al tiro precedente. Dopo un certo tempo se il robot non ha subito danni superiori all'80% entra nella fase finale in cui spostandosi da angolo in angolo elimina i robot resi- dui. Il numero di cicli dopo cui questo avviene e' molto variabile in quanto le routine di cui mi avvalgo non sono a tempo di esecuzione costante. -------------------------------------------------------------------------------*/ int angle,range,r,max_danno,delta_danni,t_limite,timer,fase_1; int ym1,ym2,delta_danni2; main() { /* Inizializzazione */ delta_danni=14; delta_danni2=5; fase_1=200; range=0; angle=0; /*******************/ /* Fase iniziale */ /*******************/ /* Raggiunge la parete piu' vicina */ /* 90:su 270:giu */ if (loc_x()<500) lato_sx(); else lato_dx(); /* Raggiunge l'angolo piu' vicino */ if (loc_y()<500) basso(); else alto(); max_danno=damage()+delta_danni; /*********************/ /* Fase intermedia */ /*********************/ while (fase_1) { while (loc_y()>ym1) { drive (270,100); secret_weapon(); } while (loc_y()max_danno) { if (ym1==125) /* Siamo in basso */ if (loc_x()<250) { if (!scan(80,10)) { alto(); max_danno=damage()+delta_danni; } else if (!scan(10,10) && !scan(350,10)) { lato_dx(); max_danno=damage()+delta_danni; } else max_danno=damage()+delta_danni2; } else { if (!scan(100,10)) { alto(); max_danno=damage()+delta_danni; } else if (!scan(190,10) && !scan(170,10)) { lato_sx(); max_danno=damage()+delta_danni; } else max_danno=damage()+delta_danni2; } else if (loc_x()<200) { if (!scan(280,10)) { basso(); max_danno=damage()+delta_danni; } else if (!scan(10,10) && !scan(350,10)) { lato_dx(); max_danno=damage()+delta_danni; } else max_danno=damage()+delta_danni2; } else { if (!scan(260,10)) { basso(); max_danno=damage()+delta_danni; } else if (!scan(190,10) && !scan(170,10)) { lato_sx(); max_danno=damage()+delta_danni; } else max_danno=damage()+delta_danni2; } } --fase_1; } /*****************/ /* Fase finale */ /*****************/ if (damage()>80) t_limite=1000; /* Non attacca */ else t_limite=30; /* Cambia angolo ogni 30 cicli */ while(1) { timer=t_limite; while (timer) { while (loc_y()>ym1) { drive (270,100); secret_weapon(); } while (loc_y()100) { drive(180,100); secret_weapon(); } while(loc_x()>15) { drive(180,49); secret_weapon(); } drive(180,0); } lato_dx() { /* Sposta il robot sul lato destro dell'arena */ while(loc_x()<900) { drive(0,100); secret_weapon(); } while(loc_x()<985) { drive(0,49); secret_weapon(); } drive(0,0); } basso() { /* Sposta il robot sul lato inferiore dell'arena */ while (loc_y()>230) { drive(270,100); secret_weapon(); } while (loc_y()>135) { drive(270,49); secret_weapon(); } drive(270,10); ym1=125; ym2=110; } alto() { /* Sposta il robot sul lato superiore dell'arena */ while (loc_y()<800) { drive(90,100); secret_weapon(); } while (loc_y()<890) { drive(90,49); secret_weapon(); } drive(90,10); ym1=875; ym2=890; }