将棋盤のソフトウェアの仕様と定義域を真面目に解説する


 現状の将棋ソフトのプロトコルがUSIであり、対して将棋ベーシック改は独自の定義域を持っている。USIから入った人に将棋ベーシックの将棋盤を解説してみる。

 日本語なら分かる、日本語で解説しろ、という話もいつからか無くなったが、プログラムが分からないのではなく、恐らく0と1で構成されるソフトから2進数、16進数、10進数とそれを格納するメモリ領域であるC言語の変数、変数を行列にするための配列などが頭にイメージできないことが問題なのは分かっている。

 残念なことに、俺は天才である。小学校の頃にファミコンを遊びながら、頭にコンピュータがなんとなく入っていて、専門学校で基礎を学ぶとそれまで不思議だったコンピュータの世界つまり子供の頃から遊んだファミコンをしながら想像していた世界が16年くらい広がっていて、入口に立った瞬間から猛ダッシュで孤軍奮闘したのだ。

 だがさらに残念なことに、コンピュータに関しては天才的な部分はあれ、秀才的な努力や悪人的な策謀に働く意味に生きる意味、お金に関する知識や高校までで習う理科とそれを現代社会に反映させる近代科学史など、知らない事も多すぎて人から利用された。

 その話から考えると、まず将棋盤を解説して理解者をひとり増やす方が近い気がする。ファミコン画面のビットマップが分かれば、9x9行列81マスの将棋盤くらい分かりそうなものであるが、ビットマップが分かっているという人も目で絵を見て絵が分かっているだけで、メモリ上でビットマップがどう形成されているか本当に分かってる?俺は多分そこが同じであるという特殊な考え方をしているのだろう。

 まずザックリ2進数。10進数が分かるとして、

 0=0000

 1=0001

 2=0010

 3=0011

 4=0100

 5=0101

 6=0110

 7=0111

 8=1000

 9=1001

 A=1010(10)

 B=1011(11)

 C=1100(12)

 D=1101(13)

 E=1110(14)

 F=1111(15)

 という風に数えて4ビットで0から15まで16種類の数を数えられる。

 ここで将棋盤の9x9の81マスの行列と考え、駒は数であると考えてみる。これが次の壁かもしれないが、ID背番号を駒に振ってみるのだ。歩は歩でどれも同じ、ID背番号1で盤上の何処かにある1という風に考えると、次に香車が2,桂馬が3でこれはUSIプロトコルでは歩はポーンのPで先手後手を大文字小文字のPとpで区別するのであるが、その先入観を捨てて将棋ベーシックでは先手の歩が1でそこから香桂銀金王角飛成歩成香成桂成銀馬龍で14種類、後手の歩を15と数える。

 さて、後手のことを考えると4ビットの16まででは足りないので、空き升と28種類を足して29まで数えるメモリが必要で、これはプログラム言語の便宜上CHAR型を使う。CHAR型を使うなら、最初からUSIプロトコルで文字で駒を表現すればよいわけだが、それは結果論であるし、なにより天才なので独学で作ってしまった。

 すべからくして、Dim board(81) As Char とプログラムすると、8ビットのメモリを格納するCHAR型のメモリが81個、計648ビットのメモリ空間を変数として利用できるようになり、そこに入っている数は1個2個というような個数ではなく、駒の背番号として解釈するのである。

 これが将棋ベーシック改の将棋盤である。

 このプロトコルを採用する利点はプログラマが直感的に盤面を理解しやすいから、そのプログラマが俺なので、俺の思想が俺が理解しやすいのはそうなのだが、USIプロトコルの方が理解しやすいというのが通例なら、これ以上の解説は割愛する。

 つまるところ思考部とはこの行列のこねくり回しであって、基本的にはルール通りに進めてみて戻してというトライアンドエラーのしらみつぶし算の域を出ない。

 もっと数学的にカッコ良く解きたいと思うのだが、盤をメモリ上に表現するのも、数学的というか計算機科学的だと思ってもらえれば、ここで本稿は一旦終了(メシ)


🄫1999-2023 id:karmen