【问题标题】:Linear targeting in robocoderobocode 中的线性定位
【发布时间】:2018-04-05 14:48:17
【问题描述】:

谁能解释一下这段代码?我不明白循环中的条件和“预测的 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;
    }
}

【问题讨论】:

  • 这就是为什么你(不是你,一般的你)不应该使用幻数,而是用有意义的命名常量。
  • 我不确定,但 18.0 看起来像一个浮点数或者它可能是一个小数???
  • 这段代码简直丑陋且不可读。根据我的理解,18 似乎是开发者选择作为幻数的战场的内部边缘。所以他正在检查predictedXpredictedY 都没有超过最小/最大边距(如果它们超过了,他会夹紧)

标签: java prediction robocode


【解决方案1】:

机器人的宽度是 36px,所以 18.0 是它的一半。该条件只是确保您预测的 X/Y 不在战场之外

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2014-04-23
    • 2021-12-18
    • 2013-12-05
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多