マケドニア将棋
2011.12.20 12:01
今日(2011年12月20日)の午前10時頃、岩明均(いわあき ひとし)氏(以下、敬称略)の漫画「ヒストリエ」第7巻をネットで注文しました。
第7巻には限定版があり、主人公が考案したという設定のゲーム「マケドニア将棋」の駒や盤が同梱されています。
マケドニア将棋は、岩明均が将棋やチェスなどを参考にして考案したものだそうで、盤は縦横8マスずつ。
駒の種類は、「王、王子、将軍、騎兵、弓矢兵、重歩(重装歩兵)、歩兵」。
ただし、弓矢兵は弓兵駒と矢駒を組み合わせて使い、対戦開始時は弓兵駒に 2つの矢駒を載せた状態です。
ゲームは、王冠を持った駒を取られたら負けです。
対戦開始時、王駒の上に王冠駒が載っています。
対戦中、王は王冠を一度だけ王子に渡す(譲位)ことができ、王子は王冠を一度だけ王に返還できます。
「ヒストリエ」第7巻が先月に発売されてまもなく、私は「マケドニア将棋」同梱の限定版の存在を知り、すぐに注文するつもりだったのですが、11月30日以降は体調不良が続いていて、本を注文する余裕がありませんでした。
そして、昨日の時点で、アマゾン、楽天ブックス、bk1、紀伊国屋では品切れ。
結局、livedoor BOOKSで注文しましたが、「発送可能期間」が 2~5日とのことなので、「livedoorブックス側が現物を確保できなくて注文キャンセルになるかもしれない」と思っています。
王手将棋
2011.11.30 23:33
自作のコンピュータ将棋のプログラムについては、最初の一手を指すことに成功した後、テストとソースプログラムの修正を繰り返し、今日(2011年11月30日)の昼頃には、なんとか見かけ上は「王手将棋」として動作できるようになりました。
王手に対応する処理を実装してないので、王手がかかると反則負けしてしまいます。
王手がかかっていることの判定は出来るようにしてあるので、王手に対して「投了」するようにすれば、「王手将棋」の出来上がり。
と言いたいところですが、王手を回避する努力を全くしてないプログラムなので、「王手将棋」の相手として利用するには物足りません。
ここまで来れば、「ルール通りに将棋を指すプログラム」が出来るまで、あと一歩です。
今後、王手に対応する処理の実装を最優先に作業することにします。
将棋を一手指すことに成功 2011/11/27
2011.11.27 21:58
2011年11月27日の夜の 8時過ぎ、自作中のコンピュータ将棋プログラムで一手指すことに成功しました。
最初の実行ファイルを作成したのは 11月23日のことですが、将棋で一手指すことが出来るようになるまでに意外に多くの日数がかかってしまいました。
ちなみに、思考処理は未実装で、現在は無条件に最後に生成した手を選択しています。
しかも、「一手指した後に盤面のデータを更新する処理」を作ってないため、一手目と同じ手を指そうとして反則負けしてしまいます。
指し手の生成関係で未実装の部分は、以下の通りです。
- 王手がかかっている場合の処理
- 飛び駒の効きで動きが制限される駒の処理
- 打ち歩詰めのチェック処理
- 駒の効きの部分更新処理
上記のうち、「飛び駒の効きで動きが制限される駒の処理」については、既に一度コードを書いたのですが、この数日でデータ構造を大きく変更したため、書き直す必要があります。
駒の効きの部分更新については、「ルール通りに将棋を指すだけのプログラム」を作ることを考えるなら、作成不要です。
ただ、当面の優先度は低いですが、高速化のためには避けて通れない問題です。
とりあえず、目先は未実装の処理のうち、最初の 3点について作業するつもりです。
将棋プログラムをコンパイル 2011/11/23
2011.11.23 22:48
自作の将棋プログラムはソースコード入力の途中ですが、「手の生成処理」の作成が一段落したこともあり、今日(2011年11月23日)の 20時過ぎ、試しにコンパイルしてみました。
駒の効き管理のための処理を後から急ぎで作ったので、コンパイルエラーの嵐になると覚悟していましたが、思っていたよりもエラーは少なく、1時間ほどの作業で実行ファイルを作成できました。
現時点で、「盤上の駒を動かす手」の生成処理の大部分を作成済です。
手の生成を行う時点で、王将の位置や駒の効き情報を取得済なので、王手がかかった状態かどうかは分かるようになっています。
ただし、自玉に王手がかかっている場合の指し手生成のコードは未作成です。
また、「駒を動かすことによって自玉に王手がかかる」パターンへの対策も未着手。
これらの問題を解決後、「持ち駒を打つ手」のコードを追加すれば、ルール通りに将棋を指せるようになるはずです。
今月中には「ルール通りに将棋を指すだけのプログラム」を作成したいものです。
駒の効き管理
2011.11.17 11:29
「ルール通りに将棋を指すプログラム」を 2011年11月15日までに作るのが目標でしたが、本稿を執筆している 11月17日の午前9時半の時点で、まだ完成していません。
「将棋GUIソフト側から送られてくる指定局面情報を、思考エンジン側の将棋盤と駒のデータ領域に反映する処理」の方は作成済ですが、手の生成やルールのチェック処理が途中です。
手の生成については、既にに若干のコーディングを行なったのですが、気になる問題があり、コード入力を保留しています。
気になる問題とは、王手がかかっている状態で、王手を解消しない手も生成していることです。
手を仮生成した後で「王手の状態かを調べる」ようにすれば、ルール通りの手だけを生成することは出来ます。
でも、手の生成を高速に行うためには、王手がかかっているかどうかを最初に確認するのが良いと考えています。
王手の場合、以下の 4通りに絞って、手を生成できます。
- 王手をかけている駒を取る。
- 敵の駒の効きのない場所に王将を移動する。
- 合駒を打つ。
- 盤上の駒を動かして合駒する。
王手チェックを高速に行うため、「駒の効き情報」を管理することにしました。
基本的には、将棋盤の各マス目への効きの数を保持するだけなのですが、飛車、角行、香車の飛び効きを考慮する必要があります。
駒の効き管理については、あと数日、考えてみるつもりです。