Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

InitialPosition クラス

rsshogi.initial_positions.InitialPosition

将棋の初期局面(平手・駒落ち)の SFEN 文字列を定数として提供する列挙型です。

from rsshogi.initial_positions import InitialPosition

概要

InitialPosition は、よく使用される初期局面の SFEN 文字列を定数として提供します。 Board のコンストラクタに渡すことで、各種初期局面を簡単に設定できます。

定数一覧

平手

定数説明
STANDARD平手(標準の初期局面)
EMPTY空の盤面

駒落ち

定数説明
HANDICAP_LANCE香落ち
HANDICAP_RIGHT_LANCE右香落ち
HANDICAP_BISHOP角落ち
HANDICAP_ROOK飛車落ち
HANDICAP_ROOK_LANCE飛香落ち
HANDICAP_2_PIECES二枚落ち(飛車・角)
HANDICAP_3_PIECES三枚落ち(飛角香)
HANDICAP_4_PIECES四枚落ち(飛角香香)
HANDICAP_5_PIECES五枚落ち(飛角香香桂)
HANDICAP_LEFT_5_PIECES左五枚落ち(飛角香香右桂)
HANDICAP_6_PIECES六枚落ち(飛角香香桂桂)
HANDICAP_8_PIECES八枚落ち(飛角香香桂桂銀銀)
HANDICAP_10_PIECES十枚落ち(飛角香香桂桂銀銀金金)

基本的な使い方

from rsshogi.core import Board
from rsshogi.initial_positions import InitialPosition

# 平手
board = Board()
# または
board = Board(sfen=InitialPosition.STANDARD.value)

# 二枚落ち
board = Board(sfen=InitialPosition.HANDICAP_2_PIECES.value)
print(board.to_sfen())
# => "lnsgkgsnl/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"

# 六枚落ち
board = Board(sfen=InitialPosition.HANDICAP_6_PIECES.value)

使用例

駒落ち対局のシミュレーション

from rsshogi.core import Board
from rsshogi.initial_positions import InitialPosition

# 二枚落ちの局面を作成
board = Board(sfen=InitialPosition.HANDICAP_2_PIECES.value)

# 上手(後手)の手番から始まる
print(board.turn)  # => "white"

# 合法手を確認
for move in board.legal_moves()[:5]:
    print(move.to_usi())

各駒落ちの局面を表示

from rsshogi.core import Board
from rsshogi.initial_positions import InitialPosition

handicaps = [
    ("香落ち", InitialPosition.HANDICAP_LANCE),
    ("角落ち", InitialPosition.HANDICAP_BISHOP),
    ("飛車落ち", InitialPosition.HANDICAP_ROOK),
    ("二枚落ち", InitialPosition.HANDICAP_2_PIECES),
    ("三枚落ち", InitialPosition.HANDICAP_3_PIECES),
    ("四枚落ち", InitialPosition.HANDICAP_4_PIECES),
    ("五枚落ち", InitialPosition.HANDICAP_5_PIECES),
    ("左五枚落ち", InitialPosition.HANDICAP_LEFT_5_PIECES),
    ("六枚落ち", InitialPosition.HANDICAP_6_PIECES),
]

for name, pos in handicaps:
    board = Board(sfen=pos.value)
    print(f"{name}: {board.to_sfen()}")

SFEN 文字列の取得

from rsshogi.initial_positions import InitialPosition

# .value で SFEN 文字列を取得
sfen = InitialPosition.HANDICAP_2_PIECES.value
print(sfen)
# => "lnsgkgsnl/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"

手合割名と SFEN の相互変換

rsshogi.initial_positions には、手合割名と SFEN を相互変換する ヘルパーも用意されています。

from rsshogi.initial_positions import (
    HANDICAP_TO_SFEN,
    SFEN_TO_HANDICAP,
    handicap_to_sfen,
    sfen_to_handicap,
)

sfen = handicap_to_sfen("三枚落ち")
name = sfen_to_handicap(sfen)

print(sfen == HANDICAP_TO_SFEN["三枚落ち"])  # => True
print(name == SFEN_TO_HANDICAP[sfen])         # => True

関連項目