Я написал относительно простой AdvancedRobot
, который поворачивает свой радар и записывает всех врагов с их скоростями. В конце концов, я заметил, что робот не попадает в тех случаях, когда он не должен пропустить. Я скопировал код из вики Robocode / Graphical Debugging и проверил это. Вот код (Wiki в данный момент недоступен):
// The coordinates of the last scanned robot
int scannedX = Integer.MIN_VALUE;
int scannedY = Integer.MIN_VALUE;
// Called when we have scanned a robot
public void onScannedRobot(ScannedRobotEvent e) {
// Calculate the angle to the scanned robot
double angle = Math.toRadians((getHeading() + e.getBearing()) % 360);
// Calculate the coordinates of the robot
scannedX = (int)(getX() + Math.sin(angle) * e.getDistance());
scannedY = (int)(getY() + Math.cos(angle) * e.getDistance());
}
И обработчик события:
// Paint a transparent square on top of the last scanned robot
public void onPaint(Graphics2D g) {
// Set the paint color to a red half transparent color
g.setColor(new Color(0xff, 0x00, 0x00, 0x80));
// Draw a line from our robot to the scanned robot
g.drawLine(scannedX, scannedY, (int)getX(), (int)getY());
// Draw a filled square on top of the scanned robot that covers it
g.fillRect(scannedX - 20, scannedY - 20, 40, 40);
}
«Заполненный квадрат» определенно НЕ находится над роботом. Несколько скриншотов показаны ниже. Похоже, точность зависит от расстояния, но я не уверен. Это ожидается, или я делаю что-то не так?