1994/superfly.r

01/*-------------------------------------------------------------------------*/
02/*  SUPERFLY.R                  Programmato da:  Ugolini Davide            */
03/*                                                                         */
04/* Questo cRobot rimbalza a 45 gradi contro i lati dell'area,    _______   */
05/* con un'angolo di deviazione di 90 gradi,                     |  / \  |  */
06/* mentre si muove viaggia con uno speed() massimo di 100,      |<     >|  */
07/* quando ribalza lo speed() scende fino a 45.                  |  \ /  |  */
08/* Il movimento viene eseguito in senso antiorario,              ~~~~~~~   */
09/* durante gli spostamenti viene usata una routine unica di fuoco          */
10/* che fa uno scan a 360 con step di 20 e risoluzione di 10,               */
11/* fino a quando non e' stato trovato il bersaglio,                        */
12/* appena trovato fa un cannon() con un range che viene corretto in base   */
13/* a quello precedente sommando o sottraendo la differenza solo            */
14/* se il range si trova sopra a 300, altrimenti fa un cannon() normale.    */
15/* (Mi sembra che questa tecnica dia dei buoni risultati)                  */
16/* Dopo il cannon lo scan riprende da 50 gradi piu indietro,               */
17/* riniziando il ciclo di scan.                                            */
18/*-------------------------------------------------------------------------*/
19 
20int d,r,o;
21 
22main() { drive(180,100); while(loc_x()>100) fire();
23         drive(180,  0); while(speed()>45) fire();
24         drive( 90,100); while(loc_y()<500) fire();
25         drive( 90,  0); while(speed()>45) fire();
26         drive(270,100); while(loc_y()>500) fire();
27         while(1) {
28                    drive(135,  0); while(speed()>45) fire();
29                    drive( 45,100); while(loc_y()<850) fire();
30                    drive( 45,  0); while(speed()>45) fire();
31                    drive(315,100); while(loc_x()<850) fire();
32                    drive(315,  0); while(speed()>45) fire();
33                    drive(225,100); while(loc_y()>150) fire();
34                    drive(225,  0); while(speed()>45)  fire();
35                    drive(135,100); while(loc_x()>150) fire();
36                  }
37         }
38 
39fire() { d+=20;
40         if (r=scan(d,10)) {
41            if (r>300) {
42               if (r>o) cannon(d,r+(r-o));
43               if (r<o) cannon(d,r-(o-r));
44            } else cannon(d,r);
45            o = r;
46            d += 290;
47         }
48       }