Virtual bullet doesn't line up with real bullets
I would guess this is the result of the Robocode idiosyncrasy where a bullet is fired before the gun is turned (so if you do setTurnGunRightDegrees(10), setFire(3), execute(), the bullet is fired before the gun is turned right 10 degrees). So your actual aim is probably the aim from the previous turn, while your predicted is from the current turn.
Well... can't really tell without more information what's wrong, but my first guess about what's wrong, is that perhaps you're not accounting for how within a tick, firing happens before gun turning does. The angle you fire at when you call setFire() is the angle resulting from the prior tick's setTurnGun() type call.
Yeah that's correct, the setFire is from the last tick.
What's a typical pattern for robocode as to code placement? I'm currently placing the gun turning code in the while true loop and the firing code in onScannedRobot
and it's wrapped with if (getGunHeat() == 0.0)
Should I change that layout? (also add && getGunTurnRemaining() == 0.0 to the fire wrap?)
Using onScannedRobot or run is totally just a matter of preference - for 1v1 it won't make any difference, really. It could also be an off-by-1 error in the bullet source location - it should be your location on the tick you called setFire. Or your target angle was farther than your gun could move during that tick, in which case the getGunTurnRemaining == 0 check would solve it.
I know if i combined the 2 logics in 1 function, the code would fail (for me at least) Nevermind i figured it out.
(Also Voidious: I'm testing my bot against yours now because it has pretty debugging graphics and I can see my weaknesses :P Also I perform better against your bot (diamond) if i don't fire :P)
Also, am I suppose to, with my virtual guns, determine the fire direction using last tick's information, since gun turns after bullet fires...