/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Mathew A. Nelson * - Initial implementation * Flemming N. Larsen * - Maintainance *******************************************************************************/ package sample; import robocode.Robot; import robocode.ScannedRobotEvent; import robocode.WinEvent; import static robocode.util.Utils.normalRelativeAngleDegrees; import java.awt.*; /** * TrackFire - a sample robot by Mathew Nelson, and maintained by Flemming N. Larsen * <p/> * Sits still. Tracks and fires at the nearest robot it sees */ public class TrackFire extends Robot { /** * TrackFire's run method */ public void run() { // Set colors setBodyColor(Color.pink); setGunColor(Color.pink); setRadarColor(Color.pink); setScanColor(Color.pink); setBulletColor(Color.pink); // Loop forever while (true) { turnGunRight(10); // Scans automatically } } /** * onScannedRobot: We have a target. Go get it. */ public void onScannedRobot(ScannedRobotEvent e) { // Calculate exact location of the robot double absoluteBearing = getHeading() + e.getBearing(); double bearingFromGun = normalRelativeAngleDegrees(absoluteBearing - getGunHeading()); // If it's close enough, fire! if (Math.abs(bearingFromGun) <= 3) { turnGunRight(bearingFromGun); // We check gun heat here, because calling fire() // uses a turn, which could cause us to lose track // of the other robot. if (getGunHeat() == 0) { fire(Math.min(3 - Math.abs(bearingFromGun), getEnergy() - .1)); } } // otherwise just set the gun to turn. // Note: This will have no effect until we call scan() else { turnGunRight(bearingFromGun); } // Generates another scan event if we see a robot. // We only need to call this if the gun (and therefore radar) // are not turning. Otherwise, scan is called automatically. if (bearingFromGun == 0) { scan(); } } public void onWin(WinEvent e) { // Victory dance turnRight(36000); } }