Tên lửa
Năm 3024. Mọi người đã trở nên quá khan hiếm tài nguyên để mạo hiểm trong chiến tranh, vì vậy chiến đấu đã chuyển sang các robot. Nhiệm vụ của bạn là xây dựng một bot không giống ai, những tên lửa sẽ phá hủy kẻ thù của bạn và bắn hạ tất cả các mối đe dọa sắp tới.
Trò chơi
Bots
Trò chơi diễn ra trên lưới 10x15. Bot của bạn nằm ở cạnh dưới cùng và có ba vị trí tại các điểm 6,7 và 8 của lưới. Đối thủ của bạn nằm ở đầu lưới, với ba khe đối diện trực tiếp với bạn.
Tên lửa
Từ bất kỳ vị trí nào trong số này, bạn có thể bắn tên lửa, giả sử vị trí đó chưa bị phá hủy. Một tên lửa bao gồm một danh sách các hướng được đưa cho nó khi được tạo ra, và một khi đã bắn thì các hướng này không thể thay đổi. Mỗi lượt, tên lửa sẽ tiêu thụ đầu danh sách và di chuyển theo hướng đó. Tên lửa di chuyển đồng thời. Nếu hai tên lửa kết thúc trong cùng một ô, cả hai sẽ phát nổ. Nếu một tên lửa hết lệnh, nó sẽ phát nổ. Nếu một tên lửa hết nhiên liệu, sau 100 lần di chuyển, nó sẽ phát nổ. Khi một tên lửa phát nổ, nó sẽ ở lại trong viên gạch đó trong 5 lượt, khiến bất kỳ tên lửa nào khác di chuyển đến đó cũng phát nổ.
Lưu ý: Do chuyển động đồng thời, hai tên lửa có thể vượt qua nhau mà không phát nổ, miễn là cả hai không kết thúc một lượt trong cùng một ô.
Mục tiêu
Mục tiêu của mỗi trận đấu là tiêu diệt các đối thủ của bạn trong khi vẫn giữ cho bạn sống sót. Một tên lửa có thể được bắn từ bất kỳ vị trí trực tiếp nào bạn có và được cung cấp một đường dẫn do bạn chỉ định trước khi nó được bắn. Bạn bắn một tên lửa mỗi lượt thứ hai, có nghĩa là tên lửa sẽ di chuyển hai lần trước khi bạn có thể bắn một tên lửa khác. Một cuộc đấu tay đôi kéo dài trong 200 lượt, hoặc cho đến khi một khe bot bị phá hủy.
Chấm điểm
Vào cuối trận đấu, bạn nhận được một điểm cho mỗi vị trí trực tiếp bạn có và một điểm cho mỗi vị trí đối thủ bạn đã phá hủy. Điều này có nghĩa là đây là một trò chơi có tổng bằng 0 và 6 điểm sẽ được trao cho mỗi trận đấu.
Một vòng tròn sẽ được chạy để mỗi bot đối mặt với bot một lần. Nếu bất kỳ bot nào sử dụng RNG, thì mỗi trận đấu sẽ là 1000 đấu tay đôi.
Thực hiện
Mã cho cuộc thi có thể được tìm thấy ở đây: https://github.com/Cain93/RocketBots
Each submission should extend the Bot
class. You must override the fireRocket
method. This method receives a grid array of Rockets, Rocket[][]
, that represents the gameboard. You are always located at the bottom of the grid, with slots at spots [-1][6]
, [-1][7]
, [-1][8]
. On the grid, unoccupied spots will be represented with null
. If a rocket exists in a tile, you can identify who it belongs to by accessing the dis
field. "^" is your rocket, and "v" is your opponents.
Bạn phải trả về một Danh sách liên kết các số nguyên cung cấp các hướng dẫn cho tên lửa của bạn. Để di chuyển lên, sử dụng 0. Để di chuyển lên và sang phải, sử dụng 1, vừa phải, sử dụng 2, v.v ... cho đến 7 và lên trên. Tên lửa sẽ di chuyển theo thứ tự bạn đẩy Integers. Ví dụ, đoạn mã sau sẽ khiến tên lửa di chuyển lên trên một vài lượt, ngoằn ngoèo vài vòng rồi kích nổ.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Để thay đổi vị trí nào để bắn tên lửa từ đó, hãy thay đổi curSlot
trường. 0 là vị trí ngoài cùng bên trái của bạn và 2 là vị trí ngoài cùng bên phải của bạn. Để kiểm tra nếu một khe bị phá hủy, sử dụng getSlot(int slotNumber)
.
Nếu một tên lửa kết thúc một lượt trên một khe, khe đó sẽ bị phá hủy. Bạn không cần phải tự kích nổ tên lửa.
Lưu ý: Tên lửa sinh sản tại vị trí của khe được bắn ra, nhưng sẽ di chuyển một lần trước khi va chạm được đánh giá. Vì vậy, nếu bạn bắn một tên lửa từ khe 0, và bước đầu tiên là đúng (2), thì bạn sẽ phá hủy khe giữa của chính mình. Tuy nhiên, lên và phải (1) là một động thái an toàn.
Nếu bạn muốn đặt tên cho bot của mình, ghi đè name()
phương thức.
Bots sẽ được xây dựng lại cho mỗi trận đấu, vì vậy mọi biến tĩnh sẽ được đặt lại.
Chúc may mắn!
Có thể tên lửa của bạn bay thật và đối thủ của bạn chẳng là gì ngoài những mảnh kim loại âm ỉ.
Dấu:
Cố ý kích nổ tên lửa để tạo ra vụ nổ là một cách dễ dàng hơn để phòng thủ hơn là cố gắng bắn hạ tên lửa đối thủ.
Bot ví dụ
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Điểm số
Điểm từ 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324