robocode 中的线性定位

Linear targeting in robocode

谁能给我解释一下这段代码?我不明白 while 和 "predicted X" 循环中的条件。为什么 predicted_X < 18? 18 是什么意思?

while((++deltaTime)*BULLET_SPEED < 
        Point2D.Double.distance(myX, myY, predictedX, predictedY)) {
    predictedX += Math.sin(enemyHeading) * e.getVelocity();
    predictedY += Math.cos(enemyHeading) * e.getVelocity();
    enemyHeading += enemyHeadingChange;
    if(predictedX < 18.0 
            || predictedY < 18.0
            || predictedX > getBattleFieldWidth() - 18.0
            || predictedY > getBattleFieldHeight() - 18.0) {
        predictedX = Math.min(Math.max(18.0, predictedX), 
                getBattleFieldWidth() - 18.0);  
        predictedY = Math.min(Math.max(18.0, predictedY), 
                getBattleFieldHeight() - 18.0);
        break;
    }
}

机器人的宽度是 36px,所以 18.0 是它的一半。条件只是确保你的predictedX/Y不在战场

之外