解説:move-type

  • move-type
 移動のタイプを設定します。

  • (move-type <move-type>)
 <move-type>の後に定義された駒の全ての移動は、そのタイプになります。
 <moves>または<drops>内で使用します。

 <move-type>によって移動のセットを分類でき、例えば「キャプチャ」移動と「非キャプチャ」移動を設定できます。
 <move-type>引数はその移動タイプを表すために作成した一意の名前にする必要があり、4通りの利用法があります。


  • move-priorities
 <move-type>を使用して、特定のタイプの移動を他のタイプの移動よりも優先できます。

  • turn-order
 <move-type>を使用して、手番内に行う移動を特定のタイプの移動のみに制限できます。

  • add-partial,add-copy-partial
 <move-type>を使用して、次に行う連続移動を特定のタイプの移動のみに制限できます。

  • attacked?
  • defended?
 <move-type>を使用して、敵または味方の特定のタイプの攻撃のみを判定できます。


(piece
 (moves
  (move-type step-moves)
  (shift1 n)
  (move-type jump-moves)
  (shift2 n ne)
  (shift2 n nw)
 )
)
※上へ1マス進む移動を「step-moves」、上へ1マス進んでから斜め前に1マス進む移動を「jump-moves」と定義します。

①(move-priorities <jump-moves> <step-moves>)
 「jump-moves」できる場合は、必ず「jump-moves」する必要があります。
 たとえ「step-moves」できる場合でも「step-moves」は選択できません。

②(turn-order (White step-moves) (Black step-moves) (White jump-moves) (Black jump-moves))
 最初、白は「step-moves」しかできず、黒も「step-moves」しかできません。
 次は、白は「jump-moves」しかできず、黒も「jump-moves」しかできません。
 以降は、両者とも「step-moves」のみ、両者とも「jump-moves」のみを繰り返します。


(piece
 (moves
  ( (verify (in-zone? start-zone)) n (add-partial step-moves)) )
  (move-type step-moves)
  (shift1 n)
  (move-type jump-moves)
  (shift2 n ne)
  (shift2 n nw)
 )
)
 常に「step-moves」と「jump-moves」ができます。
 開始位置にいる場合のみ、上へ1マス進んだ後に、さらに「step-moves」の移動(上へさらに1マス進む)ができます。

④(verify (attacked? step-moves)) add
 その位置が敵によって「step-moves」で攻撃されていれば、移動します。

⑤(if (defended? jump-moves) add)
 その位置が味方によって「jump-moves」で防御されていれば、移動します。


<move-typeの不便な点>

  • 「(turn-order (<player> <move-type>) )」では、その手番中にプレーヤー<player>は、その移動タイプ<move-type>の動き「move」「drop」しかできません。
  複数の動きをしたい場合、1つの移動タイプにまとめる必要があります。
  複数の<move-type>を指定したり、特定の<move-type>を除外したりできると良いのですが、できません。

  • 「(move-priorities <move-type1> <move-type2>...<move-typeN>)」は、各駒単位での移動タイプの優先ではなく、手番内の駒全体において動かせる駒を優先された移動タイプのみに制限します。
  例えば、移動タイプ1<move-type1>ができる駒が盤上にあれば、移動タイプ2<move-type2>や移動タイプ3<move-type3>しかできない駒は動かせません。
 (取る一手将棋のような、forced-captureの実装に向いています)
  各駒単位で、移動タイプ2<move-type2>があっても移動タイプ1<move-type1>があれば移動タイプ1を優先し、移動タイプ2<move-type2>と移動タイプ3<move-type3>があれば移動タイプ2を優先するというわけではありません。

  • 「(move-priorities <move-type1> <move-type2>...<move-typeN>)」では、優先度に同着順位(同じ優先度の移動タイプ)を設定できません。
  例えば、「(move-priorities <move-type1> (<move-type2> <move-type3>) <move-type4>)」のように、移動タイプ1<move-type1>を最優先、移動タイプ2<move-type2>と移動タイプ3<move-type3>を次優先、移動タイプ4<move-type4>を非優先とはできません。
  そのため、同じ優先度にしたい動きは、同じ移動タイプにまとめる必要があります。

  • 「turn-order」や「move-priorities」で、複数の動き「move」「drop」を同じ移動タイプ<move-type>にまとめてしまった場合、同じ移動タイプ同士は「attacked?」や「defended?」で区別できなくなります。
  逆に、「attacked?」や「defended?」で区別できるように移動タイプを細かくグループ分けした場合、「turn-order」で手番内で制限する移動タイプにまとめられず、「move-priorities」で同じ優先度の移動タイプにまとめられません。


最終更新:2020年09月03日 11:30