package strider; import robocode.*; import robocode.util.Utils; /** * This code is released under the RoboWiki Public Code Licence (RWPCL), * datailed on: http://robowiki.net/?RWPCL * * Festis is a NanoBot with random targeting and random movement * with wallsmoothing. * http://robowiki.net/?Festis * * @author Strider * @version 1.2.1 */ public class Festis extends AdvancedRobot { private static final double PI_2 = 1.5707963268; // PI/2 private static final double POWER = 3.0; // fire power private static final double BSPEED = 20-3*POWER; private static final double ARENAW_2 = 400; // Arena width / 2 private static final double ARENAH_2 = 300; // Arena height / 2 private static final int BOUND_X = 380; // ARENAW_2-(botwidth+fudge)/2 private static final int BOUND_Y = 280; // ARENAW_2-(botheight+fudge)/2 private static double drive = 100; // affects wall smoothing private static double bullet_speed = 0; public void run() { //setColors(java.awt.Color.yellow, null, null); turnRadarRightRadians(Double.POSITIVE_INFINITY); } public void onScannedRobot(ScannedRobotEvent e) { if (Math.random() < bullet_speed / e.getDistance()) { drive = -drive; } double h, d = (h = getHeadingRadians()) + e.getBearingRadians(); int x = (int)Math.abs(getX() + drive*Math.sin(h) - ARENAW_2) - BOUND_X; int y = (int)Math.abs(getY() + drive*Math.cos(h) - ARENAH_2) - BOUND_Y; setTurnGunRightRadians(Utils.normalRelativeAngle( d + Math.pow(Math.random(),0.5) * Math.asin(e.getVelocity()/BSPEED*Math.sin(e.getHeadingRadians()-d)) - getGunHeadingRadians())); setFire(POWER); setTurnRadarLeftRadians(getRadarTurnRemainingRadians()); setTurnRightRadians((x&y) > 0 ? Math.tan((y>x ? PI_2 : 0) - h) : e.getBearingRadians() + PI_2); setAhead(drive); } public void onHitWall(HitWallEvent e) { drive = -drive; } public void onHitByBullet(HitByBulletEvent e) { bullet_speed = e.getVelocity(); } }
bullet_speed = e.getBullet().getVelocity();Don't need the extra call, get it directly from the event:
bullet_speed = e.getVelocity();the
setAhead
in the onHitWall
handler is not needed either, if you hit a wall it will be set to 0.
--Pulsar
Thanks! It's in cvs now, it will be included in the next release. It saves 8 bytes, one more and Festis can have its colors back.
Increase the wall fudge factor until you don't hit walls, then remove the onHitWall?() handler. :-) --David Alves
I'll try that some day. Although I think the smoothing is too bad to avoid the walls in all cases, the corners are a big problem. -- Strider