1. Chiến thuật
Chiến thuật của Mona đó là xác định hướng của đối thủ sau đó đó liên tục đảo qua lại hai bên để né đạn. Trong khi đảo liên tục súng vẫn luôn được nhắm vào hướng của đối thủ, Mona quyết định bắn dựa trên khoảng cách giữa Mona với đối thủ, vị trí càng gần đạn bắn ra sẽ càng mạnh và ngược lại
2. Giải thích chiến thuật
a. Chiến thuật di chuyển
Bắt đầu vào trận đấu, Mona sẽ sử dụng Radar quét 360 độ trên map, khi phát hiển ra được đổi thủ Mona lập tức quay thân theo phương ngang với đối thủ tiếp đó thực hiện quay thêm một góc 30 độ nữa và bắt đầu di chuyển tùy thuộc vào chiều của góc quay
Đoạn mã sử dụng để quay hướng nằm ngang so với đối thủ của Mona:
//Always stay at 90 degree angle to the enemy.
setTurnRight(event.getBearing() + 90 - 30 * directionToMove);
Đoạn mã sử dụng để di chuyển mỗi khi thấy đối thủ khai hỏa của Mona:
//If the enemy has a drop in energy of <=3 we assume the enemy has fired so we move.
double changeInEnergy = energyOfEnemy - event.getEnergy();
if (changeInEnergy > 0 && changeInEnergy <= 3) {
//Our robot changes direction and moves closer towards enemy.
directionToMove = -directionToMove;
setAhead((event.getDistance() / 4 + 25) * directionToMove);
}
b. Chiến thuật ngắm bắn
Trong suốt quá trình di chuyển, nòng súng cũng liên tục cập nhật và tập trung nhắm vào đối thủ, luôn sẵn sàng bắn mỗi khi có hiệu lệnh
Đoãn mã tính toán góc quay và quay góc cho nòng súng của Mona:
//Turn gun to face enemy. Normalize angle so gun turns the shortest distance.
setTurnGunRight(normalRelativeAngleDegrees(
getHeading() - getGunHeading() + event.getBearing()));
c. Chiến thuật bắn đạn
Đạn được quyết định bắn ra dựa trên khoảng cách của Mona đối với đối thủ. Đối với những đối thủ ở xa, Mona sẽ dần tiếp cận lại gần mà không bắn đạn để tiết kiệm năng lượng. Khi đến một khoảng cách nhất định, đảm bảo tỉ lệ đạn bắn trung cao hơn thì Mona bắt đầu mới thực hiện lệnh bắn. Mona và đối thủ càng gần với nhau, đạn bắn ra sẽ càng có uy lực
Đoạn mã thực hiện chiến thuật bắn đạn của Mona:
//Fire at target with power varying with distance.
if (event.getDistance() < 10 ) {
fire(3);
}
else if (event.getDistance() < 50) {
fire(1.5);
}
else if (event.getDistance() < 200) {
fire(1);
}
else if (event.getDistance() < 350) {
fire(0.5);
}
3. Kết luận
Mona là robot thiên về né tránh, sử dụng để làm tiêu hao năng lượng của đối thủ, chờ cho đối thủ con ít năng lượng sẽ ra tay kết liễu. Mona sẽ đối phó tốt với những robot đơn giản, những robot chỉ biết nhắm và băn mà không có dự đoán. Nhưng đối với những robot nắm được những quy luật di chuyển tuyến tính thì Mona chắc chắn sẽ bị bắt bài và thua toàn tập vì Mona di chuyển rất đơn giản, hoàn toàn tuyến tính, không hề ngẫu nhiên
Mong anh em góp ý để Mona của em có thể hoàn thiện hơn.
Cảm ơn anh em đã giành thời gian để đọc bài viết!!!
1 bình luận
Noice (y)