取る一手将棋、いまだにルールがよく理解できないのだが、とりあえず仮公開しておくので、ルールが合っているのかまずは確かめてもらいたい。
https://github.com/yaneurao/YaneuraOu/tree/master/exe/MustCaptureShogi
評価関数はまだ用意していないので、真やねうら王のものをとりあえず使っておいて欲しい。
これしかし、王手将棋と違って、将棋所やShogiGUIからの合法性のチェックがないので、本来、ルール上は取る一手なのに取らない指し手をうっかり指すことが出来て、「こいつ、弱いなーw」みたいなルール無視での無双が出来てしまうので、上級者向けという気がする。
設定でPvIntervalを0にして、読み筋を見ながら、取る指し手がないかを常に確認しながら指すぐらいでないといけないのかも知れない。(将棋所かShogiGUIで王手将棋や取る一手将棋のモードが実装されたら最高なのになぁ…。)
あと王手をされたとき、駒を捕獲する(本将棋で)合法な指し手があるなら、その指し手を指さねばならない(複数あるならそのいずれかを指さねばならない)というルールだとして実装した。
次のうち、適切だと思うルールは?
取る一手将棋は王手されたときに
— やねうら王 (@yaneuraou) December 2, 2016
取る一手将棋で、図は後手番だとして56歩と取ると玉が素抜かれる(非合法手)のでこの場合、他に駒を取る指し手もないから、取る指し手以外の任意の合法な指し手が指せるという解釈で合ってるのかな?つまり、合法な取る指し手がない場合は、任意の(本将棋と同じ)合法な指し手が指せると。 pic.twitter.com/GRBTBkFt7q
— やねうら王 (@yaneuraou) December 2, 2016
プレイヤーの合法手チェックをエンジン側でやって、反則手を指されたら
メッセージだして持将棋のように勝利宣言すれば良いのでは?
さておき、どのルールが適切かは大富豪と同じで誰にもわからんのでは無いでしょうか。
取る一手将棋の面白さを最大化するのが一番いいんでしょうが、ある程度遊び込んだ人でないと判断難しそうです。
大学将棋部や奨励会で流行ってるならその人たちの意見を聞けるといいんですが、
複数あった場合にどれを採用するかどうやって決めるのか?
> プレイヤーの合法手チェックをエンジン側でやって、反則手を指されたら
position moves..の文字列がすべて合法手かどうかを調べればいいんですね…。次バージョンで入れておきます。
マルチすみません。
反則手で即勝利宣言は遊びにくいから、前回手番のSFEN文字列を再送する方が親切かも。
GUIで弾かれますかね?
> GUIで弾かれますかね?
はい、エンジン側からGUIに対してsfen文字列を送ることはUSIプロトコル上は、ありえないです。
あ、対局のコンテキスト持ってるのはGUIか、そりゃそうですね。失礼しました。
えーと、エンジンから送る待ったコマンドは、、、無いのか。
じゃあ上の方法しかないですね。
でも、人間も一つのエンジンと考えれば、usiに待ったコマンド付けてくれてもよさそうですがね。
bestmove resign retreatplay 2
みたいな。