2014-02-28 47 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

我認爲你已經得到了你的罪和cos逆轉,即,使用cos()代替ex並且使用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

爲了提供更多關於這些coördinates的信息,他們似乎並不一致。 我已經與2臺機器人進行了一次測試戰鬥,掃描得到的結果和交互式因爲那個根本沒有移動。 所以,如果你有一個機器人掃描一個根本不動的機器人,你會期望X和Y始終保持一致,對吧?那麼,這就是我發現X和Y可以變化多達幾個像素的地方。 首先,Y是277.96894881116384,和幾個掃描後,Y是283.96894881116395 我會以爲這是自己的robocode一個問題。 – stefan