https://en.wikipedia.org/wiki/Loses_chess
Về cơ bản, đây là Giải đấu cờ vua , nhưng dành cho antichess;)
Antichess là một trong nhiều biến thể cờ vua đã được phát minh. Mục tiêu là để mất tất cả các mảnh của bạn (điều này có vẻ hơi kỳ lạ, nhưng nó được gọi là antichess vì một lý do).
Những quy định
Các quy tắc của antichess rất giống với cờ tiêu chuẩn - nhưng với một vài khác biệt khá nhỏ. Mục tiêu như tôi đã đề cập ở trên là để mất tất cả các phần của bạn. Để thực hiện điều này, nếu đối thủ của bạn có cơ hội nắm bắt một trong những quân cờ của bạn, đó là động tác duy nhất anh ta có thể thực hiện. Nếu bạn cho anh ta nhiều cơ hội trong một lượt, người chơi khác có thể chọn lượt của mình. Một điều khác được thay đổi là nhà vua không có quyền hạn đặc biệt - vì trong bạn không thể kiểm tra đối thủ của mình và bạn không thể buộc anh ta kiểm tra.
Những thay đổi sau đây đối với trò chơi tiêu chuẩn cũng sẽ được áp dụng (chúng giúp đơn giản hóa trò chơi):
- En passant sẽ bị bỏ qua.
- Castling là không thể.
- Các quy tắc Năm mươi di chuyển gây hiệu ứng tự động (có nghĩa là các trò chơi kết thúc trong một trận hòa).
- Chân sẽ có thể chọn những gì họ quảng bá đến.
- Nếu người chơi cần dài hơn 2 giây để di chuyển, anh ta sẽ thua trò chơi.
- Trả lại một nước đi không hợp lệ sẽ dẫn đến thua trò chơi.
- Để giành chiến thắng, đối thủ của bạn phải nắm bắt tất cả các mảnh của bạn .
- White bắt đầu trò chơi.
- Màu trắng được đặt "ở dưới cùng" của trường (y = 0), màu đen nằm ở trên cùng (y = 7).
- Truy cập các tài nguyên khác ngoài bot của bạn (internet, tệp, bot khác, ...) đều bị cấm.
Chấm điểm
- Chiến thắng giúp bạn có 3 điểm, hòa 1 điểm và mất 0 điểm.
- Mỗi lần gửi sẽ thi đấu với nhau 10 lần (5 lần trắng, 5 lần đen).
Viết bot của bạn
Mã điều khiển có tại đây: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
Bạn có thể viết bot của mình bằng Java hoặc Groovy. Để viết bot bạn phải mở rộng Player
lớp. Lớp người chơi có một phương thức trừu tượng Move getMove(Board board, Player enemy, Set<Move> validMoves)
.
Dưới đây là tóm tắt nhanh về các phương pháp hữu ích:
Player
:
List<Piece> getPieces(Board board)
: Trả lại tất cả các phần của bạn trên bảng.PieceUpgradeType pieceUpgradeType
: Nếu / khi một trong những con tốt của bạn đến cuối bảng, bạn sẽ cần xác định loại này thành loại mảnh bạn muốn nâng cấp lên. Bạn có thể lựa chọnROOK
,KNIGHT
,QUEEN
,BISHOP
, vàKING
.
Board
:
Field getFieldAtLoc(Location loc)
: Trả lạiField
tại vị trí. Điều này có mộtgetAt
phương thức phù hợp để nếu bạn đang sử dụng Groovy, bạn có thể viếtboard[loc]
.Field getFieldAtLoc(int x, int y)
: Trả lạiField
tại vị trí. Điều này có mộtgetAt
phương thức phù hợp để nếu bạn đang sử dụng Groovy, bạn có thể viếtboard[x, y]
.Board movePiece(Player player, Move move)
: Thực hiện di chuyển trên bảng để bạn có thể thấy nó sẽ diễn ra như thế nào. Nó trả về bảng mới.
Nếu bạn muốn xem các mảnh đối thủ của bạn, chỉ cần viết enemy.getPieces(board)
. Để thêm bot của bạn vào đội hình, hãy thêm dòng sau vào PlayerFactory
:
put(YourBot.class, { new YourBot() } )
Gỡ lỗi bot của bạn:
Tôi đã bao gồm một vài công cụ để hỗ trợ gỡ lỗi bot của bạn. Để xem trò chơi của bạn diễn ra trực tiếp, bạn có thể đặt Game#DEBUG
cờ thành đúng. Bạn sẽ nhận được một đầu ra như thế này:
Game started. Players: [OnePlayBot(WHITE), SacrificeBot(BLACK)]
...
BLACKs turn.
validMoves: [Move(Piece(BLACK, PAWN, Loc(0, 6)), Loc(0, 5)), ...]
board:
RKBQIBKR
PPPPPPPP
--------
--------
--------
p-------
-ppppppp
rkbqibkr
captureless turns: 1
chosen move: Move(Piece(BLACK, PAWN, Loc(7, 6)), Loc(7, 4))
Game over? false
==============================
WHITEs turn.
validMoves: [Move(Piece(WHITE, ROOK, Loc(0, 0)), Loc(0, 1)), ...]
board:
RKBQIBKR
PPPPPPP-
--------
-------P
--------
p-------
-ppppppp
rkbqibkr
...
(Màu trắng là chữ hoa, nhà vua được hiển thị với i
)
Nếu bảng điều khiển của bạn hỗ trợ các ký tự đặc biệt utf-8, bạn thậm chí có thể hiển thị bảng với các ký tự cờ bằng cách sử dụng Board#USE_UTF8_TO_STRING
:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(có vẻ tốt hơn với một phông chữ đơn cách)
Để ngăn chặn lũ đầu ra không mong muốn, bạn nên thay đổi Main#main
chức năng thành một cái gì đó như thế này:
new Game(new MyBot(), new SacrificeBot()).run()
Đặt bot của bạn ở bên trái để chơi như màu trắng, đặt nó bên phải để chơi như màu đen.
Xây dựng bộ điều khiển:
Bộ điều khiển được viết bằng Groovy, vì vậy bạn phải cài đặt java và Groovy. Nếu bạn không muốn cài đặt Groovy, bạn có thể sử dụng tệp xây dựng lớp đi kèm với bộ điều khiển (điều này chưa được thử nghiệm). Nếu bạn không muốn sử dụng Groovy hoặc gradle, bạn có thể sử dụng jar phát hành mới nhất ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/release ). Nếu bạn làm điều này, bạn cần tạo main
phương thức của riêng bạn và thêm bot của bạn bằng tay vào nhà máy của người chơi. Thí dụ:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(Lưu ý rằng bạn vẫn có thể đặt cờ gỡ lỗi và nội dung)
Bất kỳ và tất cả các phát hiện lỗi được đánh giá cao!
Điểm số:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
Xin lưu ý rằng tôi luôn sẵn sàng để có bài nộp mới!