https://en.wikipedia.org/wiki/Losing_chess
Ini pada dasarnya Turnamen Catur , tetapi untuk antikisah;)
Antichess adalah salah satu dari banyak varian catur yang telah ditemukan. Tujuannya adalah untuk kehilangan semua kepingan Anda (ini mungkin tampak sedikit aneh, tetapi itu disebut antichess karena suatu alasan).
Aturan
Aturan antichess sangat mirip dengan catur standar - tetapi dengan beberapa perbedaan yang cukup kecil. Tujuan seperti yang saya sebutkan di atas adalah kehilangan semua bagian Anda. Untuk mewujudkan ini, jika lawan Anda memiliki kesempatan untuk menangkap salah satu karya Anda, itu adalah satu-satunya langkah yang dapat ia lakukan. Jika Anda memberinya beberapa peluang sekaligus, pemain lain dapat memilih gilirannya. Hal lain yang diubah adalah bahwa raja tidak memiliki kekuatan khusus - karena Anda tidak dapat melakukan skakmat lawan, dan Anda tidak bisa memaksanya untuk memeriksanya.
Perubahan berikut pada game standar juga akan berlaku (mereka membantu menyederhanakan game):
- Orang yang lewat akan diabaikan.
- Castling tidak mungkin.
- Aturan Fifty-move berlaku secara otomatis (artinya permainan berakhir imbang).
- Pion akan dapat memilih apa yang mereka promosikan.
- Jika seorang pemain membutuhkan lebih dari 2 detik untuk bergerak, ia akan kehilangan permainan.
- Mengembalikan langkah yang tidak valid akan menghasilkan kekalahan dalam permainan.
- Untuk menang, lawan Anda harus menangkap semua bagian Anda .
- Putih memulai permainan.
- Putih ditempatkan "di bagian bawah" bidang (y = 0), hitam terletak di bagian atas (y = 7).
- Mengakses sumber daya selain bot Anda (internet, file, bot lain, ...) dilarang.
Mencetak gol
- Menang memberi Anda 3 poin, satu imbang 1 poin dan kehilangan 0 poin.
- Setiap kiriman akan bermain melawan kiriman lainnya 10 kali (5 kali putih, 5 sebagai hitam).
Menulis bot Anda
Kode pengontrol ada di sini: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
Anda dapat menulis bot Anda dalam Java atau Groovy. Untuk menulis bot, Anda harus memperluas Player
kelas. Kelas pemain memiliki satu metode abstrak Move getMove(Board board, Player enemy, Set<Move> validMoves)
.
Berikut ini adalah ikhtisar cepat tentang metode yang berguna:
Player
:
List<Piece> getPieces(Board board)
: Kembalikan semua bagian Anda yang ada di papan tulis.PieceUpgradeType pieceUpgradeType
: Jika / ketika salah satu pion Anda mencapai ujung papan, Anda harus menentukan ini untuk jenis karya yang ingin Anda tingkatkan ke. Anda memiliki pilihanROOK
,KNIGHT
,QUEEN
,BISHOP
, danKING
.
Board
:
Field getFieldAtLoc(Location loc)
: KembalikanField
di lokasi. Ini memilikigetAt
metode yang cocok sehingga jika Anda menggunakan asyik Anda dapat menulisboard[loc]
.Field getFieldAtLoc(int x, int y)
: KembalikanField
di lokasi. Ini memilikigetAt
metode yang cocok sehingga jika Anda menggunakan asyik Anda dapat menulisboard[x, y]
.Board movePiece(Player player, Move move)
: Bergeraklah di papan sehingga Anda dapat melihat bagaimana hasilnya. Ini mengembalikan papan baru.
Jika Anda ingin melihat karya lawan, tulis saja enemy.getPieces(board)
. Untuk menambahkan bot Anda ke barisan, tambahkan baris berikut ke PlayerFactory
:
put(YourBot.class, { new YourBot() } )
Debugging bot Anda:
Saya telah menyertakan beberapa alat untuk membantu men-debug bot Anda. Untuk melihat permainan Anda dimainkan secara langsung, Anda dapat mengatur Game#DEBUG
bendera menjadi true. Anda akan mendapatkan hasil seperti ini:
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
...
(Putih adalah huruf besar, raja ditunjukkan dengan i
)
Jika konsol Anda mendukung karakter khusus utf-8, Anda bahkan dapat menunjukkan papan dengan karakter catur dengan menggunakan Board#USE_UTF8_TO_STRING
:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(terlihat lebih baik dengan font mono spaced)
Untuk mencegah membanjirnya output yang tidak diinginkan, Anda harus mengubah Main#main
fungsinya menjadi seperti ini:
new Game(new MyBot(), new SacrificeBot()).run()
Letakkan bot Anda di sebelah kiri untuk bermain sebagai putih, letakkan di sebelah kanan untuk bermain sebagai hitam.
Membangun pengontrol:
Pengontrol ditulis dalam groovy, jadi Anda harus menginstal java dan groovy. Jika Anda tidak ingin menginstal groovy, Anda dapat menggunakan file gradle build yang disertakan dengan controller (ini belum diuji). Jika Anda tidak ingin menggunakan groovy atau gradle, Anda dapat menggunakan tabung rilis terbaru ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/releases ). Jika Anda melakukan ini, Anda perlu membuat main
metode Anda sendiri dan menambahkan bot Anda secara manual ke pabrik pemain. Contoh:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(Perhatikan bahwa Anda masih dapat mengatur flag debug dan lainnya)
Setiap dan semua penemuan bug sangat dihargai!
Skor:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
Harap dicatat bahwa saya selalu bersedia menerima kiriman baru!