1993/torneo.r

01/*
02  Sabbioni Luca
03 
04  Il "robot" si muove lungo la diagonale secondaria del campo di battaglia
05  scandagliandolo a 360 gradi. La routine di sparo provvedde a modificare
06  il range del cannone in funzione della differenza delle distanze dai robot
07  nemici rilevate precedentemente.
08*/
09 
10 
11int range,orange,dir;
12 
13 
14main()
15 
16{
17 /* movimento che permette al robot di raggiungere
18    l'angolo in alto a sinistra */
19   
20  dir=5;
21  drive(180,100);
22  while (loc_x()>70) hit();
23  drive(180,0);
24  while (speed()>49) ;      
25  drive(90,100);
26  while (loc_y()<940) hit();
27  drive(90,0);
28 
29 
30  while (1)   /* ciclo principale */
31   {
32     while (speed()>49) ;
33      
34     /* movimento in diagonale dall'alto verso il basso */    
35 
36     drive(315,100);
37     while (loc_y()>80 && speed()>0) hit(1);
38     drive(315,0);
39     while (speed()>49) ;
40 
41     /* movimento in diagonale dal basso verso l'alto */    
42 
43     drive(135,100);
44     while (loc_y()<920 && speed()>0) hit(0);
45     drive(135,0);
46    }
47}
48 
49hit(ddir)    /* procedura di sparo */
50{
51  int ddir;   
52 
53  if ((range=scan(dir,10)))
54   {
55    if (range==orange)  
56       if (ddir)
57       {
58        if (sin(dir)>0 && cos(dir)<0) cannon(dir,7*range/8);
59        else if (sin(dir)<0 && cos(dir)<0) cannon(dir,8*range/7);
60              else cannon(dir,range);
61       
62       else
63       {
64         if (sin(dir)>0 && cos(dir)<0) cannon(dir,8*range/7);
65         else if (sin(dir)<0 && cos(dir)<0) cannon(dir,7*range/8);
66               else cannon(dir,range);
67       }
68 
69    if (range>orange) cannon(dir,10*range/9);
70    if (range<orange) cannon(dir,7*range/8);
71    orange=range;
72   }
73    else dir+=20;
74}
75