crobs/quack.r
01 | int ping; /* flag to change direction... */ |
02 |
03 | main() |
04 | { |
05 | int dir; |
06 | dir=0; |
07 |
08 | ping=10; |
09 | while (1) |
10 | { |
11 | dir=run(dir)-50; |
12 | } |
13 | } |
14 |
15 | run(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... */ |
58 | int oldangle, oldrange; |
59 |
60 | mark(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 | } |