2007/mammolo.r

001/*
002Nome            : Mammolo - macro
003Versione        : 1.0
004Autore      : Simone Ascheri
005 
006Preludio
007========
008Biancaneve si � smarrita nel bosco.
009trova la casetta dei sette nani e ci si stabilisce.
010Mammolo non � molto contento e torna a casa dalla mamma, a cui era molto affezionato perche' alla tenera et� di 3 anni gi� gli aveva trovato un'occupazione, mandandolo a lavorare in miniera.
011 
012Commento
013========
014 
015Trattasi di Fizban... aggiornato????
016Ho cambiato qualche costante ma non ho nemmeno testato
017*/
018 
019int vel,r_coord,x_pos,y_pos;
020int ang,oang,a,r,or;
021int time,run,d,gradi,conta;
022int si,z,oa,lim,cl;
023 
024main()
025{
026        r_coord=822;
027        while (run+=conta=gradi=3)
028             {
029                if (damage()>80) r_coord=837;
030                x_pos=(loc_y(y_pos=(loc_x()<(vel=500))*(r_coord-=15*(++time>6)))<500)*r_coord;
031                while ((loc_x()%890)>110) CucchiaioKender(ang=(loc_x()<500)*180);
032                vel=0;
033                CucchiaioKender(ang);
034                while ((loc_y(vel=100)%890)>110) CucchiaioKender(ang=90+(loc_y()<500)*180);
035                vel=0;
036                CucchiaioKender(ang);
037                while (((gradi+=21)<390)&&(conta<12))  if (scan(gradi,10)>0) {++conta;CucchiaioKender(a=ang=gradi);}
038                vel=100;
039                while (conta<5)
040                     {
041                        if (((loc_x()%800)<200)||((loc_y()%800)<200))
042                          {
043                            si=45+180*(loc_y()>500)+90*((loc_x()>500)!=(loc_y()>500));
044                          if (((z=(ang-si)%360)*z)>0)
045                              {
046                                C(vel=0);
047                                ang=si;
048                                C(C(vel=100));
049                              }
050                          }
051                        else if (r>700)
052                          {
053                            if (((z=(ang-a)%360)*z)>25)
054                              {
055                                C(vel=0);
056                                ang=a;
057                                C(C(vel=100));
058                              }
059                          }
060                        else if ((speed()>80))
061                             {
062                                C(vel=0);
063                                ang+=180;
064                                C(C(vel=100));
065                             }
066                        C();
067                     }
068                while (--run)
069                     {
070                        while(loc_y() <910-x_pos) CucchiaioKender(90);
071                        while(loc_x() >r_coord-y_pos+90) CucchiaioKender(180);
072                        while(loc_y() >r_coord-x_pos+90) CucchiaioKender(270);
073                        while(loc_x() <910-y_pos) CucchiaioKender(0);
074                     }
075 
076             }
077}
078 
079CucchiaioKender(dir)
080int dir;
081  {
082     drive (dir,vel);
083     if((r=scan(a,10))&&(r<850))
084        {
085           if (r=scan(a,4));
086           else if (r=scan(a-=7,3));
087           else if (r=scan(a+=14,3));
088           else return;
089           cannon (a,r);
090        }
091     else
092       if(scan(a+=21,10));
093       else
094         if(scan(a-=42,10));
095         else
096           if(scan(dir,10)) a=dir;
097           else
098             return (a+=84);
099  
100 
101C()
102  {
103     drive (ang,vel);
104     if(or=scan(oa=a,10))
105        {
106           if (r=scan(a,4)) return cannon(a,3*scan(a,10)-r-or);
107           else if (r=scan(a-=7,3)) return cannon(a-6,3*scan(a,10)-r-or);
108           else if (r=scan(a+=16,4)) return cannon(a+6,3*scan(a,10)-r-or);
109           else return 1;
110        }
111     else
112       if(scan(a+=21,10));
113       else
114         if(scan(a-=42,10));
115         else
116         return (a+=84);
117