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 |
20 | int d,r,o; |
21 |
22 | main() { 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 |
39 | fire() { 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 | } |