とある将棋盤アプリのために考案した「プレーンテキストベースの簡素かつ高可読性の局面フォーマット」を軽く紹介します。
先行事例
将棋の棋譜や局面を表すデータフォーマットは既に多く存在します。
「BOD」フォーマット
後手の持駒:なし
9 8 7 6 5 4 3 2 1
+---------------------------+
|v香v桂v銀v金v玉v金v銀v桂v香|一
| ・v飛 ・ ・ ・ ・ ・v角 ・|二
|v歩v歩v歩v歩v歩v歩v歩v歩v歩|三
| ・ ・ ・ ・ ・ ・ ・ ・ ・|四
| ・ ・ ・ ・ ・ ・ ・ ・ ・|五
| ・ ・ ・ ・ ・ ・ ・ ・ ・|六
| 歩 歩 歩 歩 歩 歩 歩 歩 歩|七
| ・ 角 ・ ・ ・ ・ ・ 飛 ・|八
| 香 桂 銀 金 玉 金 銀 桂 香|九
+---------------------------+
先手の持駒:なし
手数=0 まで
私自身は将棋関連のデータフォーマットについて詳しくありません。
いくつかのWeb上の記事を読む限り、BODというフォーマットが可読性が高くて良い感じですね。
しかし、対面側の駒を「v」を含む2文字で表現したり、空白マスを「・」等で表現していたりと、私がイメージする「プレーンテキストベースの簡素かつ高可読性の局面フォーマット」としては伸び代がありそうです。
理想
対面の駒を上下反転させる事が出来れば「プレーンテキストベースの簡素かつ高可読性の局面フォーマット」としては理想です。
英字に限ればプレーンテキストでの上下反転(させたように見せる)表現の有名なテクニックがあります。
I have a pen.
↓
.uǝd ɐ ǝʌɐɥ I
しかし残念ながら将棋の「歩」や「金」といった駒の字をプレーンテキストで上下反転させる事(や上下反転させたように見せる事)は難しそうです。
提案
というわけで妥協案として「結合文字」を活用して対面の駒に目印を付けました。
☗
---------
香͙桂͙銀͙金͙玉͙金͙銀͙桂͙香͙
飛͙ 角͙
歩͙歩͙歩͙歩͙歩͙歩͙歩͙歩͙歩͙
歩歩歩歩歩歩歩歩歩
角 飛
香桂銀金王金銀桂香
---------
☖
☗
---------
香͙桂͙銀͙金͙玉͙金͙銀͙桂͙香͙
飛͙ 馬
歩͙歩͙歩͙歩͙歩͙歩͙ 歩͙歩͙
歩͙
歩
歩歩 歩歩歩歩歩歩
飛
香桂銀金王金銀桂香
---------
☖角
☗歩͙4銀͙
---------
香͙ 桂͙香͙
飛͙金͙
歩͙玉͙ 歩͙馬 金͙ 歩͙
銀͙歩͙ 全歩歩͙歩͙
歩角
歩 桂͙歩͙杏͙ 歩
歩金 王銀
金 飛͙
香桂桂
---------
☖歩2
結合文字(けつごうもじ、英語: combining character)とは、文字コードにおいて先行する文字と組み合わせるための図形文字をいう
結合文字を活用することで1字の横幅が変化しない形で「手前の駒」と「対面の駒」を見分けられるようになります。
このフォーマットのポイントは主に5つあります。
- 全ての駒やマスを全角文字の横幅で表す
- 横幅が変化しないタイプの結合文字を対面の駒に組み合わせる(今回は「COMBINING ASTERISK BELOW(U+0359)」)
- 盤面上の空白マスには全角スペースを配置する
- 盤と手駒の間には全角の区切り文字を配置する(今回は「-」)
- 手駒を載せる行には先頭に目立つ文字を配置する(今回は「☗」と「☖」)
このフォーマットを拙作の将棋盤アプリに採用しました。アプリ上の盤面をテキストとしてこのフォーマットで書き出したり、以前書き出したテキストを読み込んでアプリの盤面として復元したり出来ます。
Apple「メモ」アプリやLINE、X等でも概ね綺麗に表示されます。
プレーンテキストなのでテキストファイルとして保存したり、テキストエディタ上で局面を簡単に編集したり出来ます。
「簡素な構成」で「可読性が高い」「プレーンテキスト」の局面フォーマット。
いかかでしょうか。
余談
求職中です。興味ある方は連絡ください。