話題-11

Last-modified: 2020-09-21 (月) 14:27:14
543: ↓ZoGwiki主◆dcPxbsKQbQ:20/09/17(木)01:09:26 ID:wak ×

現在、連鎖将棋を制作中なのですが、なかなか苦戦しています。
連鎖将棋では「ある駒Aは、自分の利き筋にいる駒Bの移動可能な範囲に移動」できます。
これを実装するためには、駒Aをいったん駒Bの位置へ進めて、駒Bの利きを確認して、そこに駒Aを動かす必要があります。
ところが、ZoGでは1つのマス(位置)には1つの駒しか許されない排他仕様(駒が重なると自動的にもともといた駒を除去する)のため、駒Bが消えてしまいます。
駒Aを最終的に移動した際に、駒Bがあった位置に駒Bを再作成することで何とか回避できたのですが、駒Bが玉将の場合は除去された時点でチェックメイト判定が生じてしまい、その時点で対局が終了してしまいます。
これがネックとなって、これまで実装が進めらずに停滞しておりました。

544: ↓ZoGwiki主◆dcPxbsKQbQ:20/09/17(木)01:27:09 ID:wak ×

今回、利き安南将棋やアンチ利き安南将棋のZRF制作で得られたノウハウを利用して、何とか2パターンの連鎖将棋のZRFを完成させられました。
①駒Aの利きにいる味方の駒を検索し、検索された駒Bの種類を判定し、それに応じた利きへ駒Aを直接移動させる方法
これは、駒Aの移動を味方の駒検索のために使用し、さらに見つけた駒Bの種類を全パターンで分岐して全ての利きを用意し、そこへ駒Aを移動させる、力技の方法です。
駒Aの全移動方向をチェックした上、さらに駒Bの全移動方向を、全駒種分だけ用意する必要があり、処理が肥大化します。
ただ、駒Aの成駒をあらかじめ指定しておくことができ、昇格時の処理は容易です。
②駒Bに利いている味方の駒を方向別に検索し、検索された駒Aの位置を開始点として、検索した方向にいた駒種で定まる移動方向へ駒Aを移動させる方法
これは、アンチ利き安南将棋のノウハウを利用した方法で、駒Aの移動方法をそのまま適用できるため、処理がスリムになります。
(駒Bを検索する方向を制限するため、駒Aに利かせられる駒Bの駒種が限定され、駒Aの移動方向も制限されます)
ただ、駒Bの移動で駒Aを動かすため、駒Aの成駒を指定できないため、駒Aの種類を判別して、それぞれの成駒を用意する必要があります。

545: ↓ZoGwiki主◆dcPxbsKQbQ:20/09/17(木)01:36:02 ID:wak ×

②の説明で、一部訂正です。
(駒Bを検索する方向を制限するため、駒Aに利かせられる駒Bの駒種が限定され、駒Aの移動方向も制限されます)
→(駒Aを検索する方向を制限するため、駒Bに利かせられる駒Aの駒種が限定され、駒Bの移動方向も制限されます)

546: ↓ZoGwiki主◆dcPxbsKQbQ:20/09/17(木)01:42:44 ID:wak ×

本来の連鎖将棋では、連鎖移動による移動先に味方の駒がいれば、さらに連続で連鎖移動を行い、連鎖移動の連結(N連鎖)ができるようです。
「駒Aをいったん駒Bの位置へ進めて、駒Bの利きを確認して、そこに駒Aを動かす」がもしZoGで使用できれば、再帰処理が可能になり、何連鎖でも可能になりますが、
①(利きにいる味方の駒を参照)および②(利いている味方の駒を参照)の方法では、1連鎖しかできません。
今回制作したZRFは、全ての駒が連鎖移動のみ可能(駒本来の移動は不能)で、1連鎖まで可能、連鎖移動による二歩も禁止、行き所がなくなる位置への連鎖移動は強制成りのルールです。

553: ↓ZoGwiki主◆dcPxbsKQbQ:20/09/18(金)01:53:17 ID:eGk ×

【変則将棋】連鎖移動将棋【対局】:https://seiga.nicovideo.jp/seiga/im10603812
連鎖移動将棋のZRFができたので、ZoGのAIと対局してみました。
大駒の連鎖移動がえげつなく、熾烈な空中戦となりました。