私のパソコン遍歴

〜 白砂、再び将棋プログラムに挑戦する 〜

 それは、『コンピュータ将棋』という本でした。

 高校の頃、『マイコン』に連載されていた「名譜戦への招待」という記事の話はしたと思います。『コンピュータ将棋』という本は、それを一冊の本にしたような感じになっていました。
 しかも、初めての人でもコンピュータ将棋(のプログラム)の仕組みが判りやすいように書かれていて、白砂のような「コンピュータプログラムど素人&プログラム言語ど素人」でも何を言わんとしているのかはかなり理解できました。
 盤面を配列で表し、駒を構造体で定義し、それらを駒番号で結びつけ……といった基本的なことが、『マイコン』の記事を読んだだけでは理解できていなかったんですね。プログラムの理解度が低いうちに始めたのが多分失敗だったんでしょう(泣)。
『コンピュータ将棋』の記事はそれだけではなく、ダブルリンクチェイン(書いてる白砂もよく判りませんが、ポインタ参照でリスト構造を作って、そのリスト構造を順列・逆列どちらにも行かれるように両側のポインタを持っているリストのことです。……こう書いてもまだ判らん(笑))を使った高速将棋盤や、駒を実際に動かして盤面を生成し、また元に戻せるルーチン、詰将棋についてなどもCのソースを提示しながら解説してありました。最後の方には『柿木将棋』『森田将棋』のアルゴリズムについての作者自身の解説があるなど、てんこもり超贅沢な(<超って言うな)内容でした。

 初めてこれを藤沢の有隣堂で(マイナーな話題だなぁ〜)見た時、本当に胸が震えました。
 なるほど、こうやって将棋プログラムというのは作るのか……と。
 これなら、白砂でも将棋プログラムが作れるかもしれない。

 今でこそ、「将棋プログラムを作ったら7七桂戦法と3二金戦法の定跡を入れてやる。ぜって〜変だぞこのソフトは」なんて言ってますが(多分意味が判んないと思いますので読み飛ばして下さい。どうしてもという方はこちらをどうぞ)、当時の白砂は升田式石田流とかメリケン流向かい飛車を指していましたので、定跡についてはあんまり考えていませんでした。
 ただ、当時はまだ現在ほど将棋プログラムの棋力は高くなく、多分「級」レベルだったと思います(現在は4段といっても過言ではなく、白砂もしょっちゅうやられます(泣))。なので、強いソフトを俺が作るんだという怖いもの知らずの考えだけは持っていました。

 再び湧き上がったプログラミングの情熱は自分でも止められませんでした。
 まず、CとC++の再学習です。とにかくまずはプログラムを覚えないと……と必死になりました。高校生の頃の自分が復活したようでした。
 Borland C++のリファレンスマニュアルも買いました。本体価格1,000円に対してマニュアル7,500円は納得いきませんが、こちらはジャンクではなくボーランドから直接買ったので仕方がないでしょう(笑)。このマニュアルの例文も随分入力しましたが、意外とアテにならないこともあってよく泣かされました。「ちゃんと入れてんのになんで動かね〜んだよ〜」って。この経験があってから、白砂はあんまりマニュアルを信用しなくなりました(笑)。
 国会図書館にも行って、『マイコン』の例の記事をコピーしてきました。と同時に、森田さんたちが書いたコンピュータオセロの本とか、『MICRO(だったと思う)』に載っていた「棋帝」という詰将棋の記事なんかもコピーさせていただきました。えらい出費だったと記憶してます。おまけに著作権の問題があって全部のページはコピーできなくて、ページを必死になって選んだり……(笑)。
 とにかくこの時期、白砂は再びマイコン少年に戻っていました。

 実際のコーディングもこれまた大変でした。
 漢字をさかさまに出す方法が判らなかったんで、先手はアルファベットの大文字で、後手は小文字で表すことにしました。OUなら先手玉、ryなら後手龍です。盤面の配列を定義して、駒の定義をして、それを表示する場所を考えて……というだけでまず一苦労でした。
 そうやってうまく盤面の表示ができたら今度は入力方法です。マウスの使い方が判らなかったんで(判んないことだらけだ(泣))、どこのマスからどこのマスへ、という入力方法を使いました。持駒の場合は駒の種類だけ入力することにして、行き先のみ入力です。
 ここまででまず相当の時間が経過したんですが……というだけでトーシロ丸出しなんですが(笑)、ここからがまた大変でした。正しく駒が動いているかどうかを判定しないといけないんです。
 駒判定は『マイコン』のESSの考え方を導入し(すいません、パクリと素直に書きます)、その駒が行かれる所の座標の差を格納しておきました。
 ちょっと難しいんですが、将棋盤の配列を1一から9九まで取ったとして、その「数字」をそのまんま使うとします。とすると、7七の歩が行かれるところは7六の一ヶ所だけですよね。これを、77-76=1と考えて、その1というのを格納しておくわけです。で、7七の歩を動かす……という場合に、行った先の座標と現在の座標の差を取って、それが格納してある数字と一致するかをみます。7六へは77-76=1だからOKですが、5一へは77-51=26なんでダメと判断できるわけです。
 この駒判定がまた面倒で、飛車とか角はどうすんだとか成りはどうするとか、いろいろと細かい設定が必要でした。それでもなんとか組み上げて、銀がまっすぐ下がれなかった時は感動しました(笑)。

 ここまでくれば「将棋盤」はほぼ完成で、あとはコンピュータの思考の方に入っていきます。
 まず最初は「動かせる手」を全部抽出して、それをランダムで選ばせて見ました。初手▲8六歩なんてのはザラでしたし、△7七角成の王手に対して▲6八銀なんてこともあります。で、それに対して△8八馬としないとか(笑)。ま、なにせランダムですから。
 で、これで大体のバグ取りをした後、本格的に思考ルーチンの開発に入って行くわけです。


 ……ここから先は「現代」になってしまうので、パソコン遍歴についてはここでおしまいにします。
 ちょっとだけコンピュータ将棋の先を話しておくと、この後すぐに壁にぶつかり、そのまま止まってしまいました(泣)。自作パソコンを作ったりWindows95用のC++Builder3を買ったりと、環境が変わってプログラムが始めに戻ってしまったのも原因の一つだと思います。ま、一番の原因は別のところにあると思うんですが……(笑)。

 こうして振り返ってみると、非常にオタな生き方をしてきた気もしますし、でもオタの中では意外とオーソドックスなルートなのかなという気もします。コンピュータに触れる期間だけは長くてもう人生の半分以上にもなるのに、その割りに得ているものが殆どないというのがどうもいけませんが。
 現在でも、白砂のコンピュータに対しての情熱は消えていません。
 コンピュータ将棋も作りたいし(一番先に言うこと自体が気合入ってるし)、ゲームも作ってみたいです。HPやCGIも、もっといろいろ充実させたいと思ってます。『リルミガン・サーガ』も買ったんで、久しぶりに妖刀を求めて洞窟に入りたい気もしてます(でも養殖稼ぎばっかするんだきっと(爆))。

 X1-turboIIは既に我が家にはなく、ディスプレイだけがテレビとして使われています(パソコンテレビ、という衝撃のディスプレイだった。世界初じゃないのかこれは?)。SHARPのワープロは、新型のペン書院を買った際に先輩の和平さんに1万で売りました。脇田から買ったパソコンも、でっかいパッケージのBorland C++とともに押入れの中に眠っています。
 昔を振り返ることになんの意義があるんだ……という気もしますが、書いている側は非常に有意義でした。
 あの時代の情熱と、新鮮な驚きを思い出しました。
 全くの自己満足のこの企画に、最後までつきあっていただいてありがとうございました。

2001.6.9 白砂青松