Hãy chơi Kick The Can!
Mặc dù Moogie là người chiến thắng hiện tại, nhưng nếu bất cứ ai có thể lấy vương miện của mình, họ được khuyến khích làm như vậy
Kick the can là một trò chơi của trẻ em. Liên quan đến một hậu vệ, và nhiều kẻ tấn công. Ngày nay nó không còn là một trò chơi như vậy nữa! Công việc của bạn là viết một bot chơi nó, để giành chiến thắng, theo phong cách vua chúa !
https://en.wikipedia.org/wiki/Kick_the_can
Có một số khác biệt chính trong trò chơi này. Sự khác biệt quan trọng đầu tiên là trò chơi là nhiều người chơi (5v5). Sự khác biệt quan trọng thứ hai là cả hai bộ bot có thể tiêu diệt và loại bỏ người chơi của kẻ thù bằng cả mìn và bom ném! Bots không thể nhìn thấy bất kỳ mỏ nào (bất kể khoảng cách) hoặc người chơi ở cách xa hơn năm khối!
Bản đồ là một mê cung như sau.
Mê cung này được tạo theo thủ tục bằng cách trước tiên tạo ra một mê cung bằng thuật toán quay lui đệ quy sâu đầu tiên. Và sau đó đặt các lỗ được hiển thị vào (cũng như làm cho mê cung trở nên "không hoàn hảo" hơn. Mê cung rộng 65x65 khối và không có chỉ số. Do đó, cờ xanh (có thể) ở mức 1,1 và cờ đỏ (có thể) là ở 63,63. Đội màu xanh sinh sản ở 2,2 và 3,3 4,4, v.v ... đội đỏ sinh ra ở 62,62 và 61,61, 60,60, v.v ... Các khối màu lục lam là bot trong đội màu xanh và Các khối trong màu đỏ tươi là các bot màu đỏ. Trò chơi luôn có năm so với năm. Mỗi bot trong nhóm sẽ sử dụng mã của bạn (nhưng có thể lưu trữ các biến thể hiện khác (hoặc tạo tệp cục bộ) để theo dõi trạng thái và phân biệt vai trò.
Trò chơi
Mỏ có thể được đặt như bạn có thể nhìn thấy trong màu xám. Và bom có thể được ném một khoảng cách tối đa lên tới bốn khối. Những người này di chuyển tới bốn khối xuyên tường và những người chơi khác chỉ giết những kẻ thù cản đường bạn. Sau mỗi bước, họ có 40% cơ hội rơi xuống. Vì vậy, họ có 100% cơ hội 1 phạm vi 60% ở 2 phạm vi 36% ở 3 phạm vi và 21,6% ở ba phạm vi Đặt một quả mìn hoặc ném bom mất một viên đạn. Điều này bắt đầu từ 0 và có thể tăng lên bằng cách thu thập các hộp màu cam. Lưu ý rằng bốn (4) bộ đệm đạn này sẽ được tập trung thuận tiện. Các Bots được xếp thành một mảng gồm hai màu đỏ và hai màu xanh. RRRRRBBBBB IE. Giành cờ được cho phép, nhưng hãy cẩn thận khi ở gần cờ (tức là ít hơn năm khối) dẫn đến chậm, và chỉ cho phép di chuyển. cứ ba lượt. Đấu trường chọn một khởi đầu ngẫu nhiên cho mỗi lượt. TÔI.
Mục tiêu
Lập trình năm bot của bạn (mỗi bot có cùng một tệp lớp) để điều hướng thành công mê cung và chạm vào hộp đối thủ trong khi cẩn thận không vô tình đánh bật lon của chính chúng, hoặc bước lên mỏ.
Lập trình
Các mục đấu trường và bot hiện đang có trong Java tuy nhiên trình bao bọc stdin / out tồn tại cho các ngôn ngữ khác.
Mã đấu trường sẽ được cung cấp nhưng đây là chi tiết có liên quan.
Lớp học Bot
public class YourUniqueBotName extends Bot{
public YourUniqueBotName(int x , int y, int team){
super(x,y,team);
//optional code
}
public Move move(){//todo implement this method
//it should output a Move();
//A move has two paramaters
//direction is from 0 - 3 as such
// 3
// 2-I-0
// 1
// a direction of 4 or higher means a no-op (i.e stay still)
//And a MoveType. This movetype can be
//MoveType.Throw
//MoveType.Mine
//MoveType.Defuse defuse any mine present in the direction given
//MoveType.Move
}
}
Phương pháp chính có sẵn
Lưu ý rằng việc sử dụng bất kỳ kỹ thuật nào để sửa đổi hoặc truy cập dữ liệu mà bạn thường không có quyền truy cập là không được phép và sẽ dẫn đến việc không đủ tiêu chuẩn.
Arena.getAmmo()[team];//returns the shared ammo cache of your team
Arena.getMap();//returns an integer[] representing the map. Be careful since all enemies more than 5 blocks away (straight line distance) and all mines are replaced with constant for spaces
//constants for each block type are provided such as Bot.space Bot.wall Bot.mine Bot.redTeam Bot.blueTeam Bot.redFlag Bot.blueFlag
Arena.getAliveBots();//returns the number of bots left
getX();//returns a zero indexed x coordinate you may directly look at (but not change X)
getY();//returns a zero indexed y coordinate (y would work to, but do not change y's value)
//Although some state variables are public please do not cheat by accessing modifying these
Đặc tả giao diện của trình bao bọc StdIn / Out
Giao diện bao gồm hai chế độ: khởi tạo và chạy.
Trong chế độ khởi tạo, một khung INIT duy nhất được gửi qua thiết bị xuất chuẩn. Thông số kỹ thuật của khung này như sau:
INIT
{Team Membership Id}
{Game Map}
TINI
Trong đó: {Id thành viên nhóm} là một ký tự đơn: R hoặc B. B có nghĩa là đội màu xanh, R có nghĩa là đội màu đỏ.
{Bản đồ trò chơi} là một chuỗi các hàng ký tự ascii đại diện cho một hàng của bản đồ. Các ký tự ascii sau đây là hợp lệ: F = cờ xanh G = cờ đỏ O = không gian mở W = tường
Sau đó, trò chơi sẽ tiến hành gửi các khung trò chơi qua thiết bị xuất chuẩn đến từng bot như sau:
FRAME
{Ammo}
{Alive Bot Count}
{Bot X},{Bot Y}
{Local Map}
EMARF
Ở đâu:
{Ammo} là một chuỗi các chữ số, giá trị sẽ là 0 hoặc lớn hơn {Alive Bot Count} là một chuỗi các chữ số, giá trị sẽ là 0 hoặc lớn hơn {Box X} là một chuỗi các chữ số đại diện cho tọa độ X của bot trên bản đồ trò chơi. Giá trị sẽ là 0 <= X <Chiều rộng bản đồ. {Box Y} là một chuỗi các chữ số đại diện cho tọa độ Y của bot trên bản đồ trò chơi. Giá trị sẽ là 0 <= Y <Chiều cao bản đồ. {Bản đồ địa phương} là một chuỗi các hàng ký tự ascii đại diện cho toàn bộ bản đồ xung quanh bot. Các ký tự ascii sau đây là hợp lệ: F = cờ xanh G = cờ đỏ O = không gian mở W = wall R = đội đỏ bot B = đội xanh bot M = mine A = ammo
Bộ điều khiển hy vọng rằng bot của bạn sau đó sẽ xuất ra (để xuất chuẩn) một phản hồi dòng đơn theo định dạng:
{Action},{Direction}
Ở đâu:
{Action} là một trong những: Di chuyển Defuse Mine Ném
{Direction} là một chữ số duy nhất trong khoảng từ 0 đến 4. (xem thông tin hướng dẫn trước đó)
LƯU Ý: tất cả các chuỗi sẽ được phân cách bằng ký tự \ n Cuối dòng.Đây sẽ là một giải đấu loại bỏ. Các bot mẫu của tôi sẽ tham gia dưới dạng chất độn, nhưng tôi sẽ không tự thưởng cho mình chiến thắng. Trong trường hợp chiến thắng của một trong những bot của tôi, tiêu đề sẽ thuộc về thành viên vị trí thứ hai và sẽ tiếp tục cho đến khi có một bot không phải là một trong những bot của tôi. Mỗi trận đấu bao gồm 11 vòng đá. Nếu cả hai đội đều không thắng được một trận nào thì cả hai đều bị loại. Nếu có một tỷ số hòa không bằng 0, một trận đấu ngắt kết nối sẽ được chơi. Nếu một cà vạt vẫn còn cả hai được loại bỏ. Các vòng đấu sau có thể bao gồm nhiều trận đấu hơn. Việc gieo hạt của giải đấu sẽ dựa trên số lượng upvote kể từ ngày 31/7/16 (ngày có thể thay đổi).
Mỗi trận đấu kéo dài 4096 lượt. Một chiến thắng cho một điểm. Một tie hoặc mất cho điểm không. Chúc may mắn!
Hãy xem mã hoặc phê bình nó tại GitHub Repo này.
https://github.com/rjhunjhunwala/BotCTF/blob/master/src/botctf/Arena.java
Lưu ý rằng tôi không có trình thông dịch cho quá nhiều ngôn ngữ trên máy tính của mình và tôi có thể cần tình nguyện viên để chạy mô phỏng trên máy tính của họ. Hoặc tôi có thể tải về trình thông dịch ngôn ngữ. Hãy đảm bảo rằng bot của bạn.
- Trả lời trong một khoảng thời gian hợp lý (giả sử 250 ms)
- Sẽ không làm hỏng máy chủ của tôi