1992/robocop.r

01/* ROBOCOP.R   di Gianni LIVOLSI   MC6087  */
02 
03 
04int ang;
05main()
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  */
38spara()
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 
54gun(an)                        /* con un algoritmo simile ad una ricerca  */
55int 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}