/******************************************************************************* * 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 robocode.Event; import robocode.robotinterfaces.IBasicEvents; import robocode.robotinterfaces.IJuniorRobot; import robocode.robotinterfaces.peer.IBasicRobotPeer; import robocode.util.Utils; import java.awt.*; import java.io.PrintStream; import java.util.Hashtable; import java.util.Map; /** * @author Pavel Savara (original) */ public class JuniorEvents implements IJuniorRobot, IBasicEvents, Runnable { IBasicRobotPeer peer; PrintStream out; final Hashtable<String, Integer> counts = new Hashtable<String, Integer>(); Bullet bullet; public void run() { // noinspection InfiniteLoopStatement while (true) { peer.move(100); // Move ahead 100 peer.turnGun(Math.PI * 2); // Spin gun around peer.move(-100); // Move back 100 peer.turnGun(Math.PI * 2); // Spin gun around } } public Runnable getRobotRunnable() { return this; } public IBasicEvents getBasicEventListener() { return this; } public void setPeer(IBasicRobotPeer peer) { this.peer = peer; } public void setOut(PrintStream out) { this.out = out; } public void onStatus(StatusEvent event) { count(event); final Graphics2D g = peer.getGraphics(); g.setColor(Color.orange); g.drawOval((int) (peer.getX() - 55), (int) (peer.getY() - 55), 110, 110); } public void onBulletHit(BulletHitEvent event) { count(event); } public void onBulletHitBullet(BulletHitBulletEvent event) { count(event); } public void onBulletMissed(BulletMissedEvent event) { count(event); } public void onDeath(DeathEvent event) { count(event); } public void onHitByBullet(HitByBulletEvent event) { count(event); } public void onHitRobot(HitRobotEvent event) { count(event); } public void onHitWall(HitWallEvent event) { count(event); } public void onRobotDeath(RobotDeathEvent event) { count(event); } public void onWin(WinEvent event) { count(event); // this is tested output for (Map.Entry<String, Integer> s : counts.entrySet()) { out.println(s.getKey() + " " + s.getValue()); } out.println("last bullet heading " + bullet.getHeadingRadians()); } public void onScannedRobot(ScannedRobotEvent event) { count(event); // Turn gun to point at the scanned robot peer.turnGun(Utils.normalAbsoluteAngle(peer.getBodyHeading() + event.getBearingRadians() - peer.getGunHeading())); // // Fire! double power = 1; Bullet firedBullet = peer.fire(power); if (firedBullet != null) { this.bullet = firedBullet; } } private void count(Event event) { final String name = event.getClass().getName(); Integer curr = counts.get(name); if (curr == null) { curr = 0; } counts.put(name, curr + 1); } }