Carô hoặc Năm liên tiếp là một trò chơi hội đồng quản trị được chơi bởi hai người chơi trên một lưới với đá màu đen và trắng. Bất cứ ai có thể đặt 5 viên đá liên tiếp (ngang, dọc hoặc chéo) sẽ thắng trò chơi.
Quy tắc
Trong KoTH này, chúng ta sẽ chơi quy tắc Swap2, nghĩa là một trò chơi bao gồm hai giai đoạn: Trong giai đoạn đầu, hai người chơi sẽ xác định ai đi trước / ai chơi đen, sau đó họ sẽ đặt một viên đá mỗi vòng bắt đầu với người chơi ai chọn màu đen.
Giai đoạn đầu
Hãy để người chơi là A & B và A sẽ mở trò chơi:
- Một nơi đặt hai viên đá đen và trắng trên bảng
- B có thể chọn một trong ba động tác sau:
- Người chơi B quyết định chơi màu đen: giai đoạn đầu đã kết thúc
- Người chơi B quyết định đặt một viên đá trắng và chơi trắng: giai đoạn đầu đã kết thúc
- Người chơi B quyết định chơi một viên đá đen và trắng: A được chọn màu
Giai đoạn trò chơi
Mỗi người chơi đặt một viên đá màu của họ lên bảng, bắt đầu bằng người chơi chơi màu đen, điều này diễn ra cho đến khi không còn chỗ trống nào để chơi (trong trường hợp đó là cà vạt) hoặc một người chơi quản lý để chơi viên đá trong một hàng (trong trường hợp người chơi đó thắng).
Một hàng có nghĩa là ngang, dọc hoặc chéo. Một chiến thắng là một chiến thắng - không quan trọng việc người chơi có thể ghi được nhiều hơn một hàng hay không.
Luật chơi của KoTH
- mỗi người chơi đấu với nhau hai lần:
- ban đầu nó sẽ được quyết định ngẫu nhiên ai đi trước
- trong trò chơi tiếp theo, người chơi phải chơi lần cuối đi trước
- một chiến thắng có giá trị 2 điểm, hòa 1 và thua 0
- mục tiêu là ghi càng nhiều điểm càng tốt
Bot của bạn
Để làm cho thách thức này có thể truy cập được cho càng nhiều ngôn ngữ, đầu vào / đầu ra càng tốt sẽ thông qua stdin / stdout (dựa trên dòng). Chương trình thẩm phán sẽ nhắc chương trình của bạn bằng cách in một dòng tới stdin của bot và bot của bạn sẽ in một dòng tới thiết bị xuất chuẩn .
Khi bạn nhận được một EXIT
tin nhắn, bạn sẽ được cung cấp nửa giây để hoàn thành việc ghi vào các tập tin trước khi thẩm phán sẽ giết quá trình.
Ngẫu nhiên
Để làm cho các giải đấu có thể kiểm chứng được, thẩm phán sử dụng ngẫu nhiên hạt giống và bot của bạn cũng phải làm như vậy, vì lý do tương tự. Bot sẽ được cung cấp một hạt giống thông qua đối số dòng lệnh mà nó nên sử dụng, vui lòng tham khảo phần tiếp theo.
Tranh luận
Bot nhận được hai đối số dòng lệnh:
- tên đối thủ
- hạt giống cho sự ngẫu nhiên
Trạng thái người dùng
Bởi vì chương trình của bạn sẽ luôn được bắt đầu mới cho mỗi trò chơi, bạn sẽ cần sử dụng các tệp để duy trì bất kỳ thông tin nào bạn muốn giữ. Bạn được phép đọc / ghi bất kỳ tệp nào hoặc tạo / xóa các thư mục con trong thư mục hiện tại của bạn. Bạn không được phép truy cập bất kỳ tập tin nào trong bất kỳ thư mục gốc nào!
Định dạng đầu vào / đầu ra
BOARD
((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
SP
XY
(X,Y)
|
Trong giai đoạn đầu có ba loại tin nhắn khác nhau:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- Thông điệp đầu tiên yêu cầu ba bộ dữ liệu, hai bộ đầu tiên sẽ là vị trí của những viên đá màu đen và thứ ba là vị trí cho viên màu trắng.
- Tin nhắn thứ hai yêu cầu:
"B"
-> chọn màu đen"W" SP XY
-> chọn màu trắng và đặt một viên đá trắng tạiXY
XY XY
-> đặt hai viên đá (thứ nhất một màu đen và thứ hai màu trắng)
- Người cuối cùng chỉ hỏi màu nào bạn muốn chơi
Sau đó, trò chơi thông thường sẽ bắt đầu và các tin nhắn sẽ trở nên đơn giản hơn nhiều
N BOARD -> XY
N
XY
Có một tin nhắn bổ sung không mong đợi câu trả lời
"EXIT" SP NAME | "EXIT TIE"
nơi NAME
là tên của bot mà won. Thông báo thứ hai sẽ được gửi nếu trò chơi kết thúc do không có ai chiến thắng và không còn chỗ trống để đặt đá (điều này ngụ ý rằng bot của bạn không thể được đặt tên TIE
).
Định dạng
Vì các tin nhắn từ bot có thể được giải mã mà không có bất kỳ khoảng trắng nào, tất cả các khoảng trắng sẽ bị bỏ qua (ví dụ: (0 , 0) (0,12)
được xử lý giống như (0,0)(0,12)
). Các thông báo từ thẩm phán chỉ chứa một SP
khoảng trắng để phân tách các phần khác nhau (ví dụ như đã lưu ý ở trên với ), cho phép bạn phân chia dòng trên các khoảng trắng.
Bất kỳ phản hồi không hợp lệ sẽ dẫn đến mất vòng đó (bạn vẫn sẽ nhận được EXIT
tin nhắn), xem quy tắc.
Thí dụ
Dưới đây là một số ví dụ về tin nhắn thực tế:
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
Thẩm phán
Bạn có thể tìm thấy chương trình thẩm phán ở đây : Để thêm bot vào nó, chỉ cần tạo một thư mục mới trong bots
thư mục, đặt các tệp của bạn ở đó và thêm một tệp meta
chứa tên , lệnh , đối số và cờ 0/1 (vô hiệu hóa / bật stderr ) mỗi trên một dòng riêng biệt.
Để chạy một giải đấu chỉ cần chạy ./gomoku
và gỡ lỗi một lần chạy bot ./gomoku -d BOT
.
Lưu ý: Bạn có thể tìm thêm thông tin về cách thiết lập và sử dụng thẩm phán trong kho lưu trữ Github. Ngoài ra còn có ba bot mẫu ( Haskell , Python và JavaScript ).
Quy tắc
- trên mỗi thay đổi của bot * , giải đấu sẽ được chạy lại và người chơi có nhiều điểm nhất sẽ thắng (tie-breaker là lần gửi đầu tiên)
- bạn có thể gửi nhiều bot miễn là chúng không chơi một chiến lược chung
- bạn không được phép chạm vào các tệp bên ngoài thư mục của mình (ví dụ: thao túng các tệp của người chơi khác)
- nếu bot của bạn gặp sự cố hoặc gửi phản hồi không hợp lệ, trò chơi hiện tại bị chấm dứt và bạn thua vòng đó
- trong khi thẩm phán (hiện tại) không thi hành giới hạn thời gian mỗi vòng, bạn nên giữ thời gian ở mức thấp vì có thể không kiểm tra được tất cả các bài nộp **
- lạm dụng lỗi trong chương trình thẩm phán được coi là kẽ hở
* Bạn được khuyến khích sử dụng Github để gửi riêng bot của bạn trực tiếp trong bots
thư mục (và có khả năng sửa đổi util.sh
)!
** Trong trường hợp nó trở thành vấn đề bạn sẽ được thông báo, tôi sẽ nói bất cứ điều gì dưới 500ms (rất nhiều!) Sẽ ổn ngay bây giờ.
Trò chuyện
Nếu bạn có thắc mắc hoặc muốn nói về KoTH này, vui lòng tham gia Trò chuyện !