1993/vannina.r

01/*
02                   VANNINA
03 
04      Questo robot si muove in  una direzione casuale  fino a raggiun-
05    gere uno dei lati dell' arena, muovendosi ad una velocita' limita-
06    ta (40). Se subisce dei danni aumenta la velocita' e, se sono con-
07    sistenti (5%), cambia anche direzione.
08      La funzione di sparo e' stata ricavata da 'cube', ma  migliorata
09    in modo abbastanza sensibile.
10 
11 
12      Realizzato da
13 
14        Andrea Murru (MC4327)
15*/
16 
17int     an, sc_dir, sfas, oldd, dist, scd2, d;
18 
19main()
20{
21    an=rand(360);drive(an,100);
22    d=damage();
23     
24    while (1) {
25           
26          if (loc_x()>800) an=rand(180)+90;
27          if (loc_x()<200) {an=rand(180)-90; if (an<0) an=360-90;}
28          if (loc_y()>800) an=rand(180)+180;
29          if (loc_y()<200) an=rand(180);
30           
31          /* Se si e' avvicinata ad un lato cambia direzione */
32           
33          if (damage()-d > 4) an=rand(360);
34           
35          /* Se ha subito danni consistenti cambia direzione */
36           
37          drive(an,40+60*(damage()-d));
38          d=damage();
39          spara();
40          }
41}
42 
43spara ()
44{
45    if (!(dist = scan (sc_dir, 5))) {
46        if (dist = scan(sc_dir -= 10, 5)) sfas = -6;
47           else if (dist = scan(sc_dir -= 15, 10)) sfas = -10;
48               else if (dist = scan(sc_dir += 35, 5)) sfas = 6;
49                   else if (dist = scan(sc_dir += 15, 10)) sfas = 10;
50                       else {
51                        sc_dir-=100;
52          
53         /* Incomincia a cercare a 60� in meno della precedente posizione angolare del nemico */
54                         
55                        while (!(dist = scan(sc_dir += 20, 10))) ;
56                        sfas = 0;
57                        oldd = dist;
58                        }
59                     }
60    if (dist<1000) {         
61              cannon(sc_dir + sfas, 2 * dist - oldd);
62     
63    /* Cerca di anticipare lo spostamento dell' avversrio, ipotizzando
64       che si sposti di quanto si e' spostato tra gli ultimi due rilevamenti */
65               
66              oldd = dist;
67              }
68    else {
69    /* Cerca un altro avversario */
70          
71         while (!(dist = scan(sc_dir += 20, 10)));
72         oldd = dist;
73         sfas=0;
74         }
75}