1992/mimo6new.r

01/*************************************************************************/
02/**   NOME ROBOT: MIMO6NEW           ** MIMO6NEW si posiziona sul       **/
03/**   DATA      : 01 - 09 - 1992     ** margine superiore del campo di  **/
04/**   AUTORE    : Roberto Infante    ** battaglia, e si muove in senso  **/
05/**                                  ** orizzontale. La funzione di     **/
06/**               (studente)         ** sparo, fuoco(), fa in modo che  **/
07/**                                  ** nel caso in cui venga individua-**/
08/**                                  ** to un nemico la mira viene      **/
09/**                                  ** progressivamente migliorata.    **/
10/*************************************************************************/
11 
12int Range, Old_Range, Ang, Dir, Agg_Ang;
13 
14main()
15{
16    drive(90, 100);   /* posizionamento iniziale */
17    while (loc_y() < 975)
18        fuoco();
19 
20    Dir = -180;
21 
22    while (1) /* ciclo principale */ {
23        Dir = (Dir + 180) % 360; /* cambia la direzione */
24 
25        drive(Dir, 0);
26        while (speed() > 49)
27            fuoco();
28        drive(Dir, 100);
29        while (((loc_x() < 750 && Dir == 0) ||
30            (loc_x() > 250 && Dir == 180)) && speed())
31            fuoco(); /* spara mentre si muove */
32    }
33}
34 
35 
36fuoco()
37{
38    if (Range && Range < 701) {
39        Ang += 5 - (scan(Ang - 5, 5) != 0) * 10; /* migliora la mira*/
40        Ang += 3 - (scan(Ang - 3, 3) != 0) * 6;
41 
42        Old_Range = Range;
43 
44        if ((Range = scan(Ang, 10)) > 40)
45            cannon(Ang, Range + (Range - Old_Range +
46                cos(Ang - Dir) / 2000) * Range / 325); /* spara !! */
47        else
48            cannon(Ang, 55);
49    } else
50     {
51        Agg_Ang -= 23;
52        if (!(Range = scan(Ang = Dir, 10)))  /* cerca nemici right...*/
53            if (!(Range = scan(Ang = Dir + 180, 10))) /*... & left */
54                while (!(Range = scan(Ang = 180 + Agg_Ang, 10))) {
55                    /* cerca nemici in mezzo */
56                    Agg_Ang += 20;
57                    if (Agg_Ang >= 180)
58                        Agg_Ang = 0;
59                }
60 
61        if (Range < 60)
62            Range = 60;
63 
64        cannon(Ang, 7 * Range / 8); /* spara immediatamente !! */
65    }
66}