User:AaronR/Utility Bots

From Robowiki
< User:AaronR
Revision as of 09:36, 1 July 2010 by RednaxelaBot (talk | contribs) (Using <syntaxhighlight>.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Sometimes, you write a bot whose only purpose in life is to test some tiny little detail of another bot's implementation. Some of the sample bots that come with Robocode fit into this category; for example, Walls is well known as a sanity check for movement (tests avoidance of GuessFactor 0.0) and targeting (tests hitting GF 1.0).

Here are some other bots like this.


WallsReverser

WallsReverser is a bot that can be used for finding bugs in lateral velocity calculations in targeting systems. For the first five rounds, it moves like the sample bot Walls; on the sixth round, it switches to moving in the opposite direction. This bot helped to find a bug in Horizon's gun.

import java.awt.Color;
import robocode.*;

public class WallsReverser extends Robot {
	public void run() {
		if (getRoundNum() < 5) {
			// Set colors
			setBodyColor(Color.black);
			setGunColor(Color.black);
			setRadarColor(Color.orange);
			setBulletColor(Color.cyan);
			setScanColor(Color.cyan);
		} else {
			// These are the opposite colors. Clever, huh?
			setBodyColor(Color.white);
			setGunColor(Color.white);
			setRadarColor(Color.blue);
			setBulletColor(Color.magenta);
			setScanColor(Color.magenta);
		}
		
		// turnLeft to face a wall.
		// getHeading() % 90 means the remainder of 
		// getHeading() divided by 90.
		turnLeft(getHeading() % 90);
		
		while (true) {
			// Move up the wall
			ahead(Double.POSITIVE_INFINITY);
			// Turn to the next wall
			if (getRoundNum() < 5) {
				turnRight(90);
			} else {
				turnLeft(90);
			}
		}
	}
}


SelfDisablingBot

Many robots have a special case for dealing with disabled opponents. This is important, because a gun that ignores the fact that the opponent is disabled could assume that it will continue acting normally and miss, or worse yet, record data based on the opponent being a sitting duck. This utility bot tests your bot's reaction to a disabled opponent.

import robocode.*;

public class SelfDisablingBot extends AdvancedRobot {
	@Override
	public void run() {
		setTurnRadarRightRadians(Double.POSITIVE_INFINITY);
	}

	@Override
	public void onScannedRobot(ScannedRobotEvent e) {
		// Generic random movement.
		setAhead((Math.random() - 0.5) * 200);
		setTurnRightRadians((Math.random() - 0.5) * 2);
	}

	@Override
	public void onStatus(StatusEvent e) {
		if (e.getTime() > 100) {
			// Stupid self disabling trick.
			while (true) {
				getX();
			}
		}
	}
}