将棋のコマの動きをデータにしてみた

「自分の得意な形に逃げない」ということを心がけている。
- 羽生善治 -

将棋の盤は、9✕9=81個のマスで構成されています。将棋のコマは8種類あり、うち6種類は裏返して別の動きができるようになります。

今回はそんな将棋のコマの動きをTableauで可視化してみました。

では、将棋の動き方は可視化するには、どのようなデータを準備しなければならないのでしょうか。シンプルに考えると、14種類のコマごとに81マスのうち動ける範囲にフラグを立てれば良いので、14✕81=1134行のデータを作成すれば良さそうです。

しかし1134行のデータをイチから作成するのは手間がかかりそうです。なので今回はマスの縦と横でデータを分け、それを結合させることで簡易化してデータを作成しました。

<縦のデータ>
Key縦駒表浦駒Keyフラグ
key歩兵1歩兵表歩0
key歩兵2歩兵表歩0
key歩兵3歩兵表歩0
key歩兵4歩兵表歩1
key歩兵5歩兵表歩1
key歩兵6歩兵表歩0
key歩兵7歩兵表歩0
key歩兵8歩兵表歩0
key歩兵9歩兵表歩0

<横のデータ>
Key横駒表浦駒Keyフラグ
key歩兵1歩兵表歩0
key歩兵2歩兵表歩0
key歩兵3歩兵表歩0
key歩兵4歩兵表歩0
key歩兵5歩兵表歩1
key歩兵6歩兵表歩0
key歩兵7歩兵表歩0
key歩兵8歩兵表歩0
key歩兵9歩兵表歩0

<Key列をKeyにしてテーブルを結合>
図2


将棋のコマの動きを可視化してみた

マークを四角にし、列に縦、行に横を入れるとこんな感じになりました。
図3

あとは五5を起点としたときに動ける範囲の色を変えればコマの動きを可視化することができます。

しかし、ここで問題が発生……!縦と横それぞれでフラグを立てれば良いと思っていたのですが、斜めを考慮できていませんでした。例えば、斜めの位置すべてに移動できる角で可動範囲を可視化すると以下のようになってしまいました。

図4

データを準備するのは簡単になった一方で、こんな落とし穴があるとは……!なので今回は以下のような条件式をかくことで、対象外のコマを色塗り対象から外しました。

IF [駒]="桂馬" AND [縦]=5 AND [横]<>5 THEN false
ELSEIF [駒]="桂馬" AND [縦]<>5 AND [横]=5 THEN false

ELSEIF [駒]="銀将" AND [縦]=5 AND [横]<>5 THEN false
ELSEIF [駒]="銀将" AND [縦]=6 AND [横]=5 THEN false

ELSEIF ([駒]="金将" OR [駒]="成香" OR [駒]="成桂" OR [駒]="と金" OR [駒]="成銀")
    AND [縦]=6 AND [横]<>5 THEN false

ELSEIF [駒]="角行" AND [縦]<>[横] THEN false

ELSEIF [駒]="飛車" AND [縦]<>5 and [横]<>5 THEN false

ELSEIF [駒]="龍馬" AND 3<[縦] AND [縦]<7 AND 3<[横] AND [横]<7 THEN true
ELSEIF [駒]="龍馬" AND [縦]<>[横] THEN false

ELSEIF [駒]="龍王" AND 3<[縦] AND [縦]<7 AND 3<[横] AND [横]<7 THEN true
ELSEIF [駒]="龍王" AND [縦]<>5 and [横]<>5 THEN false

ELSE
[フラグ]+[フラグ (縦)]>1
END

図5

あとはダッシュボード上で、このシートと、コマを表示するシートを重ねて表示させることで以下のような表現ができました。コマを表示するシートは「浮動」にすることで上に重ねることができます。

図6


まとめ

今回は将棋のコマの動き方をTableauで可視化してみました。データの作り方は難しいですね。

Tableau Public:https://public.tableau.com/views/DoyouknowJapaneseShogi/DoyouknowJapaneseShogi?:display_count=y&:origin=viz_share_link