2013/wall-e_iv.r

001/*
002..................................................................,$77777$:.....
003.................................................................7777777777$....
004.,MM...MMM..MMM....MMMMMMMMMM....MMM......... MMM...............7,.........~7...
005.,MM...MMM..MMM....MMD.....MMM ..MMM..........MMM..............$7...7777777$7$..
006.,MM...MMM..MMM.   MMN?????MMM...MMM..........MMM.........MMM..77. ........777..
007.,MM...MMM..MMM. ..MMMMMMMMMMM  .MMM..........MMM..........8...77...7777777$77..
008.,MMMMMMMMMMMMM....MMD..   MMM   MMMMMMMMMMM .MMMMMMMMMM$......:7..  ......~7~..
009...................................   ...  ...  ...........  ...777777777777~...
010.................                      ...........................$7777777$.....
011..............                           ................. ...    ..............
012........                                        ................................
013.......                                                                    .....
014......                                   ..        .....                   .....
015......                                ........:=,:~+......                     
016     ..                          ......=+++I?O$8D8DZ$ON~.....                  
017     ...                        ....77?I77888OO?NNNI8NDMZN7....                
018     ..                        ..IIIZIDZZI8ODNMMN8N8ONMMM7OM....               
019                             ...DDD8O887=ZMMDNNNMONMMDDNM=?N....               
020                            ....8DND8DD$?+DNMNDOONN8NNN87=?N....               
021                              ...$MDDDD7==+7DOZDNNNNO7I+==+N....               
022                               ...:?DDDD7IZ+I8Z..+DDDDZI7ID...                 
023                               .......I8DO8Z8O......... ... .                  
024                               ...........?8D8............                     
025                             ............ZDOOO~...........            ..       
026                      ..... .............DDMOD............          ....       
027     ..            ..... ..+=~,..... ...7ZZD~..............       .......      
028     ....         ..~~:~~,?7MND+?Z$O8ZDIZZZZ~==IO,...........   .........      
029     ....        .:::::~~=I$OON$~::~=7DD8OZOOO88OOOO77$$Z$77I7...........      
030     ....      .~::~:::~~?=~=~:::~::::I7Z$ODZ7+I+7+??+++=$=:: ..........       
031     ....     .$O7??~~+=,?::~::::::,:?I$:I+DZ=~I+Z=$O8??$7O8~............      
032     ....     Z7777777$Z?+=::~:=,,,,,77,~+DDZ=788OD8DZ88O7I8=+8I?=.......      
033     ....    .ZZ$$O$7777II$7I$Z,,..,,::::$8O=IN8DDDNN88D8887?8?+8OI?++:..      
034     ....   .OZZ$Z$$$$777II77I::,,,,:,,:,?88=Z~?$I8OZ?II$7O+8Z+87ODD8??..      
035     ....  .,$ZZ$ZZ$$$$$7I$$7I,,,,,,,..,,~8O??7$?+$77O$8ZOONZ..=OO8DD8+..      
036     .......$ZZZZZ$$Z$$$$$$$$~,:,,:,,,,,,:ZZI?I+I+7$8ZO$I7DNI....NDONN8O.      
037     ......7OZZOZOO$$$$$$$$$$~,,:,,.,,,,:$Z87++II7$77IZI778N?....DDD~8O:.      
038     ......NZOOZZZZZZZZZ$$$7~,:,:,::,,,,,O878N$7?++???7???ON$...I888IOI .      
039     ......OOOOODZZZZZZ$Z$$?I~,,,,,,::,,ZZD7$7===+++++I+==ZD7.......:O...      
040     ...  ..D88OOOOO88ZZZ$II?I+=:==,:::ZID$7II=7788O$D8$OZO8$............      
041     ....  ....:DD8OOZOZZ8II?IIZI?=~~~+8DOO7=I+7O8MO778DDD$OZO...........      
042     ....   ..   .=ND88OO77$IIII?III??88NDZI~I+ZO8DODZO7DND8DO$..........      
043     ....        8DN8DD8DD88$$Z$IIII?OO88DD$D8DD8ONOMD88ZOOONN$O+........      
044               .DDDDON8DOOONN88O$$$7MDZINNOO8D88N8O8DONN88ZDMDMND8.......      
045               .DD8DDDD8ON8DD8MDM8DDNNNNN88DNN88N88ZOZDDNON8N$?7NNO......      
046              ..D8ND8D8ODNDDD8NDND8DNNNN8NMMNNO$NNNOD8OONMMMNOZ88DDO.          
047              ..MDDODDDMMDNMNDNNNDMNMNNN.,,,NN88O888D8$D..O8D8OZ7ONN+          
048                .DD8NNNNMNNNNNNMMNMNMND$II?Z8O8ND8NMDD?8OD8DNNDM?ONND.         
049               ~==?NNNDNNNNNNNMNNND8OOZ$$77O$Z8N888D88$ZND8DNDZ$O$88N~.        
050              ..=+?I77$ODDNND88OOOOOZZZZ$$$8DNDDODZD87$$ODZDMN87ZNDDD:         
051             ,===+??III77$$$$$ZZZZZZ$$$$$$D88O888DD8O$Z88OOZ8MD8NN8DN..        
052             .~==+??III777777$$$$$$$$$$$$$$DNNDDN8OZZ888DOOON8MMDDDN.          
053     ....     . ,~+??IIIIII777777777777777IDNDNDDDDDDDDN8O888MDND8N~.....      
054     ....  .....,,,,~????IIIIIIIIII=,,,,.~IINDDDNNDONN8DOMN888DNI,,,,....      
055     .... ........,,,,,:+???+~,,,,,,,,,,+??IIOMNNDDNON8N888N=:,,,,,,,....      
056     .... .....  ,,,,,,,,,,,,,,,,,,,,,,,,~???III7$8NNDNDNI,,,,,.,.,,,..        
057     .... .......,,,,,,,,,,.,,..,,,,,,,,,,,,,:=????III,,..,,,,,,.,,,,.         
058          .,,,,,,,,,,,,,,..,.........,,.,,,,,,,,,,,,,,,,,,,,,,,,.,,,,..        
059          .,,,,,,,,,,,,,,.............,,,,,,,,,,,,,,,,,,,,,,,..,,,,,..         
060          .,,,,,,,,,,,,,,,.,..........,,,,....,,,,,,,,.,,,.,,,..,,,.           
061         . ,,,,,,,,,,,,,,,,,,..........,,,,.....,,,,,,,,,,,,,,,,,,. .~ ++=.~=. 
062           .,,,,,,,,,,,,,,,,............,,,.....,,,,,,,,,,,,,,... .  ...  ..   
063            ,,,,,,,,,,,,,,,,............,,,,,,..,,,,,,,,,,,,,....              
064 
065Crobot      : Wall-E
066Type            : Micro
067Version     : 4.01
068Author      : Maurizio Camangi
069Begin           : 14-02-2012
070Revision    : 06-03-2012
071 
072Wall-E IV eredita quasi tutto da Wall-E III, con un innesto di Lycan.
073Wall-E IV perde l'uso delle variabili bidimensionali (vettori): coreografiche e
074superflue.
075*/
076int ang,        /* Angolo di scanning                                   */
077    oang,       /* Angolo di scanning precedente                        */
078    range,      /* Gittata                                              */
079    dir,        /* Direzione del cammino                                */
080    posx,
081    posy,       /* Variabili temporanee ad un bit salva posizione       */
082    flag,b,     /* Flag di stato                                        */
083    m,          /* Flag correggi ampiezza sparo                         */
084    timer,      /* Timer e numero nemici                                */
085    deg,        /* Inizio scansione conta nemici                        */
086    i,a;        /* Variabile temporanea                                 */
087 
088fire(dir,v)
089{
090  drive(dir,v);
091    if (range=scan(oang=ang,10))
092    {
093        if (scan(ang-8,5)) 
094        {  
095            if (scan(ang-=5,2)) ;
096            else ang-=4;
097        }
098        else
099        {
100            if (scan(ang+8,5)) 
101            {
102                if (scan(ang+=5,2)) ;
103                else ang+=4;
104            }
105      else
106      {
107                if (scan(ang,1)) ;
108                else if (scan(ang-=3,2)) ; else ang+=6;
109            }
110        }
111        return(cannon(ang+m*(ang-oang),(scan(ang,10)<<1)-range));
112    }
113    else
114    {
115        if(range=scan(ang+=20,10)) cannon(ang,range);
116        else if(range=scan(ang-=40,10)) cannon(ang,range);
117        else ang+=80;
118    }
119}
120 
121runX()
122{
123  dir=180*!posx;
124  if(posx) while(loc_x()<880) fire(dir,100);
125  else     while(loc_x()>120) fire(dir,100);
126  fire(dir,0);
127}
128 
129runY()
130{
131  dir=270-180*posy;
132  if(posy) while(loc_y()<880) fire(dir,100);
133  else     while(loc_y()>120) fire(dir,100);
134  fire(dir,0); 
135}
136 
137corner()
138{
139  if (flag^posx^posy) runY(runX()); else runX(runY());
140}
141 
142int look()
143{
144  if (scan(a=deg+90*flag,10)) ang=a;
145  return 6;
146}
147 
148main() /* Inizializza alcune variabili ed innesca la routine principale */
149{
150 corner(posy=loc_y(posx=loc_x()>499)>499);
151 deg=90*((posy<<1)+(posx^posy));
152 while (1)
153 {
154        while((timer<2) && (i < 140)) { timer+=(scan(deg+i,10)>0); i+=20; }
155        if (timer<2)
156        {
157         m=1;
158           while(1)
159         {
160                    if (((posx=loc_x())%880)<120) dir=180*(posx>500);
161                else if (((posy=loc_y())%880)<120) dir=90+180*(posy>500);
162                    else if (range>610) dir=ang+15;
163                    else if (range<180) dir=ang+180;
164                    else dir=ang+180*(b^=1);
165                             
166                    fire(dir,100);
167                    fire(dir,100);
168                    fire(dir,100);
169         }
170        }
171        else
172          timer=look(dir=(deg+(30<<flag)));
173            while(--timer) fire(dir,100);
174            corner(i=0); flag^=1;
175 }
176}