1992/robocop.r
01 | /* ROBOCOP.R di Gianni LIVOLSI MC6087 */ |
02 |
03 |
04 | int ang; |
05 | main() |
06 | { |
07 | ang = 90; |
08 |
09 | drive(0, 100); /* si sposta sul lato destro */ |
10 | while (loc_x() < 960) |
11 | spara(); /* sparando se trova un bersaglio*/ |
12 | drive(90, 0); |
13 | while (speed() > 49) |
14 | spara(); |
15 |
16 | while (1) { /* continua a muoversi */ |
17 | drive(90, 100); /* lungo il lato destro */ |
18 | while (loc_y() < 920 && speed() > 0) |
19 | spara(); /* sparando ad eventuali */ |
20 | drive(270, 0); /* bersagli */ |
21 |
22 | while (speed() > 49) |
23 | spara(); |
24 |
25 | drive(270, 100); |
26 | while (loc_y() > 80 && speed() > 0) |
27 | spara(); |
28 | drive(90, 0); |
29 |
30 | while (speed() > 49) |
31 | spara(); |
32 | } |
33 |
34 | } |
35 |
36 |
37 | /* esegue scansione del campo alla massima */ |
38 | spara() |
39 | { /* risoluzione se trova un bersaglio chiama */ |
40 | int re; /* la funzione gun per ottimizzare il tiro */ |
41 | re = scan(ang, 10); /* altrimenti incrementa l'angolo */ |
42 | if (re > 0 && re < 700) /* viene eseguita la ricerca dei bersagli */ |
43 | gun(ang); /* solo nei 180 gradi da 90 a 270 visto che */ |
44 | else /* muovendosi lungo il lato destro ha le */ { /* spalle coperte dal bordo del campo */ |
45 | ang += 20; |
46 | if (ang == 290) |
47 | ang = 90; |
48 | } |
49 | } |
50 |
51 |
52 |
53 |
54 | gun(an) /* con un algoritmo simile ad una ricerca */ |
55 | int an; /* dicotomica viene aggiustato l'angolo di */ |
56 | { /* mira */ |
57 | int r; |
58 |
59 | an -= 5; /* torna indietro di 5 gradi */ |
60 | r = scan(an, 5); /* riduce la risoluzione dello scanner */ |
61 | if (!r) |
62 | an += 10; /* se non trova il bersaglio ovviamente */ |
63 | /* e' nell'altra meta della risoluzione */ |
64 | an -= 3; /* dello scanner .... e cosi via fino a */ |
65 | r = scan(an, 3); /* sparare con lo scarto di +- un grado */ |
66 | if (!r) |
67 | an += 6; /* una maggiore precisione influiva in */ |
68 | /* modo negativo in quanto occorre */ |
69 | an -= 2; /* tener in considerazione il tempo che */ |
70 | r = scan(an, 2); /* intercorre tra lo sparo e il suo */ |
71 | if (!r) |
72 | an += 4; /* arrivo sul bersaglio */ |
73 |
74 | an -= 1; |
75 | r = scan(an, 1); |
76 | if (!r) { |
77 | an += 2; |
78 | r = scan(an, 1); |
79 | if (r > 10) |
80 | cannon(an, r); /* evita di spararsi sulle scarpe */ |
81 | } else if (r > 10) |
82 | cannon(an, r); /* evita di spararsi sulle scarpe */ |
83 |
84 | } |