[Home]History of Greywhind/PMGun

Robo Home | Changes | Preferences | AllPages


Revision 11 . . December 19, 2005 17:44 EST by Greywhind [Fixed version of PMGunBot]
Revision 10 . . December 18, 2005 23:01 EST by Greywhind [Of course! Silly me.]
Revision 9 . . December 18, 2005 22:10 EST by Voidious [I think I found your problem...]
  

Difference (from prior major revision) (author diff)

Changed: 1c1,2
I've been working on a PatternMatching gun that is based on (and uses a few lines of code from) Moebius' gun. It seems, however, to be eventually causing my robot to time out, despite the fact that I am controlling the size of its buffers. Please help! Also, it's accuracy seems to be less than good...
This code is based on the PM gun that Moebius uses, although only a couple of lines of code are actually from Moebius. Feel free to use this code - it's not all that accurate anyway, but it's good to learn PatternMatching.


Added: 4a6
import java.util.Hashtable;

Changed: 6c8
import java.util.Vector;
import java.util.Vector;

Added: 20a23,24
double prednow;
double eDist;

Changed: 27,28c31,34
for (int i = 0; i <= MAX_BUFFER_SIZE; i++) {
arcLength.add(new Double(0));
if (getRoundNum?() == 0) {
for (int i = 0; i <= MAX_BUFFER_SIZE; i++) {
arcLength.add(new Double(0));
}

Added: 45a52
eDist = e.getDistance();

Changed: 84c91,94
timeToHit? += 2;
//timeToHit? += 2;
if (index + timeToHit? >= arcLength.size()) {
index += arcLength.size() - index - timeToHit? - 1;
}

Added: 89a100,117

if (getY() < enemyY) {
prednow = Math.asin(Math.sin((paramOne - paramTwo) / e.getDistance() + absBearing));
} else {
if (getX() > enemyX) {
prednow = Math.acos(Math.cos((paramOne - paramTwo) / e.getDistance() + absBearing)) * -1;
} else {
prednow = Math.acos(Math.cos((paramOne - paramTwo) / e.getDistance() + absBearing));
}
}

if (Math.abs(Math.toDegrees(prednow) - Math.toDegrees(robocode.util.Utils.normalRelativeAngle(absBearing))) > Math.toDegrees(Math.asin(8 / (20 - 3 * Math.min(3.0, e.getEnergy()/4))))) {
fireLinear(e, absBearing, enemyX, enemyY);
//out.println(Math.toDegrees(prednow) + " and " + Math.toDegrees(robocode.util.Utils.normalRelativeAngle(absBearing)));
//out.println("Error - angle dif:" + (Math.abs(Math.toDegrees(prednow) - Math.toDegrees(robocode.util.Utils.normalRelativeAngle(absBearing)))) + " > " + (Math.toDegrees(Math.asin(8 / (20 - 3 * Math.min(3.0, e.getEnergy()/4))))));
} else {
//out.println("Fired normally.");
}

Added: 100a129,130
} else {
arcLength.removeElementAt?(arcLength.size() - 1);

Added: 105a136,167

public void onPaint(java.awt.Graphics2D g) {
g.setColor(Color.green);
g.drawOval((int)(getX() + eDist * Math.sin(prednow)) +22, 600- (int)(getY() + eDist * Math.cos(prednow)) +22, 10,10);
}

public void fireLinear(ScannedRobotEvent e, double absBearing, double enemyX, double enemyY) {
double bulletPower = Math.min(3.0,getEnergy());
double myX = getX();
double myY = getY();
double enemyHeading = e.getHeadingRadians();
double enemyVelocity = e.getVelocity();


double deltaTime = 0;
double battleFieldHeight? = getBattleFieldHeight?(), battleFieldWidth? = getBattleFieldWidth?();
double predictedX = enemyX, predictedY = enemyY;
while((++deltaTime) * (20.0 - 3.0 * bulletPower) < Point2D.Double.distance(myX, myY, predictedX, predictedY)){
predictedX += Math.sin(enemyHeading) * enemyVelocity;
predictedY += Math.cos(enemyHeading) * enemyVelocity;
if( predictedX < 18.0
|| predictedY < 18.0
|| predictedX > battleFieldWidth? - 18.0
|| predictedY > battleFieldHeight? - 18.0){
predictedX = Math.min(Math.max(18.0, predictedX), battleFieldWidth? - 18.0);
predictedY = Math.min(Math.max(18.0, predictedY), battleFieldHeight? - 18.0);
break;
}
}
double theta = robocode.util.Utils.normalAbsoluteAngle?(Math.atan2(predictedX - getX(), predictedY - getY()));
setTurnGunRightRadians?(robocode.util.Utils.normalRelativeAngle(theta - getGunHeadingRadians?()));
}

Added: 125a188,189

The updated code, with no memory problems, is above. Anyone who wants to help me refine it to hit more accurately, please feel free to give suggestions. Also, when it sees a clear targeting error, it uses linear targeting until it thinks it's fixed. -- Greywhind

Robo Home | Changes | Preferences | AllPages
Search: