「サルかも将棋」 その12 盤面のデータ構造 初級編 ②

昨日からの続きです...

KY KE GI KI OH KI GI KE KY
.. HI .. .. .. .. .. KA ..
FU FU FU FU FU FU FU FU FU
.. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. ..
.. .. .. .. .. .. .. .. ..
FU FU FU FU FU FU FU FU FU
.. KA .. .. .. .. .. HI ..
KY KE GI KI OH KI GI KE KY

...上記のデータ構造は、実際の盤面を模した構造のため人間にとって比較的「解り易い」のですが、人間にとっての便利はスピードが最重視されるソフト書きの都合とは必ずしも合致しないわけでして...

例として「合法手生成」の実際を紹介します。

このデータ構造を使用して合法手生成をするには...

1.駒の種類を確認して
2.どちらの方向に動けるかを参照
3.駒を各方向へ動かすのですが...

   盤からはみ出すのは違反
   味方の駒は取れない
   歩・桂・香の場合、行き先の無い場所には進めない・打てない
   飛・角は駒を飛び越えて進まない
   成り・不成の判断
   二歩は反則
   打ち歩詰めは違反(*)
   自玉に王手が生じる手は違反(*)

   ...をチッェク

...と中々面倒です。

(*)この二つは検索中にチッェクして違反手を撥ねる方法もあります。この方が速いので。

特に面倒(...と言うか、美しくない)なのが「盤からはみ出すのは違反」のチッェクです。指数が配列の範囲に収まるかどうか駒の到達点を計算してからチッェクするので手間掛かりすぎです。

当然この方法での合法手生成は遅めとなります。

投稿者: webMaster 投稿日時: 木, 08/25/2011 - 06:38 categories [ ]