Download it from https://www.robocoderepository.com/BotDetail.jsp?id=2353
The random movement is quite Raiko inspired. With an idiots way of doing what the MusashiTrick does for smarter bots. The gun is semi-linear. Sometimes I use blocking calls making it do some more unpredictable things. =)
package pez.nano; import robocode.*; import robocode.util.Utils; // This code is released under the RoboWiki Public Code Licence (RWPCL), datailed on: // https://robowiki.net/?RWPCL // // Icarus, by PEZ. - Something small // https://robowiki.net/?Icarus // $Id: Icarus.java,v 1.4 2004/08/25 16:51:40 peter Exp $ public class Icarus extends AdvancedRobot { static int direction = 7; static double bulletVelocity = -3; static double distance; static int hits; public void run() { turnRadarRightRadians(Double.POSITIVE_INFINITY); } public void onScannedRobot(ScannedRobotEvent e) { distance = e.getDistance(); double v = 0.6 * bulletVelocity / distance; if (hits > 3 && Math.random() > Math.pow(v, v)) { direction = -direction; } setAhead(direction * 15); setTurnRight(normalizeDegrees(e.getBearing() + 90 - direction)); double enemyAbsoluteBearing = getHeadingRadians() + e.getBearingRadians(); setTurnGunRightRadians(Utils.normalRelativeAngle(enemyAbsoluteBearing - getGunHeadingRadians() + e.getVelocity() * Math.sin(e.getHeadingRadians() - enemyAbsoluteBearing) / 13.0)); setFire(distance < 140 ? 3.0 : 1.9); setTurnRadarLeftRadians(getRadarTurnRemaining()); } public void onHitWall(HitWallEvent e) { if (hits < 4) { turnRight(normalizeDegrees(e.getBearing() - 100)); ahead(100); } else { direction = -direction; } } public void onHitByBullet(HitByBulletEvent e) { bulletVelocity = e.getVelocity(); hits++; } double normalizeDegrees(double angle) { return Math.toDegrees(Utils.normalRelativeAngle(Math.toRadians(angle))); } }