1993/vannina.r
01 | /* |
02 | VANNINA |
03 |
04 | Questo robot si muove in una direzione casuale fino a raggiun- |
05 | gere uno dei lati dell' arena, muovendosi ad una velocita' limita- |
06 | ta (40). Se subisce dei danni aumenta la velocita' e, se sono con- |
07 | sistenti (5%), cambia anche direzione. |
08 | La funzione di sparo e' stata ricavata da 'cube', ma migliorata |
09 | in modo abbastanza sensibile. |
10 |
11 |
12 | Realizzato da |
13 |
14 | Andrea Murru (MC4327) |
15 | */ |
16 |
17 | int an, sc_dir, sfas, oldd, dist, scd2, d; |
18 |
19 | main() |
20 | { |
21 | an= rand (360);drive(an,100); |
22 | d=damage(); |
23 | |
24 | while (1) { |
25 | |
26 | if (loc_x()>800) an= rand (180)+90; |
27 | if (loc_x()<200) {an= rand (180)-90; if (an<0) an=360-90;} |
28 | if (loc_y()>800) an= rand (180)+180; |
29 | if (loc_y()<200) an= rand (180); |
30 | |
31 | /* Se si e' avvicinata ad un lato cambia direzione */ |
32 | |
33 | if (damage()-d > 4) an= rand (360); |
34 | |
35 | /* Se ha subito danni consistenti cambia direzione */ |
36 | |
37 | drive(an,40+60*(damage()-d)); |
38 | d=damage(); |
39 | spara(); |
40 | } |
41 | } |
42 |
43 | spara () |
44 | { |
45 | if (!(dist = scan (sc_dir, 5))) { |
46 | if (dist = scan(sc_dir -= 10, 5)) sfas = -6; |
47 | else if (dist = scan(sc_dir -= 15, 10)) sfas = -10; |
48 | else if (dist = scan(sc_dir += 35, 5)) sfas = 6; |
49 | else if (dist = scan(sc_dir += 15, 10)) sfas = 10; |
50 | else { |
51 | sc_dir-=100; |
52 | |
53 | /* Incomincia a cercare a 60� in meno della precedente posizione angolare del nemico */ |
54 | |
55 | while (!(dist = scan(sc_dir += 20, 10))) ; |
56 | sfas = 0; |
57 | oldd = dist; |
58 | } |
59 | } |
60 | if (dist<1000) { |
61 | cannon(sc_dir + sfas, 2 * dist - oldd); |
62 | |
63 | /* Cerca di anticipare lo spostamento dell' avversrio, ipotizzando |
64 | che si sposti di quanto si e' spostato tra gli ultimi due rilevamenti */ |
65 | |
66 | oldd = dist; |
67 | } |
68 | else { |
69 | /* Cerca un altro avversario */ |
70 | |
71 | while (!(dist = scan(sc_dir += 20, 10))); |
72 | oldd = dist; |
73 | sfas=0; |
74 | } |
75 | } |