1999/lukather.r

001/*----------------------------------------------------------------*/   
002/*----------NOME C-ROBOT:    LUKATHER                     --------*/
003/*----------PROGETTO E REALIZZAZIONE: LORENZO STRAMBI     --------*/
004/*                                                                */
005/*--TATTICA: Lukather si piazza nel pi� vicino angolo libero e ---*/
006/*--         aspetta, sparando, finche i suoi danni non ----------*/
007/*--         raggiungono il 20%. A questo punto si dirige verso---*/
008/*--         l'angolo vicino e vi rimane fino al 50% dei danni ---*/
009/*--         Poi comincia ad oscillare verticalmente e a sparare -*/
010/*                                                                */
011/*----------------------------------------------------------------*/
012/*--COMMENTI:E' il mio primo crobot. Riesce a difendersi bene ma -*/
013/*--         la routine d'attacco lascia un po a desiderare. -----*/
014/*--         La funzione attacca() e' presa in prestito da Goblin */
015/*----------------------------------------------------------------*/
016 
017 
018  int x, y, vel, ctr, deg, dist, ang, loc;
019  main()
020{
021 
022  x = loc_x();
023  y = loc_y();
024  if (x < 500){
025    if (y < 500){
026        giul();}
027    else sul();}
028  else {
029    if (y < 500){
030        giur();}
031    else sur();}
032}
033 
034  giul()
035{
036    loc=1;
037    if (!scan(225,10)){
038        while(loc_y() > 80) {drive(270,100); attacca(); attacca(); attacca();}
039        drive(270,0);
040        while(speed()>49);
041        while(loc_x() > 80) {drive(180,100); attacca(); attacca(); attacca();}
042        drive(180,0);}
043    else sul();
044    while(damage() < 20) attacca();
045    scappa(loc);   
046 
047}
048 
049  sul()
050{
051    loc=4;
052    if (!scan(135,10)){
053        while(loc_y() < 900)  {drive(90,100); attacca(); attacca(); attacca();}
054        drive(90,0);
055        while(speed()>49);
056        while(loc_x() > 80)  {drive(180,100); attacca(); attacca(); attacca();}
057        drive(180,0);}
058    else giur();
059    while(damage() < 20) attacca();
060    scappa(loc);
061}
062 
063  giur()
064{
065    loc=2;
066    if (!scan(315,10)){
067        while(loc_y() > 80) {drive(270,100); attacca(); attacca(); attacca();}
068        drive(270,0);
069        while(speed()>49);
070        while(loc_x() < 900) {drive(0,100); attacca(); attacca(); attacca();}
071        drive(0,0);}
072    else sur();
073    while(damage() < 20) attacca();
074    scappa(loc);
075}
076 
077  sur()
078{
079    loc=3;
080    if (!scan(45,10)){
081        while(loc_y() < 900) {drive(90,100); attacca(); attacca(); attacca();}
082        drive(90,0);
083        while(speed()>49);
084        while(loc_x() < 900) {drive(0,100); attacca(); attacca(); attacca();}
085        drive(0,0);}
086    else giul();
087    while(damage() < 20) attacca();
088    scappa(loc);
089}
090 
091 
092 
093  scappa(loc)
094 
095{
096  if (loc==1  || loc==2){
097    while(loc_y() < 900) {drive(90,100); attacca();}
098    drive(90,0);
099    while(damage() < 50) attacca();
100    while(1)
101    {
102    while(loc_y() > 130) {drive(270,100); attacca();}drive(270,0);
103    while(loc_y() < 900) {drive( 90,100); attacca();}drive( 90,0); 
104    }
105    }
106  else {
107    while(loc_y() > 130) {drive(270,100); attacca();}
108    drive(270,0);
109    while(damage() < 50) attacca();
110    while(1)
111    {
112    while(loc_y() < 900) {drive( 90,100); attacca();}drive( 90,0);
113    while(loc_y() > 130) {drive(270,100); attacca();}drive(270,0);
114    }
115  }
116}
117 
118  attacca()
119 
120{
121    int     rng,orng;
122 
123    if ((rng=scan(deg, 10))) {
124        if (scan(deg-7,4)) {
125            if (scan(deg-=7-2,2)) {
126                if(scan(deg-=2-1,1)) deg-=1;
127            }
128            else if (scan(deg+2,2)) deg+=2;
129        }
130        else if(scan(deg+7,4)) {
131            if (scan(deg+=7+2,2)) deg+=2;
132        }
133        else if(scan(deg+2,2)) deg+=2;
134    }
135    else if ((rng=scan(deg-=20,10)))  { 
136        if (scan(deg-7,4)) {
137            if (scan(deg-=7-2,2)) deg-=2;
138        }
139        else if(scan(deg+7,4)) deg+=7;
140    }
141    else if ((rng=scan(deg+=40,10)))  {  
142        if (scan(deg-7,4)) deg-=7;
143    }
144    else if (!(rng=scan(deg+=20,10))) {
145        if (!(rng=scan(deg+=20,10))) {
146            deg+=20;
147            if (!(scan(deg,10))) deg+=40;
148        }
149        else {
150            cannon(deg,7*rng/8);
151            if (rng>710) deg+=60;
152        }
153        deg%=360;
154        return;
155    }
156    if (orng=scan(deg,10)){    
157     
158          cannon (deg, orng*183/(183+rng-orng) );
159        if(orng>710) deg+=60;
160    }
161}