Difference between revisions of "Help:Help/Code Shrinking"
Jump to navigation
Jump to search
Awesomeness (talk | contribs) (Compressed!) |
|||
| Line 129: | Line 129: | ||
Edit: WAIT A SEC! I FORGOT TO DELETE PART OF MY OLD COUNTING CODE! What if I delete it? I hope it'll be enough! [[User:Awesomeness|Awesomeness]] 11:33, 30 April 2009 (UTC) | Edit: WAIT A SEC! I FORGOT TO DELETE PART OF MY OLD COUNTING CODE! What if I delete it? I hope it'll be enough! [[User:Awesomeness|Awesomeness]] 11:33, 30 April 2009 (UTC) | ||
Okay, changed the code. 278 bytes.... lol [[User:Awesomeness|Awesomeness]] 11:44, 30 April 2009 (UTC) | Okay, changed the code. 278 bytes.... lol [[User:Awesomeness|Awesomeness]] 11:44, 30 April 2009 (UTC) | ||
| + | |||
| + | What's count and countAdd use for? Here is my version that do exactly same as your. except that it 233 bytes (with javac) | ||
| + | <pre> | ||
| + | package awesomeness; | ||
| + | |||
| + | import robocode.*; | ||
| + | import robocode.util.*; | ||
| + | import java.util.Random; | ||
| + | import static robocode.util.Utils.normalRelativeAngleDegrees; | ||
| + | //import java.awt.Color; | ||
| + | |||
| + | /** | ||
| + | * Elite - a robot by Awesomeness | ||
| + | */ | ||
| + | public class Elite extends AdvancedRobot { | ||
| + | |||
| + | static double previousEnergy = 100; | ||
| + | static int count; | ||
| + | static int countAdd;// The amount to add to the count | ||
| + | static int movementDirection = 50; | ||
| + | static int alternate; | ||
| + | static Random generator = new Random(); //This makes random numbers | ||
| + | |||
| + | /** | ||
| + | * run: Elite's default behavior | ||
| + | */ | ||
| + | public void run() { | ||
| + | setAdjustGunForRobotTurn(true); | ||
| + | turnRadarRightRadians(Double.POSITIVE_INFINITY); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * onScannedRobot: What to do when you see another robot | ||
| + | */ | ||
| + | public void onScannedRobot(ScannedRobotEvent e) { | ||
| + | |||
| + | //The absolute bearing, this is used a lot | ||
| + | double absoluteBearing = e.getBearingRadians(); | ||
| + | |||
| + | /////////////////////////////////////////////////////// | ||
| + | ////////////////////Movement Code////////////////////// | ||
| + | |||
| + | //If there's a change in energy, it probably fired | ||
| + | double changeInEnergy = previousEnergy - e.getEnergy(); | ||
| + | |||
| + | if (changeInEnergy>0d && changeInEnergy<=4d) { | ||
| + | i(); | ||
| + | alternate = -alternate; | ||
| + | if (alternate == 1) { | ||
| + | i(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | // Stay at right angles to the opponent | ||
| + | //setTurnRight(e.getBearing()+90d); | ||
| + | setTurnRightRadians(Math.cos(absoluteBearing)); // Simonton-ish way. one byte smaller | ||
| + | |||
| + | count += (countAdd += (generator.nextInt(2)*2-1) * 3); | ||
| + | |||
| + | setMaxVelocity(8); | ||
| + | |||
| + | setAhead(movementDirection); | ||
| + | |||
| + | // Track the energy level | ||
| + | previousEnergy = e.getEnergy(); | ||
| + | |||
| + | ////////////////////Movement Code////////////////////// | ||
| + | /////////////////////////////////////////////////////// | ||
| + | |||
| + | /////////////////////////////////////////////////////// | ||
| + | ///////////////////////Gun Code//////////////////////// | ||
| + | |||
| + | //Pretty simple... | ||
| + | setTurnGunRightRadians(Utils.normalRelativeAngle((absoluteBearing += getHeadingRadians()) - | ||
| + | getGunHeadingRadians() + (e.getVelocity() * Math.sin(e.getHeadingRadians() - | ||
| + | absoluteBearing) / 13.2))); | ||
| + | if (getGunHeat() == 0d) { // Only try to fire if we can- | ||
| + | setFire(2d); // otherwise we do much worse | ||
| + | } | ||
| + | |||
| + | ///////////////////////Gun Code//////////////////////// | ||
| + | /////////////////////////////////////////////////////// | ||
| + | |||
| + | |||
| + | |||
| + | /////////////////////////////////////////////////////// | ||
| + | /////////////////////Radar Code//////////////////////// | ||
| + | |||
| + | setTurnRadarLeftRadians(getRadarTurnRemainingRadians()); | ||
| + | |||
| + | |||
| + | /////////////////////Radar Code//////////////////////// | ||
| + | /////////////////////////////////////////////////////// | ||
| + | |||
| + | |||
| + | |||
| + | } | ||
| + | public void onHitWall(HitWallEvent e) { | ||
| + | i(); | ||
| + | } | ||
| + | |||
| + | public void i() { | ||
| + | setMaxVelocity(1); | ||
| + | movementDirection = -movementDirection; | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
Revision as of 14:43, 30 April 2009
Annoying... I've made an Über-Nano bot that gets 99% against N, but I'm stuck at 283 bytes... Awesomeness 01:29, 30 April 2009 (UTC)
- Post the source. I'm a past master at reducing codesize on bots. Hell, I wrote the original articles over at the repository and codesize tricks that spurred the nanobot explosion. I'd love some new blood in the nano area while I grit my teeth over Infinity/Dustbunny and how to make them just 1% better :) --Miked0801 03:56, 30 April 2009 (UTC)
- Okay.
package awesomeness;
import robocode.*;
import robocode.util.*;
import java.util.Random;
import static robocode.util.Utils.normalRelativeAngleDegrees;
//import java.awt.Color;
/**
* Elite - a robot by Awesomeness
*/
public class Elite extends AdvancedRobot {
int previousEnergy = 100;
int count;
int countAdd;// The amount to add to the count
byte movementDirection = 1;
byte alternate;
Random generator = new Random(); //This makes random numbers
/**
* run: Elite's default behavior
*/
public void run() {
setAdjustRadarForGunTurn(true);
setAdjustGunForRobotTurn(true);
// After trying out your robot, try uncommenting the import at the top,
// and the next line:
//setColors(Color.red,Color.blue,Color.green);
while(true) {
turnRadarRightRadians(Double.POSITIVE_INFINITY);
}
}
/**
* onScannedRobot: What to do when you see another robot
*/
public void onScannedRobot(ScannedRobotEvent e) {
//The absolute bearing, this is used a lot
double absoluteBearing = getHeadingRadians() + e.getBearingRadians();
///////////////////////////////////////////////////////
////////////////////Movement Code//////////////////////
//If there's a change in energy, it probably fired
int changeInEnergy = previousEnergy- (int) e.getEnergy();
if (changeInEnergy>0 && changeInEnergy<=4) {
alternate();
}
// Stay at right angles to the opponent
setTurnRight(e.getBearing()+90/*-5*movementDirection*/);
countAdd += (generator.nextInt(2)*2-1) * 3;
count += countAdd;
setMaxVelocity(8);
setAhead(50*movementDirection);
// Track the energy level
previousEnergy = (int) e.getEnergy();
////////////////////Movement Code//////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////Gun Code////////////////////////
//Pretty simple...
setTurnGunRightRadians(Utils.normalRelativeAngle(absoluteBearing -
getGunHeadingRadians() + (e.getVelocity() * Math.sin(e.getHeadingRadians() -
absoluteBearing) / 13.2)));
if (getGunHeat() == 0) { // Only try to fire if we can-
setFire(2.0); // otherwise we do much worse
}
///////////////////////Gun Code////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
/////////////////////Radar Code////////////////////////
setTurnRadarLeftRadians(getRadarTurnRemainingRadians());
/////////////////////Radar Code////////////////////////
///////////////////////////////////////////////////////
}
public void onHitWall(HitWallEvent e) {
i();
}
public void i() {
setMaxVelocity(1);
movementDirection = (byte) -movementDirection;
}
public void alternate() {
i();//Length: 276
alternate = (byte) -alternate;
if (alternate == 1) {
i();
}
}
}
Edit: WAIT A SEC! I FORGOT TO DELETE PART OF MY OLD COUNTING CODE! What if I delete it? I hope it'll be enough! Awesomeness 11:33, 30 April 2009 (UTC) Okay, changed the code. 278 bytes.... lol Awesomeness 11:44, 30 April 2009 (UTC)
What's count and countAdd use for? Here is my version that do exactly same as your. except that it 233 bytes (with javac)
package awesomeness;
import robocode.*;
import robocode.util.*;
import java.util.Random;
import static robocode.util.Utils.normalRelativeAngleDegrees;
//import java.awt.Color;
/**
* Elite - a robot by Awesomeness
*/
public class Elite extends AdvancedRobot {
static double previousEnergy = 100;
static int count;
static int countAdd;// The amount to add to the count
static int movementDirection = 50;
static int alternate;
static Random generator = new Random(); //This makes random numbers
/**
* run: Elite's default behavior
*/
public void run() {
setAdjustGunForRobotTurn(true);
turnRadarRightRadians(Double.POSITIVE_INFINITY);
}
/**
* onScannedRobot: What to do when you see another robot
*/
public void onScannedRobot(ScannedRobotEvent e) {
//The absolute bearing, this is used a lot
double absoluteBearing = e.getBearingRadians();
///////////////////////////////////////////////////////
////////////////////Movement Code//////////////////////
//If there's a change in energy, it probably fired
double changeInEnergy = previousEnergy - e.getEnergy();
if (changeInEnergy>0d && changeInEnergy<=4d) {
i();
alternate = -alternate;
if (alternate == 1) {
i();
}
}
// Stay at right angles to the opponent
//setTurnRight(e.getBearing()+90d);
setTurnRightRadians(Math.cos(absoluteBearing)); // Simonton-ish way. one byte smaller
count += (countAdd += (generator.nextInt(2)*2-1) * 3);
setMaxVelocity(8);
setAhead(movementDirection);
// Track the energy level
previousEnergy = e.getEnergy();
////////////////////Movement Code//////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////Gun Code////////////////////////
//Pretty simple...
setTurnGunRightRadians(Utils.normalRelativeAngle((absoluteBearing += getHeadingRadians()) -
getGunHeadingRadians() + (e.getVelocity() * Math.sin(e.getHeadingRadians() -
absoluteBearing) / 13.2)));
if (getGunHeat() == 0d) { // Only try to fire if we can-
setFire(2d); // otherwise we do much worse
}
///////////////////////Gun Code////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
/////////////////////Radar Code////////////////////////
setTurnRadarLeftRadians(getRadarTurnRemainingRadians());
/////////////////////Radar Code////////////////////////
///////////////////////////////////////////////////////
}
public void onHitWall(HitWallEvent e) {
i();
}
public void i() {
setMaxVelocity(1);
movementDirection = -movementDirection;
}
}