Needed Amount To Kill
The highlighted comment was created in this revision.
As I see from your version history you don't calculate needed amount to kill the robot precisely. I use this code:
double robotEnergy = a.getEnergy();
double neededAmountToKill;
if (battleInfo.energy <= 4) {
neededAmountToKill = battleInfo.energy / 4;
} else {
neededAmountToKill = (battleInfo.energy + 2) / 6;
}
This may help you to improve SimpleBot.
Thanks for your code! I don't calculate it precisely because 1. It may gain some energy after I fire, which is unpredictable. 2. Some bullet power is better than another, for example, 2.95 is better than 3.00 as it exploits bugs in BasicSurfer. Therefore my algorithm is doing this: If and only if my current bullet power is enough to kill him, I lower my bullet power to some "Good" power which is still enough to kill him ;) Yes doing so waste a lot of energy to overkill him, meanwhile, I won't risk hitting him and leave 0.03 energy only because he hit me one more time. Anyway, I should test BOTH algorithm to see the real effect ;)
You can roll a value to x.y5 to create that bug. As I know the you gain 3 * damageGiven energy not 3 * firePower and energy doesn't effect the total score. I would say don't waste energy.
Oops, just reviewed my code. It will even try to use a higher bullet power (which is considered good) even if and only if the current power is enough to kill. This used to be a bug but now it is a feature, as it seems to improve the performance.
Say if your bot has 0.05 energy, it will try to kill you with a bullet that deals 4.00 damage, which is ridiculously.
But I think waste some energy when you have much more energy than your opponent to avoid risking not killing your opponent as soon as possible is better than saving some energy while prolonging the battle.
The result is that even against top bots, it wins a lot at end battles (in my observation).