2014-02-28 3 views
3

나는 적의 좌표를 얻으려고 노력했기 때문에 나는 그들이 어디에 있는지 행동 할 수있다. 나는 보이지 않는다 사용하는 코드가 작동하기 :Robocode 적을 얻는 방법 좌표가

double absBearing = e.getBearingRadians() + e.getHeadingRadians(); 
    double ex = getX() + e.getDistance() * Math.sin(absBearing); 
    double ey = getY() + e.getDistance() * Math.cos(absBearing); 

내가, 내가 현장, 심지어 마이너스 숫자의 크기보다 큰 값주고있다 홀수 수익을 얻는 것 같다 것은 사람이를 ammend하는 방법에 대한 어떤 생각을 가지고 코드 XY을 동일한 방식으로 얻으려면 XY이 반환됩니까?

+0

많은 오픈 소스 Robocode 탱크가 있습니다. 그들은 모두 이런 종류의 논리를 가지고 있습니다. 다른 사람들이 문제에 접근 한 방식을 검토함으로써 시도하고있는 문제에 대해 더 나은 접근법을 찾을 수 있습니다. –

+0

나는 sin과 cos를 반전 시켰다고 생각한다. 예를 들어, cos()을 사용하고 sin()을 ey로 사용한다. 대개 y가 위쪽 방향으로 증가하지만 컴퓨터 화면에서는 y가 아래쪽 방향으로 증가하므로 천사가 일관성이 있는지 확인해야합니다. 행운을 빕니다! – Roy

답변

3
public class MyRobot extends AdvancedRobot { 
    private RobotStatus robotStatus; 

    (...) 

    public void onStatus(StatusEvent e) { 
     this.robotStatus = e.getStatus()); 
    }  

    public void onScannedRobot(ScannedRobotEvent e) { 
     double angleToEnemy = e.getBearing(); 

     // Calculate the angle to the scanned robot 
     double angle = Math.toRadians((robotStatus.getHeading() + angleToEnemy % 360); 

     // Calculate the coordinates of the robot 
     double enemyX = (robotStatus.getX() + Math.sin(angle) * e.getDistance()); 
     double enemyY = (robotStatus.getY() + Math.cos(angle) * e.getDistance()); 
    } 

    (...) 
} 
+0

이러한 부속물에 대한 추가 정보를 제공하기 위해 일관성있는 것으로 보이지 않습니다. 나는 2 개의 로봇과 함께 시험 전투를 치렀다. 2 개의 로봇은 주사위를 굴려 주사위를 굴렸다. 전혀 움직이지 않는 로봇을 스캔하는 로봇을 가지고 있다면 X와 Y가 항상 같을 것이라고 기대할 수 있습니다. 맞습니까? 음, X와 Y가 몇 픽셀까지 변할 수 있다는 것을 알았습니다. 먼저 Y는 277.96894881116384, 그리고 몇 가지 검사 후, Y는 283.96894881116395 나는이 로보 코드 자체에 문제가 가정 것입니다. – stefan

관련 문제