https://en.wikipedia.org/wiki/Losing_chess
Bu temelde Satranç Turnuvasıdır , ancak alçaklık için;)
Antichess, icat edilmiş birçok satranç çeşidinden biridir . Amaç tüm parçalarınızı kaybetmektir (bu biraz garip görünebilir, ancak bir sebepten dolayı antijenlik denir).
Kurallar
Anticess kuralları standart satranca çok benzer - ancak birkaç küçük farkla. Yukarıda bahsettiğim gibi amaç tüm taşlarınızı kaybetmektir. Bunu gerçekleştirmek için rakibinizin taşlarınızdan birini yakalama fırsatı varsa, yapabileceği tek hareket budur. Ona bir turda birden fazla şans verirseniz, diğer oyuncu sırası seçebilir. Değişen bir başka şey de, kralın özel güçleri olmamasıdır - içinde olduğu gibi rakibinizi kontrol edemezsiniz ve onu kontrol etmeye zorlayamazsınız.
Standart oyunda aşağıdaki değişiklikler de geçerli olacaktır (oyunu basitleştirmeye yardımcı olurlar):
- Yolcu yok sayılır.
- Rolling mümkün değil.
- Elli hamle kuralı otomatik olarak (berabere oyun biter anlamında) geçerlidir.
- Piyonlar neye teşvik ettiklerini seçebilecekler.
- Bir oyuncunun taşınması için 2 saniyeden daha uzun sürmesi gerekiyorsa oyunu kaybeder.
- Geçersiz bir hamle geri dönmek oyunu kaybetmenize neden olur.
- Kazanmak için rakiplerinizin tüm taşlarını yakalaması gerekir .
- Beyaz oyuna başlar.
- Beyaz alanın "altına" (y = 0), siyah ise üstüne (y = 7) yerleştirilir.
- Botunuzdan (internet, dosyalar, diğer botlar, ...) başka kaynaklara erişmek yasaktır.
puanlama
- Kazanan size 3 puan, 1 beraberlik ve 0 puan kaybeder.
- Her sunum birbiriyle 10 kez oynar (5 kez beyaz, 5 siyah).
Botunuzu yazma
Denetleyici kodu burada: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
Botunuzu Java veya Groovy ile yazabilirsiniz. Bir bot yazmak için Player
sınıfı genişletmelisiniz . Oyuncu sınıfının bir soyut yöntemi vardır Move getMove(Board board, Player enemy, Set<Move> validMoves)
.
İşte yararlı yöntemler hakkında hızlı bir özet:
Player
:
List<Piece> getPieces(Board board)
: Tahtadaki tüm parçalarınızı iade edin.PieceUpgradeType pieceUpgradeType
: Piyonlarınızdan biri tahtanın sonuna ulaştığında / ulaştığında, bunu yükseltmek istediğiniz parça türüne göre tanımlamanız gerekir. Sen seçimi varROOK
,KNIGHT
,QUEEN
,BISHOP
, veKING
.
Board
:
Field getFieldAtLoc(Location loc)
: Konumuna geri dönünField
. Bu uygun birgetAt
yöntem vardır, böylece groovy kullanıyorsanız yazabilirsinizboard[loc]
.Field getFieldAtLoc(int x, int y)
: Konumuna geri dönünField
. Bu uygun birgetAt
yöntem vardır, böylece groovy kullanıyorsanız yazabilirsinizboard[x, y]
.Board movePiece(Player player, Move move)
: Tahtada nasıl hareket edeceğini görebilmek için bir hamle yap. Yeni kartı döndürür.
Rakiplerinizin parçalarını görmek istiyorsanız, yazın enemy.getPieces(board)
. Botunuzu dizilişe eklemek için şu satırı ekleyin PlayerFactory
:
put(YourBot.class, { new YourBot() } )
Botunuzda hata ayıklama:
Botlarınızın hata ayıklamasına yardımcı olacak birkaç araç ekledim. Oyununuzun canlı oynandığını görmek için Game#DEBUG
bayrağı true olarak ayarlayabilirsiniz . Bunun gibi bir çıktı alırsınız:
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
...
(Beyaz büyük harf, kral ile gösterilir i
)
Konsolunuz utf-8 özel karakterlerini destekliyorsa, tahtayı satranç karakterleriyle aşağıdakileri kullanarak da gösterebilirsiniz Board#USE_UTF8_TO_STRING
:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(tek aralıklı yazı tipiyle daha iyi görünür)
İstenmeyen çıktıların taşmasını önlemek için Main#main
işlevi aşağıdaki gibi bir şeye değiştirmelisiniz :
new Game(new MyBot(), new SacrificeBot()).run()
Beyaz olarak oynamak için botunuzu sola, siyah olarak oynamak için sağa koyun.
Kontrolörün oluşturulması:
Denetleyici harika yazılmıştır, bu nedenle java ve groovy yüklü olmalıdır. Harika yüklemek istemiyorsanız, denetleyiciyle birlikte gelen kepçe oluşturma dosyasını kullanabilirsiniz (bu test edilmemiştir). Groovy veya gradle kullanmak istemiyorsanız en son sürüm kavanozunu kullanabilirsiniz ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/releases ). Bunu yaparsanız, kendi main
yönteminizi yapmanız ve botunuzu manuel olarak oyuncu fabrikasına eklemeniz gerekir. Misal:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(Yine de hata ayıklama bayraklarını ve öğelerini ayarlayabileceğinizi unutmayın)
Herhangi bir hata bulma takdir edilmektedir!
Skorlar:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
Her zaman yeni gönderimler yapmaya hazır olduğumu lütfen unutmayın!