Difference between revisions of "SuperWalls"
Jump to navigation
Jump to search
(clean the code up for you) |
m |
||
Line 28: | Line 28: | ||
static int HGHits; //Number of hits with Head-On Targeting | static int HGHits; //Number of hits with Head-On Targeting | ||
static int LGHits; //Number of hits with Linear Targeting | static int LGHits; //Number of hits with Linear Targeting | ||
− | |||
− | |||
boolean gunIdent; //Used to tell which gun we are using | boolean gunIdent; //Used to tell which gun we are using | ||
double moveAmount; // How much to move | double moveAmount; // How much to move | ||
Line 54: | Line 52: | ||
// Turn the gun to turn right 90 degrees. | // Turn the gun to turn right 90 degrees. | ||
− | |||
turnRight(90); | turnRight(90); | ||
while (true) { | while (true) { | ||
Line 81: | Line 78: | ||
*/ | */ | ||
public void onScannedRobot(ScannedRobotEvent e) { | public void onScannedRobot(ScannedRobotEvent e) { | ||
− | double absBearing = e.getBearingRadians()+getHeadingRadians();//The enemies location relative to us | + | double absBearing = e.getBearingRadians()+getHeadingRadians();// The enemies location relative to us |
− | double latVel = e.getVelocity()*Math.sin(e.getHeadingRadians()-absBearing);//The enemies lateral velocity | + | double latVel = e.getVelocity()*Math.sin(e.getHeadingRadians()-absBearing);// The enemies lateral velocity |
− | double radarTurn = absBearing - getRadarHeadingRadians();//The amount to turn our radar | + | double radarTurn = absBearing - getRadarHeadingRadians();// The amount to turn our radar |
− | double HGRating = (double) HGHits / HGShots; | + | |
+ | double HGRating = (double) HGHits / HGShots; | ||
double LGRating = (double) LGHits / LGShots; | double LGRating = (double) LGHits / LGShots; | ||
− | if( getRoundNum() == 0 || LGRating>HGRating){ //In the first round use linear targeting | + | |
+ | if (getRoundNum() == 0 || LGRating>HGRating){ // In the first round use linear targeting | ||
double bulletPower = Math.min(3, e.getEnergy() / 4); | double bulletPower = Math.min(3, e.getEnergy() / 4); | ||
− | setTurnGunRightRadians(Utils.normalRelativeAngle(absBearing-getGunHeadingRadians()+Math.asin(latVel/(20 - 3 * bulletPower)));//Turn our gun | + | setTurnGunRightRadians(Utils.normalRelativeAngle(absBearing - getGunHeadingRadians() + Math.asin(latVel / (20 - 3 * bulletPower)));// Turn our gun |
LGShots++; | LGShots++; | ||
gunIdent = true; | gunIdent = true; | ||
− | setFire(bulletPower);//Fire the minimum amount of energy needed to finish off the other robot | + | setFire(bulletPower);// Fire the minimum amount of energy needed to finish off the other robot |
− | } | + | } else { //in the second use head-on |
− | + | setTurnGunRightRadians(Utils.normalRelativeAngle(absBearing - getGunHeadingRadians())); | |
− | setTurnGunRightRadians(Utils.normalRelativeAngle(absBearing-getGunHeadingRadians())); | ||
HGShots++; | HGShots++; | ||
− | gunIdent=false; | + | gunIdent = false; |
− | setFire(e.getEnergy()/4);//Fire the minimum amount of energy needed to finish off the other robot | + | setFire(e.getEnergy() / 4);// Fire the minimum amount of energy needed to finish off the other robot |
} | } | ||
− | setTurnRadarRightRadians(Utils.normalRelativeAngle(radarTurn)*2);//Make the radar lock on | + | setTurnRadarRightRadians(Utils.normalRelativeAngle(radarTurn) * 2);// Make the radar lock on |
} | } | ||
public void onBulletHit(BulletHitEvent e){//add a hit to the ranking of whatever gun we were using | public void onBulletHit(BulletHitEvent e){//add a hit to the ranking of whatever gun we were using | ||
if(gunIdent){ | if(gunIdent){ | ||
− | LGHits=LGHits+1; | + | LGHits = LGHits+1; |
} | } | ||
else{ | else{ | ||
− | HGHits=HGHits+1; | + | HGHits = HGHits+1; |
} | } | ||
} | } | ||
} | } | ||
</pre> | </pre> |
Revision as of 19:43, 1 March 2009
SuperWalls is a part of the Super Sample Bots set by CrazyBassoonist. It is intended to provide new robocoders with a new challenge after beating all of the sample robots.
Movement
SuperWalls uses the exact same movement as Walls.
Targeting
SuperWalls uses two guns, a Linear Targeting gun and a Head-On Targeting gun. It keeps track of the number and of shots and hits of each gun, and uses whichever gun works better.
Code
package wiki.SuperSampleBot; import robocode.*; import robocode.util.*; import java.awt.*; /** * SuperWalls - a sample robot by CrazyBassoonist based on the sample robot Walls by Mathew Nelson and maintained by Flemming N. Larsen * Moves around the outer edge with two targeting systems */ public class SuperWalls extends AdvancedRobot { static int HGShots; //Number of shots with Head-On Targeting static int LGShots; //Number of shots with Linear Targeting static int HGHits; //Number of hits with Head-On Targeting static int LGHits; //Number of hits with Linear Targeting boolean gunIdent; //Used to tell which gun we are using double moveAmount; // How much to move public void run() { setAdjustRadarForRobotTurn(true); setAdjustRadarForGunTurn(true) setBodyColor(Color.black); setGunColor(Color.black); setRadarColor(Color.orange); setBulletColor(Color.cyan); setScanColor(Color.cyan); // Initialize moveAmount to the maximum possible for this battlefield. moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight()); setTurnRadarRight(Double.POSITIVE_INFINITY); // turnLeft to face a wall. // getHeading() % 90 means the remainder of // getHeading() divided by 90. turnLeft(getHeading() % 90); ahead(moveAmount); // Turn the gun to turn right 90 degrees. turnRight(90); while (true) { // Move up the wall ahead(moveAmount); // Turn to the next wall turnRight(90); } } /** * onHitRobot: Move away a bit. */ public void onHitRobot(HitRobotEvent e) { // If he's in front of us, set back up a bit. if (e.getBearing() > -90 && e.getBearing() < 90) { back(100); } // else he's in back of us, so set ahead a bit. else { ahead(100); } } /** * onScannedRobot: Fire! */ public void onScannedRobot(ScannedRobotEvent e) { double absBearing = e.getBearingRadians()+getHeadingRadians();// The enemies location relative to us double latVel = e.getVelocity()*Math.sin(e.getHeadingRadians()-absBearing);// The enemies lateral velocity double radarTurn = absBearing - getRadarHeadingRadians();// The amount to turn our radar double HGRating = (double) HGHits / HGShots; double LGRating = (double) LGHits / LGShots; if (getRoundNum() == 0 || LGRating>HGRating){ // In the first round use linear targeting double bulletPower = Math.min(3, e.getEnergy() / 4); setTurnGunRightRadians(Utils.normalRelativeAngle(absBearing - getGunHeadingRadians() + Math.asin(latVel / (20 - 3 * bulletPower)));// Turn our gun LGShots++; gunIdent = true; setFire(bulletPower);// Fire the minimum amount of energy needed to finish off the other robot } else { //in the second use head-on setTurnGunRightRadians(Utils.normalRelativeAngle(absBearing - getGunHeadingRadians())); HGShots++; gunIdent = false; setFire(e.getEnergy() / 4);// Fire the minimum amount of energy needed to finish off the other robot } setTurnRadarRightRadians(Utils.normalRelativeAngle(radarTurn) * 2);// Make the radar lock on } public void onBulletHit(BulletHitEvent e){//add a hit to the ranking of whatever gun we were using if(gunIdent){ LGHits = LGHits+1; } else{ HGHits = HGHits+1; } } }