1993/isaac.r

01/*  == Isaac ==  di  Federico Macchi   17/07/1993
02 
03    Questo robot si muove velocemente sulla diagonale che va dall'angolo
04    in basso a sinistra a quello in alto a destra, in modo da non essere
05    mai molto lontano dagli altri robot. Spara in continuazione correggendo
06    il tiro di un 10% sulla distanza, a seconda che il robot nemico si stia
07    allontanando o avvicinando
08*/
09 
10int ang, newrange, oldrange;
11 
12main()
13{
14        ang=0;
15        drive(180,100);                         /* Si porta verso l'angolo
16                                                   in basso a sinistra */
17        while(loc_x()>69 && speed()) spara();
18        drive(270,0);
19        while(speed()>49) spara();
20        drive(270,100);
21        while(loc_y()>69 && speed()) spara();
22        drive(180,0);
23 
24        while(1) {                           /* Routine di movimento principale
25                                                lungo la diagonale */
26                drive(45,0);
27                while(speed()>49) spara();
28 
29                drive(45,100);
30                while(loc_x()<931) spara();
31 
32                drive(225,0);
33                while(speed()>49) spara();
34 
35                drive(225,100);
36                while(loc_x()>69) spara();
37        }
38}
39 
40spara()
41{
42        if(newrange=scan(ang,10)) {            /* Routine unica di sparo */
43                if(newrange>oldrange) {
44                        cannon(ang,newrange*11/10);
45                        oldrange=newrange;
46                        }
47                else {
48                        cannon(ang,newrange*9/10);
49                        oldrange=newrange;
50                }
51        }
52        else
53                ang=(ang+20)%360;
54}