1993/rapper.r

01/* ��� ��� ��� ��� ��� ���   DATI DEL CREATORE:                            */
02/* � � � � � � � � �   � �   � NOME: Federico Feroldi                      */
03 
04int     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 
09main()
10{
11tgt=270;                                /* Inizialmente punto a 270� */
12dir=1;                                  /* dirigo il target verso l'alto */
13loc=loc_x();                            /* Leggo la mia posizione orizz. */
14if (loc<450) drive (0,100);             /* Ed in base ad essa mi dirigo */
15else if (loc>550) drive (180,100);      /* verso la met� del campo */
16while (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 */
21drive (0,0);                            /* spengo i motori e, fino a quando */
22while (speed()>49) kill();              /* non mi sono fermato, sparo */
23 
24loc=loc_y();                            /* Leggo la mia posizione vert. */
25if (loc<450) drive (90,100);            /* Ed in base ad essa mi dirigo */
26else if (loc>550) drive (270,100);      /* verso la met� del campo */
27while (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 */
32drive (0,0);                            /* spengo i motori e, fino a quando */
33while (speed()>49) kill();              /* non mi sono fermato, sparo */
34 
35while (1)                               /* Inizia il loop infinito */
36{
37drive (90,100);                         /* Vado su a canna e, fino a che */
38while (loc_y()<900) kill();             /* non tocco il soffitto... sparo! */
39drive (90,0);                           /* Sono arrivato e spengo i motori */
40while (speed()>49) kill();              /* Rallento e ... sparo!! */
41drive (270,100);                        /* Vado gi� a canna e, fino a che */
42while (loc_y()>100) kill();             /* non tocco il pavimento... sparo! */
43drive (270,0);                          /* Sono arrivato e spengo i motori */
44while (speed()>49) kill();              /* Rallento e ... sparo!! */
45}
46}
47 
48kill()                                  /* Eccola la mia arma!! */
49{                                      
50/* Primo stadio di fuoco */
51if (range=scan(tgt,10))                 /* Se ho il bersaglio in target */
52cannon (tgt,range);                     /* gli sparo subito!! */
53else                                    /* altrimenti */
54if (range=scan(tgt+180,10))             /* se ce l'ho dietro il target */
55cannon (tgt+180,range);                 /* gli sparo lo stesso!! */
56else                                    /* 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 */
63if (range=scan(tgt,10))                 /* I quattro stadi di fuoco sono */
64cannon (tgt,range);                     /* completamente uguali perci� ne */
65else                                    /* commento uno solo. */
66if (range=scan(tgt+180,10))             /* Ho preferito scrivere la routine */
67cannon (tgt+180,range);                 /* quattro volte invece di mettere */
68else                                    /* 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 */
75if (range=scan(tgt,10)) cannon (tgt,range);
76else
77if (range=scan(tgt+180,10)) cannon (tgt+180,range);
78else
79{
80 tgt+=dir*20;
81 if (tgt==460 || tgt==260) dir=-dir;
82}
83 
84/* Quarto stadio di fuoco */
85if (range=scan(tgt,10)) cannon (tgt,range);
86else
87if (range=scan(tgt+180,10)) cannon (tgt+180,range);
88else
89{
90 tgt+=dir*20;
91 if (tgt==460 || tgt==260) dir=-dir;
92}
93}