/*******************************************************************************
* 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:
* Pavel Savara
* - Initial implementation
*******************************************************************************/
package tested.robots;
import robocode.*;
import static robocode.util.Utils.normalRelativeAngle;
/**
* @author Pavel Savara (original)
*/
public class WatchBullets extends AdvancedRobot {
public void run() {
while (true) {
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
}
}
Bullet bullet;
public void onStatus(StatusEvent event) {
dump();
}
@Override
public void onScannedRobot(ScannedRobotEvent e) {
// Calculate exact location of the robot
double absoluteBearing = getHeading() + e.getBearing();
double bearingFromGun = normalRelativeAngle(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 && bullet == null) {
final Bullet lbullet = fireBullet(Math.min(3 - Math.abs(bearingFromGun), getEnergy() - .1));
bullet = lbullet;
}
} // 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();
}
}
private void dump() {
if (bullet != null) {
out.println(
getTime() + " " + bullet.getX() + " " + bullet.getY() + " " + bullet.getHeading() + " "
+ bullet.isActive());
}
}
}