sugyan / yasai

Yet Another Shogi library, for AI development
GNU General Public License v3.0
25 stars 4 forks source link

打ち歩詰めでないものが打ち歩詰めと判定される #26

Closed taotao54321 closed 2 years ago

taotao54321 commented 2 years ago

version: commit 9ea383121525b7391aceb8ffeead3cc6eda037a4

sfen

図の局面で12歩は合法ですが、yasai では打ち歩詰めと判定されてしまいます。

金/馬/飛/龍がまっすぐ引いて歩を取る手は(たとえ pin されていても)常に可能なので、歩を打った筋については pin 判定の対象外とする処理が必要だと思います。

また別件なのですが、こちらのコードは玉の移動先から既に single が除かれているのにさらに single を XOR しているため、結局玉で歩を取る手を二重に判定してしまっているようです: https://github.com/sugyan/yasai/blob/9ea383121525b7391aceb8ffeead3cc6eda037a4/src/movegen.rs#L364-L374

sugyan commented 2 years ago

なるほど、確かにこのパターンは考慮されていませんでした… ありがとうございます!