Variants¶
python-chess supports several chess variants.
>>> import chess.variant
>>>
>>> board = chess.variant.GiveawayBoard()
>>> # General information about the variants
>>> type(board).uci_variant
'giveaway'
>>> type(board).starting_fen
'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w - - 0 1'
See chess.Board.is_variant_end()
, is_variant_win()
is_variant_draw()
is_variant_loss()
for special variant end conditions and results.
Variant | Board class | UCI | Syzygy |
---|---|---|---|
Standard | chess.Board |
chess | .rtbw, .rtbz |
Suicide | chess.variant.SuicideBoard |
suicide | .stbw, .stbz |
Giveaway | chess.variant.GiveawayBoard |
giveaway | .gtbw, .gtbz |
Atomic | chess.variant.AtomicBoard |
atomic | .atbw, .atbz |
King of the Hill | chess.variant.KingOfTheHillBoard |
kingofthehill | |
Racing Kings | chess.variant.RacingKingsBoard |
racingkings | |
Horde | chess.variant.HordeBoard |
horde | |
Three-check | chess.variant.ThreeCheckBoard |
3check | |
Crazyhouse | chess.variant.CrazyhouseBoard |
crazyhouse |
-
chess.variant.
find_variant
(name)¶ Looks for a variant board class by variant name.
Chess960¶
Chess960 is orthogonal to all other variants.
>>> chess.Board(chess960=True)
Board('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1', chess960=True)
See chess.BaseBoard.set_chess960_pos()
,
chess960_pos()
, and
from_chess960_pos()
for dealing with Chess960 starting
positions.
UCI¶
Stockfish and other engines allow you to switch variants by setting the
UCI_Variant
option.
>>> import chess.uci
>>> import chess.variant
>>>
>>> engine = chess.uci.popen_engine("stockfish")
>>>
>>> board = chess.variant.RacingKingsBoard()
>>> engine.setoption({
... "UCI_Variant": type(board).uci_variant,
... "UCI_Chess960": board.chess960
... })
>>> engine.position(board)
Syzygy¶
Syzygy tablebases are available for suicide, giveaway and atomic chess.
>>> import chess.syzygy
>>> import chess.variant
>>>
>>> tables = chess.syzygy.open_tablebases("data/syzygy", VariantBoard=chess.variant.AtomicBoard)