1. Giới thiệu về chiến thuật của robot
Chiến thuật được sử dụng ở đây là khóa một robot nhất định và di chuyển đến gần nó, khi đã tiếp cận được mục tiêu ở khoảng cách nhất định thì sẽ bắn mục tiêu đó. Khi mục tiêu đến quá gần với ta thì ta sẽ di chuyển vuông góc với mục tiêu để tránh mục tiêu
2. Giải thích về cách bắn và cách di chuyển
Đầu tiên chúng ta tìm thấy vận tốc bên (lateral velocity) của robot khác (tốc độ của robot khác đang di chuyển song song với ta) với công thức:
double absBearing=e.getBearingRadians()+getHeadingRadians(); // trục bắn của robot khác
double latVel=e.getVelocity() * Math.sin(e.getHeadingRadians()-absBearing);// vận tốc bên của robot khác
Để tìm độ lệch góc gần đúng,ta giả sử robot khác sẽ tiếp tục di chuyển song song với vận tốc bên cho đến khi viên đạn của ta chạm tới chúng, tạo cho ta một hình tam giác như thế này:
Ta sẽ quay nòng súng của ta theo mục tiêu dựa vào công thức:
gunTurnAmt = robocode.util.Utils.normalRelativeAngle(absBearing- getGunHeadingRadians()+latVel/22)
Và dự đoán hướng sẽ đi của mục tiêu để tiến đến đi đến theo công thức:
setTurnRightRadians(robocode.util.Utils.normalRelativeAngle(absBearing-getHeadingRadians()+latVel/getVelocity()))
Khi khoảng cách từ ta tới mục tiêu lớn hơn 150 thì ta đi thắng tới chỗ của mục tiêu đã được dự đoán:
setAhead((e.getDistance() – 140)*moveDirection); // đi thẳng
setTurnRightRadians(robocode.util.Utils.normalRelativeAngle(absBearing-getHeadingRadians()+latVel/getVelocity())); // lái xe về phía kẻ thù được dự đoán vị trí trong tương lai
Nếu khoảng cách từ ta tới mục tiêu mà nhỏ hơn 150 thì ta quay vuông góc với mục tiêu và di chuyển:
setTurnLeft(-90-e.getBearing()); // quay vuông góc với mục tiêu
Khi khoảng cách từ ta đến mục tiêu lớn hơn 150 thì ta sẽ bắn đạn có size là 3, còn khoảng cách nhỏ hơn 150 thì ta sẽ bắn đạn có size là 4
Khi đâm vào tường thì ta sẽ quay ngược hướng để tránh đâm tiếp vào tường