将棋・・・データ構造についての構想

 ジャンルはprogrammingでもいいのですが、まだ作成段階じゃないのでeverydayです。
 盤は壁が必要ですが、桂が飛ぶ場合がありますので縦のみ2マスの壁を設けて2次元配列にしたいと思います。桂が2筋や1筋で自動的に成るシステムにすると壁は1マスでいいのですけどね。プログラム将棋業界ではそんなことせずに大人しく壁を2マス設けるのが主流のようですから。
 また盤には縦列には歩が置いてあるかフラグを設けて二歩対策します。後はそれぞれのマスに駒構造体のインデックスを持ってくればいいでしょう。
 将棋の駒は歩・香・桂・銀・金・角・飛・王(玉)+と・成香・成桂・成銀・馬・竜の14種類なので16進数で規定するようにしましょう。敵駒は16を足せば表現できます。成は8を足すことにより表現できます。おそらく処理も軽いですから、これでいいでしょう。
 駒は40枚あるのですが、まず一枚一枚駒の構造体を定義します。さらに長さ40の配列にします。駒の座標はハッシュ値の材料に使いたいと思います。
 オセロとは違い必ず手番が入れ替わるのでパスうんぬんの規定は無しでいいのでそこは楽かもしれません。
 着手可能場所はすべての駒を走査して着手可能リストにまとめて判断する形がわかりやすくていいんじゃないかと思います。このとき着手可能リストは循環リスト形式にして使いまわすとわざわざメモリ確保しなくていいので楽です。
 着手可能リストを作るときに作成する関数はすべて別々のものを使って関数ポインタで飛ばせるといいなぁと思います。できなければまた別の手段を考えたいと思いますけど。手数は変数を一つ確保するので上限があります。まあint型一つで十分過ぎるので問題は無いと思いますけどね。