【发布时间】: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 似乎是开发者选择作为幻数的战场的内部边缘。所以他正在检查
predictedX和predictedY都没有超过最小/最大边距(如果它们超过了,他会夹紧)
标签: java prediction robocode