SideTracker Robot!
Here is the source code for CRobots and C++Robots versions of my SideTracker robot. This was a fun little diversion ages ago. This little robot did rather well back then. Very simple technique.
/* ****************************************************************** */ /* */ /* Name : SIDETRAC */ /* Strategy : Kick butt on all other robots by moving fast, */ /* firing accurately. */ /* Creator : Hans D. Kellner - 1987 Phoenix, AZ */ /* */ int drive_angle; /* Angle to travel */ int scan_angle; /* Angle to scan other robots */ main() { drive_angle = 0; scan_angle = 0; while(1) { /* Loop until I win! */ move_robot(); /* Go get some robots */ scan_field(); /* Look for any and blast em! */ } } move_robot() { if ( speed() < 50 ) { /* If speed is below 50 we can turn. */ /* Therefore, change angle by 90 dgrs */ drive_angle = ( drive_angle + 90 ) % 360; drive ( drive_angle,99 ); /* then start motors back up to full! */ } /* Watch out for walls */ if ( drive_angle == 0 && loc_x() > 700 ) /* Watch for right edge */ drive ( drive_angle,40 ); /* Slow down for turn */ else if ( drive_angle == 180 && loc_x() < 300 ) /* At left edge? */ drive ( drive_angle,40 ); /* All motors slow! */ else if ( drive_angle == 90 && loc_y() > 700 ) /* At top wall? */ drive ( drive_angle,40 ); /* Hit the brakes! */ else if ( drive_angle == 270 && loc_y() < 300 ) /* At the bottom edge? */ drive ( drive_angle,40 ); /* Whoaoaoaoa! */ } scan_field() { int range; /* Distance to other robot */ int range2; range = scan ( scan_angle,10 ); /* Look for a meal! */ if ( range < 700 && range > 0 ) { /* Is it in range? */ range2 = scan( scan_angle - 5,10 ); /* Scan in closer... */ if ( range2 < 700 && range2 > 0 ) { /* In range on right? */ cannon( scan_angle - 5, 2*(range2 - range) + range); /* Then shoot */ scan_angle = (scan_angle - 10) % 360; /* Track the meal! */ } else { cannon ( scan_angle + 5, 2*(range2 - range) + range); scan_angle = (scan_angle + 10) % 360; /* Track the meal! */ } } else /* No meals in sight so rotate angle 20 */ scan_angle = ( scan_angle + 20 ) % 360; } /* Thats all folks! Short, sweet, DEADLY! */
// // Name : SIDETRACKER2 // // Strategy : Kick butt on all other robots by moving fast, // firing accurately. // // Creator : Hans Kellner - hansk@netcom.com // // Version : 1.0 - initial 1987 // : 2.1 - modified for C++Robots - October 1994 // #include "robots.h" main() { int driveAngle; int quickAngle; int quickScan; int quickRange; int attackRange; int attackAngle; int startTurn; driveAngle = 0; drive( driveAngle, 100 ); quickScan = 1; quickAngle = 0; while ( 1 ) { startTurn = 0; if ( driveAngle == 0 ) { if ( loc_x() > 8000 ) startTurn = 1; } else if ( driveAngle == 90 ) { if ( loc_y() > 8000 ) startTurn = 1; } else if ( driveAngle == 180 ) { if ( loc_x() < 2000 ) startTurn = 1; } else if ( driveAngle == 270 ) { if ( loc_y() < 2000 ) startTurn = 1; } if ( startTurn ) { drive( driveAngle, 50 ); driveAngle = ( driveAngle + 90 ) % 360; while ( speed() > 50 ) drive( driveAngle, 50 ); drive( driveAngle, 100 ); } if ( quickScan ) { quickRange = scan( quickAngle, 10 ); if ( quickRange > 0 && quickRange <= 7000 ) { if ( quickRange > 200 ) cannon( quickAngle, quickRange ); quickScan = 0; attackAngle = quickAngle; } else { quickAngle = ( quickAngle + 20 ) % 360; } } else { if ( attackRange = scan( attackAngle, 5 ) ) { if ( attackRange > 30 ) { cannon( attackAngle, attackRange ); } } else if ( attackRange = scan( attackAngle + 10, 5 ) ) { attackAngle += 10; if ( attackRange > 30 ) { cannon( attackAngle + 4, attackRange ); } } else if ( attackRange = scan( attackAngle - 10, 5 ) ) { attackAngle -= 10; if ( attackRange > 30 ) { cannon( attackAngle - 4, attackRange ); } } else { quickScan = 1; } } } }