忍者ブログ
コンピュータ将棋など…。
[47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

前に買った本を消化していないのに新しく本を買ってしまいました。
N2Factory著「DirectX ゲームグラフィックス プログラミング Ver. 2.1 Vista」。
 


タイトルに Vista とあるけど、DirectX9の範囲のDirectX Graphics だけで、シェーダーの解説は固定機能パイプラインのみ。
推奨環境が DirectX8 対応グラフィックカードになっているw

一応、VS2005に対応しているのでいいかな、と。
本番でこの本での成果を出せるかどうかは別ですがwww
PR
なのはの局面データは利き情報(先手、後手)とピン情報を持っている。
手を進める処理および手を戻す処理においてのピン情報の更新を次のように行っている。
まず、玉の利きを延長し、利き情報に入れておく(下図:黒=自玉、赤=相手玉)。
※実際には局面データの初期化時に設定し、玉移動時に更新する。

PIN情報更新

自玉を動かす場合:
・自玉に関するピン情報を更新する。
・相手玉の利きの延長線上に自玉の移動元、移動先がある場合、その線上のピン情報を更新する。
  (2六玉とする場合、4四から1七のラインのピン情報を更新する)

玉以外の駒を動かす場合:
・移動元、移動先が自玉、相手玉の利きの延長線上にある場合、その線上のピン情報を更新する。
  (5五に角がいて3三に移動する場合、自玉の4六~9一、3六~3一のライン、相手玉の5四~5九、4四~1七のラインのピン情報を更新する)

王手がかかっているときの合法手生成のテストをしてて見つけたバグ…。

1. _BitScanForward()の使い方のミス

離れた位置からの王手に対する移動合がおかしな位置にされ、どうも立っているbitの位置を間違っているようなのでよく見たら、_BitScanForward()の使い方を間違っていました。

なぜか

Index = _BitScanForward(&Index, Mask);

としていました。
他の箇所はちゃんとやってたのに何でだろう…。

2. 紐のついた駒を玉で取ってしまう

玉を動かす関数とは別に、指定場所に駒を動かす関数があり、その中で玉を区別していなかった。


・・・。
うーん、完成するんだろうか・・・?

 

駒番号を見ての着手生成が出来ました。
ループ回数が81回から40回に減ったことで高速化されました。
しかし、BitBoardにはちょっと追いつけそうにありません…。
・例の局面 … 66万回/秒
・初期局面 … 103万回/秒

まだ、ピン情報は未確認です。
着手による盤面の更新処理はどうしたものかなぁ~。

v飛・・歩・歩・・玉

のような並びのときに歩を動かしたときに、動かさないほうの歩がピンされた状態になるけど、これを高速に差分更新するにはどうしたらいいんだろう??
うーん、ピンは都度生成したほうがいいのかな?
とりあえず、まだちゃんと出来ていませんが、ようやく合法手生成が動きだしてきました。
ピンはまだとか自分の駒を取る手も生成してるとか駒番号を見てないとかありますが、指し手生成ベンチで、
・例の局面 … 55万回/秒
・初期局面 … 80万回/秒
となのは改を上回ってきました!

あとは
・王手生成
・王手回避手生成
・詰ルーチン(反復深化)
・詰ルーチン(df-pn)
と進めていこう。

それにしてもプログラムはかなりれさぴょんに似てるなぁ~。
(関数名は物によってはそのままだったりするし、利きとかピンも持ってるし)


忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
なのはの応援をしていただき、かつ協力いただける方は、アマゾンでの買い物は下のリンクからお願いします
最新CM
[04/27 とおりすがり]
[10/21 おてだま]
[10/20 おてだま]
[01/24 なのはminiふぁん]
[01/08 sakura]
最新TB
プロフィール
HN:
かず
性別:
非公開
バーコード
ブログ内検索
最古記事
カウンター
アクセス解析