駒の効き管理
2011-11-17 11:29:15
「ルール通りに将棋を指すプログラム」を 2011年11月15日までに作るのが目標でしたが、本稿を執筆している 11月17日の午前9時半の時点で、まだ完成していません。
「将棋GUIソフト側から送られてくる指定局面情報を、思考エンジン側の将棋盤と駒のデータ領域に反映する処理」の方は作成済ですが、手の生成やルールのチェック処理が途中です。
手の生成については、既にに若干のコーディングを行なったのですが、気になる問題があり、コード入力を保留しています。
気になる問題とは、王手がかかっている状態で、王手を解消しない手も生成していることです。
手を仮生成した後で「王手の状態かを調べる」ようにすれば、ルール通りの手だけを生成することは出来ます。
でも、手の生成を高速に行うためには、王手がかかっているかどうかを最初に確認するのが良いと考えています。
王手の場合、以下の 4通りに絞って、手を生成できます。
- 王手をかけている駒を取る。
- 敵の駒の効きのない場所に王将を移動する。
- 合駒を打つ。
- 盤上の駒を動かして合駒する。
王手チェックを高速に行うため、「駒の効き情報」を管理することにしました。
基本的には、将棋盤の各マス目への効きの数を保持するだけなのですが、飛車、角行、香車の飛び効きを考慮する必要があります。
駒の効き管理については、あと数日、考えてみるつもりです。