Difference between revisions of "User talk:Khanguy"
Jump to navigation
Jump to search
(Replaced content with 'nvm') |
(wallhugging help) |
||
Line 1: | Line 1: | ||
− | + | == WallHugging == | |
+ | |||
+ | I need help fixing my wallhugging code. Everytime I reverse direction or when getHeadingRadians() nears 3pi/2 or pi/2 It seizes up(it won't move). I'm stick and can use any of the help I can use. Here is the code: | ||
+ | <syntaxhighlight> | ||
+ | static double direction; //1 for clockwise or -1 for counterclockwise | ||
+ | . | ||
+ | . | ||
+ | . | ||
+ | //in the onscannedmethod | ||
+ | wallHugging(); //Dunno why I did this, but it works! | ||
+ | . | ||
+ | . | ||
+ | . | ||
+ | //whenever I want to change direction | ||
+ | direction = -direction; // reverse direction when hit | ||
+ | . | ||
+ | . | ||
+ | . | ||
+ | // this is the absolute heading I want to move in to go clockwise or | ||
+ | // counterclockwise around my enemy if I want to move closer to them, | ||
+ | // I would use less of an offset from absBearing (I'll go right toward | ||
+ | // them if I move at absBearing) | ||
+ | public void wallHugging(){ | ||
+ | //Pez's wall smoothing code with adaptation | ||
+ | double goalDirection = getHeadingRadians() + Math.PI/2 + direction*Math.PI/2; // I want it to go straight | ||
+ | Rectangle2D fieldRect = new Rectangle2D.Double(18, 18, getBattleFieldWidth()-36, | ||
+ | getBattleFieldHeight()-36); | ||
+ | while (!fieldRect.contains(getX()+Math.sin(goalDirection)*160, getY()+ | ||
+ | Math.cos(goalDirection)*160)){ | ||
+ | goalDirection += direction*.1; //turn a little toward enemy and try again | ||
+ | } | ||
+ | double turn = robocode.util.Utils.normalRelativeAngle(goalDirection-getHeadingRadians()); | ||
+ | if (Math.abs(turn) > Math.PI/2) { | ||
+ | turn = Utils.normalRelativeAngle(turn + Math.PI); | ||
+ | setBack(100); | ||
+ | } else { | ||
+ | setAhead(100); | ||
+ | } | ||
+ | setTurnRightRadians(turn); | ||
+ | } | ||
+ | </syntaxhighlight> |
Revision as of 21:47, 26 April 2011
WallHugging
I need help fixing my wallhugging code. Everytime I reverse direction or when getHeadingRadians() nears 3pi/2 or pi/2 It seizes up(it won't move). I'm stick and can use any of the help I can use. Here is the code:
static double direction; //1 for clockwise or -1 for counterclockwise
.
.
.
//in the onscannedmethod
wallHugging(); //Dunno why I did this, but it works!
.
.
.
//whenever I want to change direction
direction = -direction; // reverse direction when hit
.
.
.
// this is the absolute heading I want to move in to go clockwise or
// counterclockwise around my enemy if I want to move closer to them,
// I would use less of an offset from absBearing (I'll go right toward
// them if I move at absBearing)
public void wallHugging(){
//Pez's wall smoothing code with adaptation
double goalDirection = getHeadingRadians() + Math.PI/2 + direction*Math.PI/2; // I want it to go straight
Rectangle2D fieldRect = new Rectangle2D.Double(18, 18, getBattleFieldWidth()-36,
getBattleFieldHeight()-36);
while (!fieldRect.contains(getX()+Math.sin(goalDirection)*160, getY()+
Math.cos(goalDirection)*160)){
goalDirection += direction*.1; //turn a little toward enemy and try again
}
double turn = robocode.util.Utils.normalRelativeAngle(goalDirection-getHeadingRadians());
if (Math.abs(turn) > Math.PI/2) {
turn = Utils.normalRelativeAngle(turn + Math.PI);
setBack(100);
} else {
setAhead(100);
}
setTurnRightRadians(turn);
}