将棋プログラムのつくりかた(C++) ~ 手の内部表現 ~
【2015/11/28 追記】
当時、プログラミング超初心者のわたしが勢いで始めたものの、完結させずに放置してしまっています。すみません。
コンピュータ将棋のアルゴリズム HTML版のリンクを貼っておくので、こちらを参考にしてください。
前回から貼っているC++のコードなのですが、
JavaScriptで将棋盤をつくっているときから書いていたので、
現状はこんな感じのところまですすんでいます。
見にくいですが、□ は空白のマス、vがついている駒が後手の駒です。(v歩など)
この局面(先手番)での合法手が、画面下に表示されています。
とりあえず、盤上の駒を動かす手を生成するところまでできました。
昨日まで、あるマスに利きがあるかどうか調べる関数のなかに、
飛び駒(飛車、角、香車)が全方向に動けるという、とんでもないバグがありまして、
それがなかなか発見できませんでした。あほすぎてつかれました。
それでは、現状の進行とずれますが、
「手の内部表現」の部分のコードを貼ってみたいと思います。
駒の位置を、「 Pos 」という構造体、
指し手(打つ手も含む)を、「 Te 」という構造体で表現しています。
このへんのやり方は、ほとんど、
「うさぴょん」の作者様のページ
ページ移転のお知らせ
とおんなじです。
「 Pos 」や「 Te 」をリストにしてあつかうための、ポインタが用意してあります。
よくみると、KomaInf(駒番号をいれる型)の変数名(koma)が、
「 Pos 」と「 Te 」でおなじですね。これはまずいです。あとで修正せねば。
あと、なぜか「 Te 」にだけ、
初期値(ぜんぶ0)を代入してくれるコンストラクタが用意されています。
(Posのは忘れてました)
演算子のオーバーロードや、コンストラクタの中身はこのようになっています。
なにかまずい部分などありましたら、コメントいただけるとうれしいです。
それでは。
P.S
JavaScriptで将棋盤のページ
http://www54.atpages.jp/tetsuzuki/
ですが、
広告の位置がかわったことで、駒がぜんぶズレてますね。
駒画像を追加する要素以外を、
ぜんぶabsoluteで指定しているのが原因かなあと思っています。
近いうちに直すと思います。たぶん。
2014/2/14 12:41追記
広告の位置によるズレを直しました。