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 
08int range, angle; /* range & angle to target */
09 
10main()
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 
65turret()
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