将棋UI実装への道 ~実装方針を整理する~

この記事の所要時間は約 5 分 です。

前回までの記事で、「将棋盤の初期配置を実装する」と「駒クリック時のイベントを実装する」において、将棋盤UI実装のスタートラインに立った。

ただ、その後、いくつかのアイデアが浮かんだので、これを忘れないうちにメモしておきたい。方針レベルの話は、コーディングを進める前に変更しておかないと、後からだと手戻りが大きい。

Shogi-Board

MovePiece関数の挙動に関するメモ

次にコーディングするべきは、MovePiece関数だと思っていたので、前回の記事執筆後に仕様をメモっていた。ただ、よくよく考えると、駒をクリックした時に、いきなり駒移動はしないわけで、駒クリック時に呼び出されるべき処理は、その駒の可動域判定だろう。

局面を一次配列で保持するアイデア

ちなみに、盤外かどうかを判定するために、9×9の81マスだけではなく、その周囲の壁も升目と同様にプログラム上は実装しておくべきかもしれない。そして、その壁にあたる升目には、自駒も敵駒も移動できないように、番兵とも言うべきダミーの駒情報を配置しておくのが、実際的なアイデアだ。

番兵データを扱いやすくするために

これは、上記のツイートの通りの内容だ。前述した盤の外側にダミーの升目を実装し、そこには、自駒でも敵駒でもない番兵駒(2進だと”110000″、10進だと”48″)を配置しておく。

自駒であれば、移動先に自駒がいると移動できないわけだが、この判定は、5ビット目が”1″かどうかで判定する。敵駒も、移動先に敵駒がいる場合には移動できず、これは、6ビット目で判定することになる。

というわけで、番兵駒として”48″を配置しておいて、これで判断すると、自駒でも敵駒でもそこには移動できなくなるわけで、可動域を計算するロジックが単純化される。

というわけで、このあたりの実装をしてから、次のステップに進みたい。