crobs/quack.r

01int ping;       /* flag to change direction... */
02 
03main()
04{
05    int dir;
06    dir=0;
07 
08    ping=10;
09    while(1)
10    {
11        dir=run(dir)-50;
12    }
13}
14 
15run(init)
16{
17    int dir;
18    int olddir1, olddir2;
19    int r;
20 
21    dir=init;
22    while(dir<360)
23    {
24/*      if((r=scan(dir,10))&&r<=700)*/
25        if(r=scan(dir,10))
26        {
27            dir-=10;
28            olddir1=dir+20;
29            while(dir<olddir1)
30            {
31/*              if((r=scan(dir,5))&&r<=700)*/
32                if(r=scan(dir,5))
33                {
34                    dir-=5;
35                    olddir2=dir+10;
36                    while(dir<olddir2)
37                    {
38/*                      if((r=scan(dir,1))&&r<=700)*/
39                        if(r=scan(dir,1))
40                        {
41                            mark(dir,r);
42                            return(dir);
43                        }
44                        dir++;
45                    }
46                }
47                dir+=5;
48            }
49        }
50        dir+=20;
51    }
52    ping=10;
53    return(0);
54}
55 
56 
57/* Some 'static' variables... */
58int oldangle, oldrange;
59 
60mark(dir, r)
61{
62    int ddir;   /* drive direction */
63    if(ping>9)
64        cannon(dir, r);
65    else
66        cannon((dir-oldangle)*14/10+oldangle, (r-oldrange)*14/10+oldrange);
67 
68    oldangle=dir;
69    oldrange=r;
70 
71    if(ping>5 || !speed())
72    {
73        ping=0;
74        ddir=rand(90);
75        if(loc_x()<500)
76        {
77            if(loc_y()>500)
78                ddir+=270;
79        }
80        else
81        {
82            if(loc_y()<500)
83                ddir+=90;
84            else
85                ddir+=180;
86        }
87        drive(ddir, 49);
88    }
89    ping++;
90}