2001/klr2.r

001/* KLR2 versione (no comment)                                 */
002/* Questo microrobottino � praticamente identico ad sdc2.r    */
003/* con la sola differenza che oscilla in alto e non tenta di  */
004/* tracciare in continuazione l'avversario.                   */
005/* Se doveste escludere uno dei due robot                     */
006/* vorrei partecipare con sdc2.r                              */
007/* Tanti saluti a tutti!                                      */
008/* Ferraro Salvatore                                          */
009 
010/* Non sto a ricommentare il codice!                          */
011 
012 
013int angx,angy,course,ang,oang,range,orange,spd;
014main()
015{
016   ang=180;
017   angy=980;
018   while(1){
019       angx=30;
020       Vai();
021       angx=970;
022       Vai();
023   }
024}
025    
026Direzione (xx,yy)
027int xx,yy;
028{
029  int d;
030  int x,y;
031  int curx, cury;
032  curx=loc_x(); 
033  cury=loc_y();
034  x=curx-xx;
035  y=cury-yy;
036  if (!x)      
037    d=90+(180*(yy<cury));    
038  else {
039    if (yy<cury)
040      d=atan((100000*y)/x)+180+180*(xx>curx);
041    else
042      d=atan((100000*y)/x)+180*(xx<curx);
043  }
044  return (d);
045}
046 
047 
048Distanza (x1,y1,x2,y2)
049int x1,y1,x2,y2;
050{
051  int x,y,d;
052  x = x1-x2;
053  y = y1-y2;
054  d = sqrt((x*x)+(y*y));
055  return(d);
056}
057 
058 
059Vai ()
060{
061  course=Direzione(angx,angy);
062  while(Distanza(loc_x(),loc_y(),angx,angy)>270){
063        drive(course,100);
064        ang%=180;
065        ang+=180; 
066        Fuoco();
067  }
068}
069 
070Combatti()
071{
072  int r1,r2,r;
073  if(((r1=scan(ang,5))>50)&&((r2=scan(ang+6,5))>50))
074  {
075    if(((r=scan(ang+3,2))>50))
076    {
077      if(r<350)                           cannon(ang+3,r+(r-r2));
078      else
079      {
080         if(((r=scan(ang+2,1))>50))       cannon(ang+2,r+(r-r2));
081         else
082           if(((r=scan(ang+4,1))>50))     cannon(ang+4,r+(r-r2));
083      }
084    }
085  }
086ang+=20;
087}
088 
089 
090 
091scan_()
092{
093        if(scan(ang+354,1)) ang+=354;
094        if(scan(ang+6,  1)) ang+=6;
095        if(scan(ang+356,1)) ang+=356;
096        if(scan(ang+4,  1)) ang+=4;
097        if(scan(ang+358,1)) ang+=358;
098        if(scan(ang+2,  1)) ang+=2;
099}
100 
101 
102 
103Fuoco()
104{
105  if (orange=scan(ang,10)) {
106    if (orange>850) return;
107    else {
108     scan_();
109     if (orange=scan(oang=ang,5))
110     {
111        scan_();
112        if (range=scan(ang,10))
113        {
114          spd=speed()>0;
115          return cannon(ang+(ang-oang)*((1200+range)>>9)-(spd*sin(ang-course)>>14),
116                         range*172/(172+orange-range-(spd*cos(ang-course)>>12)));
117            }
118     }
119      }
120   }
121Combatti();
122}