雑記
「将棋ゲームPC」の雑記です。将棋やゲーム、パソコンやインターネット関連で筆者の興味のある話題や、本サイトの更新記録などについて書く予定です。
マケドニア将棋
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通りに絞って、手を生成できます。
- 王手をかけている駒を取る。
- 敵の駒の効きのない場所に王将を移動する。
- 合駒を打つ。
- 盤上の駒を動かして合駒する。
王手チェックを高速に行うため、「駒の効き情報」を管理することにしました。
基本的には、将棋盤の各マス目への効きの数を保持するだけなのですが、飛車、角行、香車の飛び効きを考慮する必要があります。
駒の効き管理については、あと数日、考えてみるつもりです。
駒管理のデータ構造
2011.11.13 00:09
2011年11月12日の昼間、自作中のコンピュータ将棋のプログラムで、将棋の合法的な手を生成する処理のコーディング作業を行ないました。
駒を管理するためのデータ構造については、駒に番号を付けないことにしました。
駒の種別毎に盤上の駒の位置を管理する配列を持つ方針です。
前日(11月11日)の時点では、「将棋GUIソフト側から送られてくる指定局面情報を、思考エンジン側の将棋盤と駒のデータ領域に反映する処理」を先にコーディングするつもりでしたが、その作業は後回しにしています。
手の生成やルールのチェックのコーディングは根気が必要そうな作業ですが、多分、なんとかなるでしょう。
USI入出力部分をコーディング中 2011/11/11
2011.11.11 23:34
今日(2011年11月11日)の昼間は、コンピュータ将棋プログラムの開発作業に数時間を割きました。
将棋盤のデータは 81バイト長の 1次元配列で定義することに決め、駒のデータ構造も決めましたが、まだ決まっていない部分があります。
未決定部分は保留することにして、この日は主に、USIプロトコルでのデータ入出力部分のコーディングを行ないました。
USIプロトコルの ponder(先読み思考)対応を当面は行なわないことにしたので、行うべき作業量は減っているはずですが、思っていたよりも入出力部分の実装に苦労しています。
入出力部分で残っている作業は、将棋GUIソフト側から送られてくる指定局面情報を、思考エンジン側の将棋盤と駒のデータ領域に反映する処理のコーディングです。
その作業は多分、明日には終わると思います。
その後、将棋の指し手を選択する処理の作成に取り組む予定です。
とりあえず、将棋の合法的な「手」を生成し、その中からランダムに指し手を選択するプログラムを作ってみます。
将棋プログラムの開発状況 2011/11/08
2011.11.08 17:03
自作中のコンピュータ将棋プログラムについて、2011年11月8日の 17時過ぎの時点での開発状況は、以下のとおりです。
今月前半のうちにルール通りに将棋を指すプログラムを作るのが目標ですが、目標達成は微妙な情勢。
将棋盤と駒のデータ構造が決まれば、あとは基本的に単純作業レベル。
1日に 2時間の作業で 1週間あれば楽勝と思ってますが、現在、駒を管理するデータ構造が決まっていません。
40枚の駒に 1枚ずつ番号を付ける方式にするか、番号を付けずに管理するか、迷っています。
今日の昼間は、データ構造の決定は後回しにして、駒の行き先(8方向)の定義情報関連のコードを入力してました。
当面、データ構造を決めなくても作業できる部分を先に作りますが、決定を先送りし続けるわけにはいきません。
今夜のうちに方針を決めなくては。
本を整理 2011/11/06
2011.11.06 11:18
今日(2011年11月6日)の午前10時頃から 1時間ほど、プログラミング関係の本を整理しました。
プログラミング関係の技術解説書を手放すのは気が進まないのですが、保管スペースに余裕がないので仕方ありません。
ゲームプログラミング関係の本や古典的名著は残しますが、他は基本的に処分の方針。
処分予定のプログラミング本やコンピュータ関係の本について、書名と著者名を以下にメモしておきます。
| 書名 | 著者名 |
|---|---|
| Motif 1.2パワープログラミング | Eric F. Johnson Kevin Reichard |
| できるホームページスタイルシート入門 | 佐藤 和人 |
| UNIXシステム管理入門 | Evi Nemeth Scott Seebass Garth Snyder |
| OpenGL プログラミング・ガイドブック | 相川 恭寛 |
| Windows95 システムプログラミング | Matt Pietrek |
| 3D グラフィックスプログラミング for Windows95 | Nigel Thompson |
その他、Win 3.1の頃の『Microsoft Windows 機能ガイド』や Win SDK『プログラマーズ リファレンス Vol.4』も処分予定。
それにしても、どこにしまいこんだのか、『プログラミング言語C』が見つかりません。
買い直そうかと思う、今日この頃。
USIプロトコル対応
2011.11.06 00:29
2011年11月5日、自作中のコンピュータ将棋のプログラムを USIプロトコル対応させるための調査を行ない、USI対応の処理の概要を、ソースファイルにコメントとして入力しました。
盤や駒のデータ構造を決めれば、ルール通りに将棋を指すだけのプログラムはすぐに作れそうです。
今月前半のうちに、USIプロトコル対応の将棋GUIソフトを利用して対局できる思考エンジンを作ってみようと思います。
その後、局面や指し手の評価処理、詰め将棋処理など、思考部を強くするための処理を少しずつ追加していくことになります。
来年3月くらいまでにアマ初段レベルの強さにするのが目標です。
PCの処理速度が数年前より格段に上がっているので、達成可能な目標ではないかと思っているのですが、甘いか?
Bonanzaの USI対応化
2011.11.04 11:08
2011年11月4日の午前10時過ぎ、将棋プログラム「Bonanza」のソースコードに USI対応の修正を施し、実行ファイルを生成してみました。
USI対応の方法については、将棋GUIソフト「マイボナ」や「プチ将棋」の作者さんのサイトである 将棋ソフトのページで「BonanzaソースコードのUSI対応化」という記事が公開されており、その情報を参照して作業しました。
修正が必要なファイルは 5個で、そのうち下記の 4ファイルについては、テキストエディタで修正しました。
- Makefile
- main.c
- utility.c
- searchr.c
ファイル「proce.c」への修正は大規模でしたが、ありがたいことに上述のサイトで修正を施したファイルが公開されていました。
ダウンロードして、そのまま利用しました。
USI対応化の作業が終わり、さっそく、ビルドを実行。
すると、意外にもコンパイルエラーが発生しました!
調べてみたところ、ファイル「root.c」の最後の部分にある関数「is_move_ignore()」の戻り値の記述が、プロトタイプ宣言と異なっていました。
その 1箇所を修正してビルドし直したところ、無事に実行ファイルが生成されました。
実行ファイルの動作確認として、GUIソフト「将棋所」に USI対応のボナンザをエンジン登録し、将棋所に付属の思考エンジン「Lesserkai」と対戦させてみました。
特に問題なく対局でき、ボナンザが圧勝してました。
Bonanzaの実行ファイル生成
2011.11.02 10:44
将棋ソフト「Bonanza」を研究したり、改造実験してみるため、Bonanzaのコンパイル環境を整備してみることにしました。
2011年11月2日の午前9時過ぎ、「Microsoft Visual C++ 2010 Express Edition」で、Win32コンソールアプリとして新規プロジェクトを作成。
そのプロジェクトに現時点での最新版「Bonanza v6.0」のソースコードを追加しました。
VCの統合開発環境からビルドできるように設定しようかとも考えましたが、ソースには VC用の makefileも同梱されており、makefileを利用してビルドすることにしました。
とりあえず、下記 2行の内容のバッチファイルを、ボナンザのソースファイルのあるディレクトリに作成。
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 nmake -f Makefile.vs cl
作成したバッチファイルをエクスプローラからダブルクリックで実行したところ、若干の警告メッセージが出たものの、無事、実行ファイルが生成されました。
実行ファイルの動作確認として、GUIソフトからボナンザ同士を対戦させてみましたが、特に問題ありませんでした。
将棋ソフトのソースコード調査 2011/11/01
2011.11.01 23:40
2011年11月1日の午後、GUIソフトと思考エンジンの間のデータのやり取りの処理について学ぶため、既存の将棋やチェスのプログラムのソースコードを調査しました。
私がやりたいことは、思考エンジンが思考中でも GUIからの指示を受け取ることが出来るようにすること。
調査開始直前の時点では、マルチスレッド化する案が有力と考えていましたが、既存のソフトでどのように処理を実装しているのか、興味がありました。
いくつかのソフトのソースプログラムを読み流した結果、私の自作予定の将棋プログラムについて、当面の方針を決めました。
_beginthreadex を使用してスレッドを開始することにします。
処分予定のプログラミング本 2011/10/31
2011.10.31 15:27
昨日から今日(2011年10月31日)にかけて、物置に保管しておいた本の中から不要と思われる物を選び出し、数冊ずつ紐で縛っています。
処分予定の本の大部分は十数年前のプログラミング関係の技術解説書で、コンピュータとは無関係の資格についての教本や問題集が数冊。
処分予定のプログラミング本やコンピュータ関係の本について、書名と著者名を以下にメモしておきます。
| 書名 | 著者名 |
|---|---|
| ADVANCED WINDOWS | JEFFREY RICHTER |
| アドバンストWin32プログラミング | Martin Heller |
| Win32システムサービスプログラミング | マーシャル・ブレイン |
| Win32アプリケーションデバッグ技法 | Nancy Nicolaisen |
| Windows95 APIケーススタディ | Steven S. Chen |
| The Microsoft Guide to C++プログラミング | Kaare Christian |
| Microsoft Visual C++ランタイムライブラリリファレンスVersion1 | |
| Borland C++ 4.0 Windowsプログラミング | Paul Yao |
| プログラミングX Window | Naba Barkakati |
| WIN32 GAME DEVELOPER'S GUIDE WITH DIRECTX3 (洋書) | Jason Kolb |
| DNS&BIND入門 | Nicolai Langfeldt |
| ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック | 藤本 壱 |
| 編集・制作・出力のためのDTP編集ハンドブック | 稲垣 俊幸 |
『ADVANCED WINDOWS』は、「Windows XP、Windows Vista、Windows Server 2008」まで対応した第5版の翻訳本が上下2巻で 2008年に出版されています。
読んでみたい本ではあるのですが、来年後半には Windows 8の発売が予定されている状況なので、購入は控えることにします。
プログラミング言語C++
2011.10.30 11:56
今日(2011年10月30日)の午前10時半頃から 1時間ほど、仕事部屋兼寝室の隣にある屋根裏部屋(物置部屋)で、箱詰めしてある本を整理してました。
「森田将棋」の作者である森田和郎(もりた かずろう)氏らの著書「思考ゲームプログラミング」など、ゲームプログラミング関係の古い本を探していたのですが、目的の本は見つかりませんでした。
でも、C++言語のバイブルともいうべき「プログラミン言語C++」を見つけました。
ソフトウェア開発を休んでいる時期なら再び箱詰めするところですが、近頃は毎日のように VCを使っています。
暇つぶしに読むには重すぎる本ですが、C++でプログラミングする際には、役に立つこともありそうです。
そこで、とりあえず、私の手の届く場所に置くことにしました。
ただ、誤りが多い本なので、正誤表の参照は必須でしょう。
コンピュータ将棋の本を発掘
2011.10.28 23:59
今日(2011年10月28日)の午後、2Fの階段の踊り場付近に置いてある本を整理しました。
山積みしてあるダンボール箱を一つ一つ開け、中身の本を確認。
1時間余り作業した結果、コンピュータ将棋やコンピュータ囲碁のプログラム作りの本などを発掘できました。
開発の参考資料となりそうな本は揃ったので、明日から本格的な設計に取り掛かるつもりです。
将棋ソフトの思考部、入力開始
2011.10.27 23:49
2011年10月27日の夜、自作予定の将棋ソフトの思考エンジン部分の入力を開始しました。
数年前に入手した将棋プログラムのソースを雛形にして、main()を少し入力しました。
ただし、定型的な部分の入力で楽する狙いで雛形にしただけで、処理の中身は全くの別物。
今のところ、ほぼ、スクラッチ(ゼロからの)開発といえます。
スクラッチ開発にこだわっているわけではなく、思考に直接関係しない部分については、既存ソフトの処理を参考にすることもあるかもしれません。
なお、今回の開発では、ビットボードや全幅探索は使用せず、Bonanza登場以前に主流だったスタイルの将棋ソフト思考部を作ろうと考えています。
メンテナンス終了 2011/10/26
2011.10.26 14:49
2011年10月26日の 14時半頃、本サイト「将棋ゲームPC」のメンテナンス作業を完了しました。
今回のメンテナンスは、サイトを最初から構築する大掛かりなもので、2011年10月22日に作業を開始して、記事を入れ直すまでに 5日かかりました。
2008年春に CMS(コンテンツ管理システム)を導入した際、それ以前に公開していた記事の多くを公開停止し、そのままにしていたのですが、今回のメンテナンスにより、公開停止していた記事の大部分を改めて公開できました。
今後は、コンピュータ将棋のプログラム開発作業と並行して、サイトのコンテンツを整備していきます。
開発に 1日2時間を割り振ることが出来るようになりましたので、サイトの更新が滞ることはないはずです。
Dungeon Masterのクローンをプレイ
2011.10.26 14:27
久しぶりに『Dungeon Master』(ダンジョン・マスター)という古典的な RPGをプレイしたくなり、2010年11月7日の 18時過ぎ、ダンジョン・マスターの Windows版クローン「Return To Chaos」をダウンロードしました。
普段、私はノートPC(ThinkPad T500)に搭載されているトラックポイントを使用していて、マウスは利用していないのですが、ダンマスはポインティングデバイスを酷使するゲームなので、7日は簡単な動作確認のみ。
8日、ダンジョンの地形を少し編集して近道を作り、序盤から 1つ下の階層にいる敵キャラと戦うことが出来るようにしました。
9日にマウスを購入し、プレイ開始。
9日と 10日、それなりに面白くプレイしたのですが、プレイの途中で、アイテムを整理することを思いつきました。
そこで、11日の夜、改めて最初からプレイし、当面、途中入手したアイテムを別の階層に持ち込まないことにしました。
ただし、ゲーム内でキャラの飲食が必須なので、水を入れるための革袋は例外。
最終的には、集めたアイテムを「集めた階層」で分類し、1ヶ所に集める予定です。
ちなみに、私は下記の 4キャラクターを転生させてプレイしています。
- BORIS
- WUUF
- TIGGY
- GANDO
魔力重視の選択で、非力なキャラばかり。
序盤は苦労しそうです。
2010年11月12日 13時32分 記
追記(2011/10/26):2011年10月下旬に記事の移行(統合)作業を行なった時点で、この記事が「雑記」の最新の記事でした。
ようやく、これで「雑記」の記事移行作業が完了です。
チェス・マスター・ブックス新装版
2011.10.26 14:21
2010年10月31日、この日で有効期限切れになる bk1ポイントが 200ポイント余りあり、失効させるには惜しいため、オンライン書店ビーケーワン
様々なキーワードで検索してみるうち、チェス関係の本を調べてみたくなり、キーワード「チェス」で検索してみたところ、「チェス・マスター・ブックス」全5巻の新装版が 2010年秋に発売されていたことが分かりました。
日本で出版されるチェス本の多くは初心者向けですが、このシリーズは、中級の入り口あたりの人を対象とした内容。
以前に軽く立ち読みした際、まずまずの良書と感じた記憶があります。
私はこのシリーズを、「いつかは読もう」と思っていたのですが、私の中での優先順位は低く、購入せずにいるうちに入手困難になっていました。
新装版の全5冊のうち、既に発売済の下記2冊を注文。
・定跡と戦い方 (チェスマスターブックス【全5巻】)
・勝ち方の基本戦術 (チェスマスターブックス)
また、私はチェスのルールの細部を忘れているので、下記の入門書も一緒に注文しました。
ここからはじめるチェス
注文した本は、11月2日に到着。
これから、少しずつ読み進めていくつもりです。
チェスマスターブックスの初版が出たのは 1980年なので、オープニング関連の記述には時代遅れになった部分があるかもしれません。
でも、コンピュータ・チェスのプログラムを作成する予定はないし、誰かと対戦する気もないので、問題ないでしょう。
2010年11月 2日 21時19分 記