JavaScript: チェス・将棋、FEN/SFEN データ
FEN / SFEN について
FEN / SFEN はチェスや将棋で使用されるテキストデータです。 盤面の駒の配置などに使用されます。
- FEN: Forsyth-Edwards Notation
チェスの盤面の表記に使用されます。 - SFEN : Shogi FEN
FEN を将棋に応用したものです。
例えば、将棋の初期配置の盤面は下のようなテキストで表現されます。
lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL
/ は盤の行の区切り、数字は駒のない場所の数、 アルファベットは駒の種類を表しています。 数字は例えば 5 なら駒のない場所が横方向に 5個連続していることを表しています。 アルファベットは将棋 (SFEN) の場合、k なら後番 (白) の玉、K なら先番 (黒) の王を表します。
上のテキストデータをデコードすると下のようになります。
◎ 将棋の初期配置の盤面 lnsgkgsnl .r.....b. ppppppppp ......... ......... ......... PPPPPPPPP .B.....R. LNSGKGSNL ・駒のない場所は . で代用しています。
FEN, SFEN の駒の記号
記号 英語 チェスの駒 将棋の駒 意味 ----------------------------------------------------------- K King キング 玉 王 Q Queen クイーン --- 王妃 R Rook ルーク(ルック) 飛車 城,塔 B Bishop ビショップ 角 僧正,坊さん N Knight ナイト 桂馬 騎士 P Pawn ポーン 歩 歩兵 G Gold --- 金 金 (ゴールド) S Silver --- 銀 銀 (シルバー) L Lance --- 香車 長槍 (ランス) ・大文字は先番、小文字は後番を表す。 ・先番、後番 先番 後番 ----------------------- 将棋 黒 白 チェス 白 黒 囲碁・将棋は黒が先番だけど、チェスは白が先番です。
サンプル
- TestJS_FEN01.html
FEN, SFEN の盤面の文字列をデコードするサンプル。
HTML で将棋盤やチェスボードを表現する
囲碁、連珠、オセロでも FEN を扱えると便利かも? (2024/01)
囲碁、連珠、オセロでも FEN のような盤面表示のテキストデータが扱えると便利かも?
囲碁では SGF の AB,AW,AE で石の配置を表現する方法がありますが、 こちらは問題点も多い。
SGF の AB,AW,AE の問題点
・データが冗長で、処理も面倒くさい。 ・重複する座標のデータがあるか?など、データの矛盾のチェックが必要。 例: 同じ座標に AB,AW,AE のデータがあった場合。 AB[cd]AW[cd]AE[cd] データとしては矛盾のある誤りのデータ。 妥当性のチェックでエラーではじくべきデータ。 ・誤ったデータを無理に処理しようとすると? AB, AW, AE をどの順番で処理するかによって盤面の結果が変わる。 AB → AW → AE の順に処理すれば石のない状態になる。 AE → AB → AW の順に処理すれば白石になる。
FEN のような盤面表記のメリット
・データがシンプルなテキストで扱いやすい。 SGF のような複雑なパース処理が不要。 ・データサイズが SGF に比べてコンパクト。 URL の CGI パラメータにも付けやすい。 ・データの妥当性のチェックが簡単になる。 SGF のように座標が重複した誤ったデータなどの問題が起こらない。
2024/012
GameBoard のチェスと将棋で AB,AW,AE などを使わず FEN
の文字列で盤面の駒の配置を設定するように変更しました。
オセロや連珠でもお試しで FEN 文字列が扱えるように工事中です。