crobs/rambo3.r
01 | /* Rambo's strategy: */ |
02 | /* 1. Always move (so that you are difficult to hit) */ |
03 | /* 2. Shoot like crazy */ |
04 | /* 3. Don't bother aiming */ |
05 | /* Twice the velocity of Rambo2 */ |
06 | /* Version 3.1 by Neil Fraser, July 1996 */ |
07 |
08 | int range, angle; /* range & angle to target */ |
09 |
10 | main() |
11 | { |
12 | int x,y,z; /* x is loc_x(), y is loc_y(), z is direction */ |
13 | while (loc_x()<205) /* move away from EAST wall */ |
14 | { |
15 | drive(0,100); |
16 | turret(); |
17 | } |
18 | while (loc_x()>795) /* move away from WEST wall */ |
19 | { |
20 | drive(180,100); |
21 | turret(); |
22 | } |
23 | while (loc_y()<255) /* move away from SOUTH wall */ |
24 | { |
25 | drive(90,100); |
26 | turret(); |
27 | } |
28 | while (loc_y()>745) /* move away from NORTH wall */ |
29 | { |
30 | drive(270,100); |
31 | turret(); |
32 | } |
33 |
34 | drive((z = 60),100); /* start moving */ |
35 |
36 | while (1) /* Main loop */ |
37 | { |
38 | if (200>(x=loc_x()) || x>800) /* bounce away from EAST/WEST walls */ |
39 | { |
40 | drive((z=(540-z)%360),100); |
41 | while (205>(x=loc_x()) || x>795) |
42 | { |
43 | turret(); |
44 | drive(z,100); |
45 | } |
46 | } |
47 | turret(); |
48 |
49 | if (250>(y=loc_y()) || y>750) /* bounce away from NORTH/SOUTH walls */ |
50 | { |
51 | drive(z=(360-z)%360,100); |
52 | while (255>(y=loc_y()) || y>745) |
53 | { |
54 | turret(); |
55 | drive(z,100); |
56 | } |
57 | } |
58 |
59 | if (speed()==0) drive(z,100); /* robot-robot collision recovery */ |
60 | turret(); |
61 | } |
62 | } |
63 |
64 |
65 | turret() |
66 | { |
67 | if (20<(range=scan(angle,10)) && range<700) /* Are you still there? */ |
68 | cannon(angle, range); |
69 | else |
70 | if (20<(range=scan(angle-20,10)) && range<700) /* Scan 140 degrees. */ |
71 | cannon(angle-=20,range); |
72 | else |
73 | if (20<(range=scan(angle+20,10)) && range<700) |
74 | cannon(angle+=20, range); |
75 | else |
76 | if (20<(range=scan(angle-40,10)) && range<700) |
77 | cannon(angle-=40,range); |
78 | else |
79 | if (20<(range=scan(angle+40,10)) && range<700) |
80 | cannon(angle+=40,range); |
81 | else |
82 | if (20<(range=scan(angle-60,10)) && range<700) |
83 | cannon(angle-=60,range); |
84 | else |
85 | if (20<(range=scan(angle+60,10)) && range<700) |
86 | cannon(angle+=60, range); |
87 | else |
88 | angle+=140; |
89 | /* Rambo's moto: "Aiming is for sissies!" */ |
90 | } |
91 |
|