Difference between revisions of "Talk:Opposite"
(Codesize) |
(may work, but I would test it) |
||
Line 44: | Line 44: | ||
No problem. And using <code> e.getName().equals(enemyName)</code> would work, but costs three more codesize bytes--[[User:CrazyBassoonist|CrazyBassoonist]] 20:00, 12 September 2009 (UTC) | No problem. And using <code> e.getName().equals(enemyName)</code> would work, but costs three more codesize bytes--[[User:CrazyBassoonist|CrazyBassoonist]] 20:00, 12 September 2009 (UTC) | ||
+ | : I wouldn't trust ''e.getName()==enemyName'' to work always without testing. Maybe it always uses the same object, and you end up with doing the right comparison with ''=='' '''in this particular case'''. Although I think it does work in this case, I'd test it thoroughly just to be sure. --[[User:Zyx|zyx]] 01:23, 13 September 2009 (UTC) |
Revision as of 02:23, 13 September 2009
Any ideas for a targeting scheme with 132 bytes? (including how to select a target) --Starrynte 17:45, 12 September 2009 (UTC)
I'm not sure how much this will help, but this is the enemy selection I tend to use in codesize-restricted melee bots. I used linear targeting in this example:
package oog.nano.aorta; import robocode.*; import robocode.util.*; public class Aorta extends AdvancedRobot { static double enemyDist; static String enemyName; public void run(){ enemyDist=Double.POSITIVE_INFINITY; setTurnRadarRightRadians(Double.POSITIVE_INFINITY); } public void onScannedRobot(ScannedRobotEvent e){ if(e.getDistance()<enemyDist||e.getName()==enemyName){ enemyName=e.getName(); enemyDist=e.getDistance(); //This part greatly increases the accuracy of the targeting, but it isn't necessary. if(getGunHeat()<1){ setTurnRadarLeftRadians(getRadarTurnRemainingRadians()); } /* *You could replace these next two lines with any type of targeting and bullet power you like, *I just used linear targeting as an example. */ setTurnGunRightRadians(Utils.normalRelativeAngle((e.getBearingRadians()+getHeadingRadians())-getGunHeadingRadians())+ (e.getVelocity()*Math.sin(e.getHeadingRadians()-(e.getBearingRadians()+getHeadingRadians())))/14); setFire(2); } } public void onRobotDeath(RobotDeathEvent e){ enemyDist=Double.POSITIVE_INFINITY; } }
Note: I'm almost certain that this will fit into 132 bytes. If you need to put something else in, you could change it to head-on targeting or remove the line that locks on the radar before firing. Just remember that that line is pretty important for making the gun accurate--CrazyBassoonist 18:14, 12 September 2009 (UTC)
OK thanks, except should I do e.getName().equals(enemyName) as opposed to e.getName() == enemyName? --Starrynte 19:01, 12 September 2009 (UTC)
No problem. And using e.getName().equals(enemyName)
would work, but costs three more codesize bytes--CrazyBassoonist 20:00, 12 September 2009 (UTC)
- I wouldn't trust e.getName()==enemyName to work always without testing. Maybe it always uses the same object, and you end up with doing the right comparison with == in this particular case. Although I think it does work in this case, I'd test it thoroughly just to be sure. --zyx 01:23, 13 September 2009 (UTC)