gorogoronyan FC2

JavaScript: チェス・将棋、FEN/SFEN データ

FEN / SFEN について

FEN / SFEN はチェスや将棋で使用されるテキストデータです。 盤面の駒の配置などに使用されます。

例えば、将棋の初期配置の盤面は下のようなテキストで表現されます。

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   ---             香車      長槍 (ランス)

・大文字は先番、小文字は後番を表す。
・先番、後番

          先番  後番
-----------------------
  将棋    黒    白
  チェス  白    黒

  囲碁・将棋は黒が先番だけど、チェスは白が先番です。

サンプル

囲碁、連珠、オセロでも 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 文字列が扱えるように工事中です。

関連

inserted by FC2 system