|
Thanks a LOT! I'm WORKING now!!! :D :D --Pfvicm |
Incidentally, what's the difference between a long and a double?
package pfvicm;
import robocode.*;
import java.awt.Color;
import java.awt.geom.*;
/*
* Subotai - PFVICM 6.7.1
*/
public class Subotai extends AdvancedRobot
{
Point2D NextPosition, myloc;
double Fieldx, Fieldy;
static double eenergy;
double x, y, v, b, H, q, my, mx, rq, vq;
double myhead;
double adjacent;
static int dir=1;
public void run() {
setColors(Color.cyan,Color.orange,Color.yellow);
setAdjustGunForRobotTurn(true);
setAdjustRadarForGunTurn(true);
v=getVelocity();
x=getX();
y=getY();
my=getBattleFieldHeight()/2;
mx=getBattleFieldWidth()/2;
H=getHeading();
myloc=new Point2D.Double(x,y);
setTurnRadarRight(Double.POSITIVE_INFINITY);
Fieldx=getBattleFieldWidth();
Fieldy=getBattleFieldHeight();
execute();
while(true) {
/*NextPosition=new Point2D.Double(Math.random()*(Fieldx-36)+18,Math.random()*(Fieldy-36)+18);
goTo(NextPosition);
execute();
while (getDistanceRemaining()>0 || getTurnRemaining()>0) {
execute();
}
checkStop();*/
}
}
/*private void goTo(Point2D destination) {
Point2D location = new Point2D.Double(getX(), getY());
double distance = location.distance(destination);
double angle = normalRelativeAngle(absoluteBearing(location, destination) - getHeading());
if (Math.abs(angle) > 90) {
distance *= -1;
if (angle > 0) {
angle -= 180;
}
else {
angle += 180;
}
}
setTurnRight(angle);
setAhead(distance*.5);
}
private double absoluteBearing(Point2D source, Point2D target) {
return Math.toDegrees(Math.atan2(target.getX() - source.getX(), target.getY() - source.getY()));
}*/
private double normalRelativeAngle(double angle) {
angle = Math.toRadians(angle);
return Math.toDegrees(Math.atan2(Math.sin(angle), Math.cos(angle)));
}
/*public void checkStop() {
if(v==0) {
goTo(NextPosition);
execute();
}
}*/
public void onScannedRobot(ScannedRobotEvent e) {
setTurnRadarLeft(getRadarTurnRemaining());
//setInterruptible(true);
b = eenergy - e.getEnergy();
eenergy = e.getEnergy();
/*if (0<=H && H<90) {
q=1; }
else { if (90<=H && H<180) {
q=4; }
else { if (180<=H && H<270) {
q=3; }
else { if (270<=H && H<360) {
q=2; }
}}}*/
if (x<mx) {
if (y<my) {
vq=0; }
else { vq=270; }
}
else {
if (y<my) {
vq=180; }
else { vq=90; }
}
if (b > 0 && b <= 3) {
if (Math.random()<.5) { dir=-dir; }
setTurnLeft(H-(((Math.random()*90)+vq)/**dir*/));
setAhead(Math.random()*(sec(H)*getRange(x,y,mx*2,my*2)));
execute();
}
if (getEnergy()<0.1) {
stop();
turnGunLeft(e.getBearing());
fire(0.1);
resume();
}
else {
double absoluteBearing = getHeading() + e.getBearing();
double bearingFromGun = normalRelativeAngle(absoluteBearing - getGunHeading());
if (Math.abs(bearingFromGun) <= 3) {
turnGunRight(bearingFromGun);
if (getGunHeat() == 0)
setFire(Math.min(3 - Math.abs(bearingFromGun),getEnergy() - .1));
}
else {
turnGunRight(bearingFromGun);
}
}
setEventPriority("ScannedRobotEvent",10);
execute();
}
public double getRange(double x1,double y1, double x2,double y2) {
double xp = x2-x1;
double yp = y2-y1;
double h = Math.sqrt( xp*xp + yp*yp );
return h;
}
public double sec(double angle) {
double c = 1/Math.cos(angle);
return c;
}
/*public void onHitByBullet(HitByBulletEvent e) {
//goTo(NextPosition);
//stop();
if (x<getBattleFieldWidth()/2) {
dir=-dir;
}
else { if (y<getBattleFieldHeight()/2) {
dir=-dir;
}
}
setTurnRight(e.getBearing()-90);
setBack(Math.random()*(Math.min(Math.min((getBattleFieldHeight()-getY()),(getBattleFieldWidth()-getX())),(Math.min(getX(),getY()))))*dir*1.5);
execute();
//resume();
}*/
public void onHitRobot(HitRobotEvent e) {
//if(e.isMyFault()) {
//setTurnRadarRight(Math.sin((getHeading()+e.getBearing()) - getRadarHeading()));
setTurnGunRight(Math.sin((getHeading()+e.getBearing()) - getGunHeading()));
setEventPriority("ScannedRobotEvent",25);
fire(3);
//else {
//setBack(Math.random()*(Math.min(Math.min((getBattleFieldHeight()-getY()),(getBattleFieldWidth()-getX())),(Math.min(getX(),getY())))));
//}
}
}
Questions/Comments?:
From your description of the problem, it seems that your bot stops due to an exception. Is there any output in the debug-window? You can open the debug-window by clicking on your bot's name in the upper right corner during a battle. -- GrubbmGait
A 'long' is a larger version of 'int' (just a higher MAX and lower MIN value), and a 'double' is a "double precision" floating point decimal number. (As an aside, 'long' is to 'int' as 'double' is to 'float'.) -- Voidious
You've got an empty while(true) loop in your run method. Your bot will only call execute() once then go into an infinite loop resulting in the game disabling it. --wcsv
Maybe what you meant was something like this?
public void run()
{
setColors(Color.cyan,Color.orange,Color.yellow);
setAdjustGunForRobotTurn(true);
setAdjustRadarForGunTurn(true);
while(true)
{
v=getVelocity();
x=getX();
y=getY();
my=getBattleFieldHeight()/2;
mx=getBattleFieldWidth()/2;
H=getHeading();
myloc=new Point2D.Double(x,y);
setTurnRadarRight(Double.POSITIVE_INFINITY);
Fieldx=getBattleFieldWidth();
Fieldy=getBattleFieldHeight();
execute();
}
}
--wcsv
Thanks a LOT! I'm WORKING now!!! :D :D --Pfvicm