1993/rapper.r
01 | /* ��� ��� ��� ��� ��� ��� DATI DEL CREATORE: */ |
02 | /* � � � � � � � � � � � � NOME: Federico Feroldi */ |
03 |
04 | int tgt, /* Variabile di puntamento */ |
05 | dir, /* Direzione attuale (1 su) (-1 Gi�) del target */ |
06 | range, /* Distanza del bersaglio */ |
07 | loc; /* Buffer di posizione */ |
08 |
09 | main() |
10 | { |
11 | tgt=270; /* Inizialmente punto a 270� */ |
12 | dir=1; /* dirigo il target verso l'alto */ |
13 | loc=loc_x(); /* Leggo la mia posizione orizz. */ |
14 | if (loc<450) drive (0,100); /* Ed in base ad essa mi dirigo */ |
15 | else if (loc>550) drive (180,100); /* verso la met� del campo */ |
16 | while (loc<450 || loc>550) /* Fino a quando non arrivo alla */ |
17 | { /* met� dello schermo, sparo e */ |
18 | kill(); /* controllo la mia posizione */ |
19 | loc=loc_x(); |
20 | } /* Quando sono arrivato */ |
21 | drive (0,0); /* spengo i motori e, fino a quando */ |
22 | while (speed()>49) kill(); /* non mi sono fermato, sparo */ |
23 |
24 | loc=loc_y(); /* Leggo la mia posizione vert. */ |
25 | if (loc<450) drive (90,100); /* Ed in base ad essa mi dirigo */ |
26 | else if (loc>550) drive (270,100); /* verso la met� del campo */ |
27 | while (loc_y()<450 || loc_y()>550) /* Fino a quando non arrivo alla */ |
28 | { /* met� dello schermo, sparo e */ |
29 | kill(); /* controllo la mia posizione */ |
30 | loc=loc_y(); |
31 | } /* Quando sono arrivato */ |
32 | drive (0,0); /* spengo i motori e, fino a quando */ |
33 | while (speed()>49) kill(); /* non mi sono fermato, sparo */ |
34 |
35 | while (1) /* Inizia il loop infinito */ |
36 | { |
37 | drive (90,100); /* Vado su a canna e, fino a che */ |
38 | while (loc_y()<900) kill(); /* non tocco il soffitto... sparo! */ |
39 | drive (90,0); /* Sono arrivato e spengo i motori */ |
40 | while (speed()>49) kill(); /* Rallento e ... sparo!! */ |
41 | drive (270,100); /* Vado gi� a canna e, fino a che */ |
42 | while (loc_y()>100) kill(); /* non tocco il pavimento... sparo! */ |
43 | drive (270,0); /* Sono arrivato e spengo i motori */ |
44 | while (speed()>49) kill(); /* Rallento e ... sparo!! */ |
45 | } |
46 | } |
47 |
48 | kill() /* Eccola la mia arma!! */ |
49 | { |
50 | /* Primo stadio di fuoco */ |
51 | if (range=scan(tgt,10)) /* Se ho il bersaglio in target */ |
52 | cannon (tgt,range); /* gli sparo subito!! */ |
53 | else /* altrimenti */ |
54 | if (range=scan(tgt+180,10)) /* se ce l'ho dietro il target */ |
55 | cannon (tgt+180,range); /* gli sparo lo stesso!! */ |
56 | else /* e se proprio non lo trovo */ |
57 | { /* ne davanti ne dietro */ |
58 | tgt+=dir*20; /* incremento il target di �20� a */ |
59 | if (tgt==460 || tgt==260) dir=-dir; /* seconda della direzione (dir) */ |
60 | } /* e se va fuori inverto la dir. */ |
61 |
62 | /* Secondo stadio di fuoco */ |
63 | if (range=scan(tgt,10)) /* I quattro stadi di fuoco sono */ |
64 | cannon (tgt,range); /* completamente uguali perci� ne */ |
65 | else /* commento uno solo. */ |
66 | if (range=scan(tgt+180,10)) /* Ho preferito scrivere la routine */ |
67 | cannon (tgt+180,range); /* quattro volte invece di mettere */ |
68 | else /* un for perch� cos� ho potuto */ |
69 | { /* risparmiare quei cicli di clock */ |
70 | tgt+=dir*20; /* che avrei perso durante i quattro */ |
71 | if (tgt==460 || tgt==260) dir=-dir; /* salti. ( e poi fa anche figo ) */ |
72 | } |
73 |
74 | /* Terzo stadio di fuoco */ |
75 | if (range=scan(tgt,10)) cannon (tgt,range); |
76 | else |
77 | if (range=scan(tgt+180,10)) cannon (tgt+180,range); |
78 | else |
79 | { |
80 | tgt+=dir*20; |
81 | if (tgt==460 || tgt==260) dir=-dir; |
82 | } |
83 |
84 | /* Quarto stadio di fuoco */ |
85 | if (range=scan(tgt,10)) cannon (tgt,range); |
86 | else |
87 | if (range=scan(tgt+180,10)) cannon (tgt+180,range); |
88 | else |
89 | { |
90 | tgt+=dir*20; |
91 | if (tgt==460 || tgt==260) dir=-dir; |
92 | } |
93 | } |