Giới thiệu
Trong trò chơi này, người chơi sử dụng đội quân của mình để chiến đấu với quân đội của người chơi khác, chiếm lãnh thổ và trở thành người đứng cuối cùng. Mỗi lượt, người chơi nhận được một số lượng quân đội cơ bản để sử dụng theo ý của họ. Tuy nhiên, bằng cách chiếm được các vùng lãnh thổ ở một số khu vực nhất định, người chơi có thể tăng con số này để mang lại cho họ lợi thế tiềm năng sau này trong trò chơi. (Điều này về cơ bản giống như Warlight ).
Tất cả các bot nên được viết bằng Java, C hoặc C ++ (Tôi sẽ bao gồm các ngôn ngữ khác nhưng không có phần mềm hoặc kinh nghiệm cho chúng). Việc gửi của bạn không cần thiết để mở rộng một lớp và bạn có thể tạo các hàm, lớp, giao diện hoặc bất cứ thứ gì khác là cần thiết và sử dụng bất kỳ gói hoặc lớp nào trong các API tiêu chuẩn . Nếu bạn đang dự định tạo một lớp hoặc giao diện, vui lòng xem xét sử dụng lớp bên trong hoặc giao diện bên trong.
Xin đừng cố gắng lập trình thay đổi bộ điều khiển hoặc các bài nộp khác trong cuộc thi này.
Trò chơi
Tổng quat
Mảng hai chiều 10x10 sẽ mô phỏng bảng, mỗi phần tử / ô đại diện cho một "lãnh thổ". Sẽ có 20 vòng và lên tới 1000 lượt mỗi vòng. Mỗi lượt, người chơi trước tiên sẽ triển khai quân đội mà họ có đến bất kỳ vùng lãnh thổ nào họ sở hữu và sau đó được trao cơ hội vận chuyển quân đội của mình đến các lãnh thổ gần đó trong nỗ lực đánh chiếm lãnh thổ của đối thủ bằng cách tấn công quân đội của họ. Người chơi phải triển khai tất cả các đội quân của mình, nhưng họ không phải di chuyển chúng nếu muốn.
Tấn công / chuyển quân
Nếu người chơi mong muốn, anh ta / cô ta có thể gửi quân đội từ một lãnh thổ đến bất kỳ trong số tám lãnh thổ lân cận. Bảng "bao bọc xung quanh", tức là nếu lãnh thổ của người chơi ở một bên, quân đội từ đó có thể được chuyển sang lãnh thổ liền kề ở phía bên kia. Khi di chuyển quân đội từ một lãnh thổ, vẫn còn ít nhất một đội quân còn lại trong lãnh thổ đó. Chẳng hạn, nếu một lãnh thổ chứa năm quân đội, không quá bốn người có thể được chuyển đến một lãnh thổ khác; nếu một lãnh thổ chứa một, quân đội đó không thể di chuyển.
Nếu người chơi gửi n
quân đội từ lãnh thổ này sang lãnh thổ khác mà họ sở hữu, lãnh thổ đó sẽ nhận được n
quân đội.
Giả sử một người chơi gửi n
quân đội từ lãnh thổ của mình đến lãnh thổ đối địch có o
quân đội trong đó. o
sẽ giảm bằng cách n * .6
làm tròn đến số nguyên gần nhất; tuy nhiên, đồng thời, n
sẽ giảm bằng cách o * .7
làm tròn đến số nguyên gần nhất. Các quy tắc sau đây liên quan đến việc có chiếm được lãnh thổ đối lập hay không sẽ được áp dụng:
- Nếu
o
đạt đến 0 VÀn
lớn hơn 0, người chơi sẽ chiếm lấy lãnh thổ, nơi sẽ cón
quân đội trong đó. - Nếu cả hai
n
vào
trở thành số không,o
sẽ tự động được đặt thành 1 và lãnh thổ sẽ không bị bắt. - Nếu
o
vẫn lớn hơn 0, số lượng quân đội trong lãnh thổ của người chơi sẽ tăng lênn
và lãnh thổ đối phương sẽ không bị bắt.
Tiền thưởng
Một nhóm các lãnh thổ sẽ được chọn để đại diện cho một phần thưởng; nếu một người chơi sở hữu tất cả các lãnh thổ là một phần của nhóm, người chơi đó sẽ nhận được thêm một lượng quân đội mỗi lượt.
Phần thưởng có số id để biểu thị các giá trị và giá trị khác nhau đại diện cho số lượng quân đội bổ sung mà người chơi có thể nhận được. Mỗi vòng, giá trị của phần thưởng sẽ là một số ngẫu nhiên trong khoảng từ 5 đến 10, bao gồm và mười phần thưởng sẽ có sẵn trên sân, mỗi phần có mười lãnh thổ được bao gồm trong phần thưởng.
Ví dụ: nếu người chơi nhận được 5 quân mỗi lượt sở hữu tất cả các lãnh thổ tạo thành phần thưởng có giá trị là 8, người chơi sẽ nhận được 13 quân trong lượt tiếp theo và lượt tiếp theo. Tuy nhiên, nếu người chơi mất một hoặc nhiều lãnh thổ tạo nên phần thưởng, anh ta hoặc cô ta sẽ chỉ nhận được 5 quân đội mỗi lượt.
Đầu ra đầu vào
Chương trình của bạn sẽ nhận đầu vào thông qua các đối số dòng lệnh, sẽ có định dạng sau:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
vàarmies
là cả hai số nguyên.id
là id của bạn vàarmies
là số lượng quân đội bạn cần triển khai đến các lãnh thổ của mình. Bạn phải triển khai tất cả các đội quân được trao cho bạn - không hơn không kém.territories
là một chuỗi các chuỗi đại diện cho các lãnh thổ bạn sở hữu và các lãnh thổ mà bạn không sở hữu liền kề với các lãnh thổ của bạn. Các chuỗi có định dạng này:[row],[col],[bonus id],[player id],[armies]
row
vàcol
chỉ ra hàng và cột của bảng nơi có lãnh thổ,bonus id
là id của phần thưởng mà lãnh thổ này là một phần của,player id
là id của người chơi sở hữu lãnh thổ vàarmies
là số quân đội có trong lãnh thổ. Đây là tất cả các số.bonuses
là một chuỗi các chuỗi đại diện cho các phần thưởng trên bảng mà bạn có thể tận dụng. Các chuỗi có định dạng này:[id],[armies],[territories left]
id
là id của phần thưởng,armies
là số lượng quân đội bạn có thể nhận được bằng cách sở hữu tất cả các lãnh thổ trong phần thưởng này vàterritories left
là số lượng lãnh thổ trong phần thưởng mà bạn cần nắm bắt để nhận thêm quân đội.
Xin lưu ý rằng một đối số thứ năm, "X", sẽ xuất hiện nếu đó là lượt đầu tiên của vòng và có thể được sử dụng vì lý do thuận tiện.
Một ví dụ về đầu vào ở lượt đầu tiên:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
Chương trình của bạn phải xuất hai chuỗi được phân tách bằng một dòng mới, chuỗi đầu tiên liệt kê các hàng và cột của lãnh thổ mà bạn muốn thêm quân đội vào và số lượng quân đội bạn muốn thêm vào đó và chuỗi thứ hai liệt kê các hàng và các cột của lãnh thổ bạn muốn gửi quân đội đến và số lượng quân đội bạn muốn gửi. Đầu ra có thể chứa dấu cách.
Để chỉ định lãnh thổ bạn muốn thêm quân đội vào, đầu ra của bạn phải theo định dạng sau:
[row],[col],[armies]
row
và col
là hàng và cột của bảng nơi lãnh thổ bạn muốn thêm quân đội và armies
là số quân đội bạn muốn thêm vào lãnh thổ.
Để chỉ định vùng lãnh thổ bạn muốn gửi quân đội tới, đầu ra của bạn phải theo định dạng sau:
[srow],[scol],[drow],[dcol],[armies]
srow
và scol
là hàng và cột của bảng nơi lãnh thổ bạn muốn vận chuyển quân đội từ đó, drow
và dcol
là hàng và cột của bảng nơi lãnh thổ bạn muốn gửi quân đội đến và armies
là số quân bạn muốn gửi . Lưu ý rằng nếu bạn không muốn di chuyển bất kỳ quân đội nào, chương trình của bạn sẽ in một khoảng trắng.
Một đầu ra mẫu có thể là thế này:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
Trong trường hợp này, người chơi triển khai năm đội quân đến lãnh thổ ở mức 0,0 và di chuyển ba đội quân từ 0,0 đến 0,1; ba từ 0,0 đến 1,0; và ba từ 0,0 đến 1,1.
Vòng và lượt
Khi bắt đầu mỗi vòng, tất cả người chơi sẽ được cung cấp một lãnh thổ nằm ở một vị trí ngẫu nhiên trên bảng (có thể hai hoặc nhiều người chơi bắt đầu cạnh nhau). Các lãnh thổ tạo nên một phần thưởng cũng có thể thay đổi.
Ở lượt đầu tiên, mỗi người chơi sẽ có một lãnh thổ chứa năm đội quân và họ sẽ nhận được năm đội quân họ có thể sử dụng (đây là mức tối thiểu mà họ có thể nhận được). Tất cả các lãnh thổ khác sẽ được sở hữu bởi các NPC không tấn công; mỗi cái đều chứa hai đội quân và có id -1
.
Mỗi lượt chương trình của bạn sẽ được chạy và cả hai phần đầu ra sẽ được thu thập. Bộ điều khiển sẽ áp dụng phần đầu ra đầu tiên, thêm quân đội vào lãnh thổ, ngay lập tức; tuy nhiên, bộ điều khiển sẽ đợi cho đến khi tất cả người chơi đưa ra phần đầu ra thứ hai, các lệnh tấn công / chuyển giao của họ. Một khi điều này đã được hoàn thành, các lệnh sẽ được xáo trộn ngẫu nhiên và sau đó được thực thi. Chương trình của bạn phải cung cấp đầu ra và chấm dứt trong một giây hoặc ít hơn để tham gia vào lượt chơi.
Ghi điểm và chiến thắng
Đối với bất kỳ vòng nào, nếu một người chơi vẫn còn, người chơi đó sẽ kiếm được 100 điểm. Mặt khác, nếu 1000 lượt vượt qua và vẫn còn nhiều người chơi, 100 điểm sẽ được chia đều cho các người chơi còn lại (tức là 3 người chơi còn lại mang lại 33 điểm mỗi người). Người chơi nào có nhiều điểm nhất vào cuối 20 vòng sẽ giành chiến thắng.
Đệ trình
Bài đăng của bạn nên bao gồm tên cho bot, ngôn ngữ được viết, mô tả ngắn gọn về nó và mã được sử dụng để chạy nó. Một bot mẫu sẽ được đăng ở đây làm ví dụ và sẽ được sử dụng trong cuộc thi. Bạn có thể gửi nhiều như bạn muốn.
Khác
Chương trình của bạn có thể tạo, ghi và đọc từ một tệp miễn là tên tệp đó giống với tên bạn đã sử dụng để gửi. Những tập tin này sẽ bị xóa trước khi bắt đầu một giải đấu nhưng không phải ở giữa các vòng.
Đến lượt bạn sẽ bị bỏ qua nếu:
- bạn bị loại (không có lãnh thổ);
- chương trình của bạn không in bất cứ điều gì;
- chương trình của bạn không chấm dứt trong vòng một giây;
- bạn triển khai quá ít quân đội đến các lãnh thổ của mình (triển khai quân đội đến các lãnh thổ mà bạn không sở hữu sẽ được tính vào điều này) hoặc quá nhiều quân đội; hoặc là
- đầu ra của bạn làm cho bộ điều khiển ném một ngoại lệ.
Lệnh tấn công / chuyển của bạn sẽ không được thực thi nếu:
- chương trình của bạn không cung cấp đầu ra chính xác;
- bạn chọn một lãnh thổ để di chuyển quân đội từ đó không phải là của bạn;
- bạn di chuyển bằng không hoặc một số lượng quân đội âm từ lãnh thổ của bạn;
- bạn di chuyển quá nhiều quân đội từ lãnh thổ của bạn; hoặc là
- bạn chọn một lãnh thổ để gửi quân đội đến đó không liền kề với lãnh thổ mà bạn đã chọn để di chuyển quân đội từ đó.
Bạn có thể tìm thấy bộ điều khiển và bot mẫu ở đây . Bot sẽ tham gia vào trò chơi, nhưng có lẽ nó sẽ không thắng được vòng nào (trừ khi nó thực sự may mắn).
Các kết quả
Chạy bộ điều khiển sau khi đẩy một bản sửa lỗi cho nó, WeSwarm tiếp tục là một lực lượng được tính toán. Nó sẽ lấy một bot với một chiến lược tuyệt vời để có cơ hội chống lại nó.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
Để ý!
Một lỗi được phát hiện bởi Zsw khiến các vùng lãnh thổ triển khai quân đội của họ sau khi những người khác có lợi thế tiềm năng trong trò chơi đã được sửa. Một chỉnh sửa đã được đẩy đến bộ điều khiển, vì vậy vui lòng sử dụng phiên bản hiện có được tìm thấy bằng liên kết ở trên.