|
//import java.util.Random; |
|
import java.awt.geom.*; import java.awt.Color; |
|
static private double lastEnergy=100,curEnergy=100,enemyGunHeat=100,turnAngle=0,favDistance,tryAmt=144; static private java.awt.geom.Rectangle2D.Double _fieldRect = new java.awt.geom.Rectangle2D.Double(18, 18, 724, 564); |
|
static private double lastEnergy,curEnergy,favDistance,tryAmt,myPrevEnergy?,dist; static private final Rectangle2D.Double _fieldRect = new Rectangle2D.Double(18, 18, 724, 564); |
|
// static Random random=new Random(); static boolean frontTried=false,backTried=false; static int timeSinceLastChanged?=50; |
|
static private boolean tryingBack; static private int timeSinceLastChanged?; // double tempX,tempY; |
|
// java.awt.geom.Point2D.Double projectedPos=new java.awt.geom.Point2D.Double(); |
|
favDistance=0d; |
|
timeSinceLastChanged?=50; energygain=new double[2]; tryingBack=false; |
|
//out.println(delta); if(delta<=3.01 && delta>=0.09){ gain(delta); double newVel=(Math.random()*40d) - 20d; // out.println(newVel); setMaxVelocity?(Math.abs(newVel)); setAhead(newVel*Double.POSITIVE_INFINITY); |
|
if(delta<=3.01 && delta>=0.09){ move(0); |
|
timeSinceLastChanged?--; if(timeSinceLastChanged?<=0){ if(frontTried && backTried){ |
|
if(--timeSinceLastChanged?<=0){ if(!tryingBack){ favDistance=Math.min(favDistance+=tryAmt*2d,575d); tryingBack=true; // out.println("Trying distance " + favDistance); }else{ favDistance=Math.max(favDistance-=tryAmt*2.5,200d); // backTried=true; // out.println("Trying distance " + favDistance); |
|
if(energygain[0]>=energygain[1]){ favDistance+=tryAmt*2; |
|
if(energygain[1]>=energygain[0]){ favDistance+=tryAmt*2d; } |
|
}else{ |
|
// else{ |
|
} |
|
// } |
|
frontTried=backTried=false; |
|
tryingBack=false; |
|
execute(); |
|
if(!frontTried){ favDistance=Math.min(favDistance+=tryAmt,800); frontTried=true; // out.println("Trying distance " + favDistance); }else{ favDistance=Math.max(favDistance-=tryAmt*2,50); backTried=true; // out.println("Trying distance " + favDistance); } timeSinceLastChanged?=120; } |
|
timeSinceLastChanged?=Math.max(100,(int)tryAmt*2); } if(Math.abs(dist-favDistance)<=tryAmt/2){ energygain[(tryingBack)?1:0]+=getEnergy()-myPrevEnergy?+delta; } myPrevEnergy?=getEnergy(); |
|
if(favDistance==0d){ favDistance=e.getDistance(); } double absBearing=e.getBearingRadians?()+getHeadingRadians(),distanceChangeAngle?,power=Math.min(e.getEnergy()/4,getEnergy()/10),x=getX(),y=getY(),latVel=Math.signum(getVelocity()*Math.sin(e.getBearingRadians?())); |
|
dist=e.getDistance(); if(favDistance==0d){ favDistance=dist; } double absBearing=e.getBearingRadians?()+getHeadingRadians(),vel=Math.signum(getVelocity()),turnAngle; |
|
double diff=favDistance-dist; |
|
+(distanceChangeAngle?=( (Math.abs(favDistance-e.getDistance())>tryAmt/2) ? HALF_PI* (Math.random()/2)* latVel* Math.signum(e.getDistance()-favDistance) |
|
*(( (Math.abs(diff)>tryAmt/2) ? 1d+ Math.random()* Math.signum(diff)* vel |
|
0))) |
|
1d))) |
|
int moveDir=(int)Math.signum(-latVel+0.000001); while(!_fieldRect.contains(x+(Math.sin(turnAngle)*200*moveDir),y+(Math.cos(turnAngle)*200*moveDir))){ turnAngle=robocode.util.Utils.normalAbsoluteAngle?(turnAngle*(-moveDir*0.3 + 1)); //out.println(turnAngle); //out.println((Math.signum(latVel+0.0001)*0.1 + 1)); } // projectedPos.setLocation(x+(Math.sin(turnAngle)*200*moveDir),y+(Math.cos(turnAngle)*200*moveDir)); setTurnRightRadians?(robocode.util.Utils.normalRelativeAngle(turnAngle-getHeadingRadians())); |
|
// tempX=x+Math.sin(absBearing)*dist; // tempY=y+Math.cos(absBearing)*dist; double stick=200d*vel; for(int i=1;!_fieldRect. contains( getX() + stick*Math.sin(turnAngle+=Math.signum(vel*Math.sin(e.getBearingRadians?()))*i/500d), getY() + stick*Math.cos(turnAngle) ) && i<500 && (((Math.abs(absBearing-turnAngle)<0.4 || i==499) ? move((int)(-getVelocity())):true)); i++); setTurnRightRadians?(robocode.util.Utils.normalRelativeAngle(turnAngle-getHeadingRadians()));//out.println("Line 106"); |
|
if(setFireBullet(power)!=null){ gain(-power); } } public void onBulletHit?(BulletHitEvent? e){ double power=e.getBullet().getPower(); gain(power*3 + (power*4 + (2*Math.max(1,power-1)))); |
|
setFire(Math.min(e.getEnergy()/4,getEnergy()/10)); |
|
public void onHitByBullet?(HitByBulletEvent? e){ double power=e.getPower(); gain(-(power*4 + (2*Math.max(1,power-1)) + power*3)); } |
|
double newVel=(Math.random()*40d)-20d; setMaxVelocity?(Math.abs(newVel)); setAhead(newVel*Double.POSITIVE_INFINITY); |
|
move(0); |
|
void gain(double energychange){ if(frontTried && !backTried){ energygain[0]+=energychange; }else if(backTried){ energygain[1]+=energychange; } |
|
public boolean move(int dir){ double newVel=(Math.random()*41d) - 21d; setMaxVelocity?(Math.abs(newVel)+1d); setAhead(((dir==0) ? newVel:dir)*Double.POSITIVE_INFINITY); return false; } /* public void onPaint(java.awt.Graphics2D g){ double distance=Point2D.Double.distance(tempX,tempY,getX(),getY()); g.drawOval((int)(tempX-distance),(int)(tempY-distance),(int)(distance*2),(int)(distance*2)); g.setColor(Color.GREEN); g.drawOval((int)(tempX-favDistance),(int)(tempY-favDistance),(int)(favDistance*2),(int)(favDistance*2)); g.setColor(new Color(0,150,0)); g.drawOval((int)(tempX-favDistance-(tryAmt/2)),(int)(tempY-favDistance-(tryAmt/2)),(int)((tryAmt/2+favDistance)*2),(int)((tryAmt/2+favDistance)*2)); g.drawOval((int)(tempX-favDistance+(tryAmt/2)),(int)(tempY-favDistance+(tryAmt/2)),(int)((favDistance-(tryAmt/2))*2),(int)((favDistance-(tryAmt/2))*2)); |
|
*/ |
|
// public void onPaint(java.awt.Graphics2D g){ // g.fillOval((int)projectedPos.getX(),(int)projectedPos.getY(),11,11); // } |
|
|
package ntc;
import robocode.*;
import java.awt.geom.*;
import java.awt.Color;
public class Plains extends AdvancedRobot
{
static private final double HALF_PI = Math.PI / 2;
static private double lastEnergy,curEnergy,favDistance,tryAmt,myPrevEnergy,dist;
static private final Rectangle2D.Double _fieldRect = new Rectangle2D.Double(18, 18, 724, 564);
static private double[] energygain=new double[2];
static private boolean tryingBack;
static private int timeSinceLastChanged;
// double tempX,tempY;
public void run(){
tryAmt=144d;
timeSinceLastChanged=50;
energygain=new double[2];
tryingBack=false;
setAdjustRadarForGunTurn(true);
setAdjustGunForRobotTurn(true);
setTurnRadarRight(Double.POSITIVE_INFINITY);
while(true){
double delta=lastEnergy-curEnergy;
if(delta<=3.01 && delta>=0.09){
move(0);
}
if(--timeSinceLastChanged<=0){
if(!tryingBack){
favDistance=Math.min(favDistance+=tryAmt*2d,575d);
tryingBack=true;
// out.println("Trying distance " + favDistance);
}else{
favDistance=Math.max(favDistance-=tryAmt*2.5,200d);
// backTried=true;
// out.println("Trying distance " + favDistance);
// out.print("Best distance is ");
if(energygain[1]>=energygain[0]){
favDistance+=tryAmt*2d;
}
// out.println(favDistance + " since energygain[0] (" + ((int)energygain[0]) + ") > energygain[1] (" + ((int)energygain[1]) + ")");
// else{
// out.println(favDistance + " since energygain[1] (" + ((int)energygain[1]) + ") > energygain[0] (" + ((int)energygain[0]) + ")");
// }
energygain[0]=energygain[1]=0;
tryAmt/=2;
tryingBack=false;
timeSinceLastChanged=120;
}
timeSinceLastChanged=Math.max(100,(int)tryAmt*2);
}
if(Math.abs(dist-favDistance)<=tryAmt/2){
energygain[(tryingBack)?1:0]+=getEnergy()-myPrevEnergy+delta;
}
myPrevEnergy=getEnergy();
execute();
}
}
public void onScannedRobot(ScannedRobotEvent e){
dist=e.getDistance();
if(favDistance==0d){ favDistance=dist; }
double absBearing=e.getBearingRadians()+getHeadingRadians(),vel=Math.signum(getVelocity()),turnAngle;
setTurnRadarLeft(getRadarTurnRemaining());
lastEnergy=curEnergy;
curEnergy=e.getEnergy();
double diff=favDistance-dist;
turnAngle=robocode.util.Utils.normalAbsoluteAngle(
absBearing
+HALF_PI
*((
(Math.abs(diff)>tryAmt/2) ?
1d+
Math.random()*
Math.signum(diff)*
vel
:
1d)))
;
// tempX=x+Math.sin(absBearing)*dist;
// tempY=y+Math.cos(absBearing)*dist;
double stick=200d*vel;
for(int i=1;!_fieldRect.
contains(
getX() + stick*Math.sin(turnAngle+=Math.signum(vel*Math.sin(e.getBearingRadians()))*i/500d),
getY() + stick*Math.cos(turnAngle)
) && i<500 && (((Math.abs(absBearing-turnAngle)<0.4 || i==499) ? move((int)(-getVelocity())):true)); i++);
setTurnRightRadians(robocode.util.Utils.normalRelativeAngle(turnAngle-getHeadingRadians()));//out.println("Line 106");
setTurnGunRightRadians(
robocode.util.Utils.normalRelativeAngle(
absBearing-getGunHeadingRadians()
));
setFire(Math.min(e.getEnergy()/4,getEnergy()/10));
}
public void onHitRobot(HitRobotEvent e){
move(0);
}
public boolean move(int dir){
double newVel=(Math.random()*41d) - 21d;
setMaxVelocity(Math.abs(newVel)+1d);
setAhead(((dir==0) ? newVel:dir)*Double.POSITIVE_INFINITY);
return false;
}
/* public void onPaint(java.awt.Graphics2D g){
double distance=Point2D.Double.distance(tempX,tempY,getX(),getY());
g.drawOval((int)(tempX-distance),(int)(tempY-distance),(int)(distance*2),(int)(distance*2));
g.setColor(Color.GREEN);
g.drawOval((int)(tempX-favDistance),(int)(tempY-favDistance),(int)(favDistance*2),(int)(favDistance*2));
g.setColor(new Color(0,150,0));
g.drawOval((int)(tempX-favDistance-(tryAmt/2)),(int)(tempY-favDistance-(tryAmt/2)),(int)((tryAmt/2+favDistance)*2),(int)((tryAmt/2+favDistance)*2));
g.drawOval((int)(tempX-favDistance+(tryAmt/2)),(int)(tempY-favDistance+(tryAmt/2)),(int)((favDistance-(tryAmt/2))*2),(int)((favDistance-(tryAmt/2))*2));
}
*/
}