2001/kyashan.r
01 | /* |
02 | Nome: Kyashan.r |
03 | Autore: Franco Cartieri |
04 |
05 | Kyashan e' un microcrobots molto semplice: all'inizio dell'incontro si posiziona |
06 | nell'angolo in basso piu' vicino e si muove lungo i lati di un triangolo. |
07 | Ogni 10 cicli controlla se sia rimasto solo un robot: in questo caso passa alla |
08 | routine di attacco finale; mentre ogni 100 cicli controlla se ci sono dei robot |
09 | raggiungibili con il cannone, in caso contrario passa alla routine di attacco finale. |
10 | La routine di attacco finale e' un ciclo in cui il robot si muove in senso antiorario |
11 | lungo il quadrato che si ottiene, unendo i punti centrali dei lati del campo di gioco. |
12 | La routine di sparo e' veloce ma molto imprecisa. |
13 | */ |
14 |
15 | int r,t,last,ang,dis,contacicli,angpos; |
16 |
17 | /* routine di sparo */ |
18 | fuoco(dir) |
19 | int dir; |
20 | { |
21 | drive(dir,100); |
22 | if ((r=scan(ang,10))&&(r<770)) cannon(ang,2*scan(ang,10)-r); |
23 | else if ((r=scan(ang+=339,10))&&(r<770)) cannon(ang,2*scan(ang,10)-r); |
24 | else if ((r=scan(ang+=42,10))&&(r<770)) cannon(ang,2*scan(ang,10)-r); |
25 | else ang+=41; |
26 | } |
27 |
28 | main() |
29 | { |
30 | contacicli=ang=last=10; |
31 | /* si sposta nell'angolo in basso pi� vicino */ |
32 | if (loc_x()>500) |
33 | { |
34 | angpos=0; |
35 | while (loc_x()<900) fuoco(0); |
36 | while (loc_y()>100) fuoco(270); |
37 | } |
38 | else |
39 | { |
40 | angpos=1; |
41 | while (loc_x()>100) fuoco(180); |
42 | while (loc_y()>100) fuoco(270); |
43 | } |
44 | while (last>1) |
45 | { |
46 | t=10; |
47 | while (--t) |
48 | { |
49 | /* si muove lungo un triangolo */ |
50 | if (angpos==0) |
51 | { |
52 | dis=750+damage(); |
53 | while (loc_x()>dis) fuoco(180); |
54 | while (loc_x()<925) fuoco(45); |
55 | while (loc_y()>100) fuoco(270); |
56 | } |
57 | else |
58 | { |
59 | dis=250-damage(); |
60 | while (loc_x()<dis) fuoco(0); |
61 | while (loc_x()>75) fuoco(135); |
62 | while (loc_y()>100) fuoco(270); |
63 | } |
64 | } |
65 | /* ogni 10 cicli controlla se ci sono supestiti */ |
66 | drive(last=0,0); |
67 | ang=10; |
68 | while ((ang+=20)<370) last+=(scan(ang,10)>0); |
69 | contacicli=contacicli-1; |
70 | if (contacicli==0) |
71 | { |
72 | /* ogni 100 cicli controlla se ci sono dei robot raggiungibili */ |
73 | ang=contacicli=10; |
74 | last=1; |
75 | while ((ang+=20)<370) last+=((scan(ang,10)>0)&&(scan(ang,10)<700)); |
76 | } |
77 | } |
78 | if (angpos==0) while (loc_x()>500) fuoco(180); |
79 | else while (loc_x()<500) fuoco(0); |
80 | /* attacco finale */ |
81 | while (1) |
82 | { |
83 | while (loc_x()<900) fuoco(45); |
84 | while (loc_y()<900) fuoco(135); |
85 | while (loc_x()>100) fuoco(225); |
86 | while (loc_y()>100) fuoco(315); |
87 | } |
88 | } |