「turn-order」では、自分の手番を連続で繰り返すことができます。
各手番で、別々の駒を移動させることもできます。
パスが許可されている場合を除き、全ての手番で移動を行う必要があります。
(例えば、1手目を動かした後、2手目で動かせる駒がないと、パスはできずステイルメイトとなります)
「add-partial」「add-copy-partial」では、同一手番内で移動を繰り返すことができます。
原則、移動の主体は同じ駒である必要がありますが、別の移動方法を行うことができます。
指定された「move-type」の移動のみを指定して繰り返させることができます。
<連続手番の場合>
手番が2回来るため、全ての駒に適用されます。
1回目の手番で動かせる駒(move-1を持つ駒)がなくなったり、2回目の手番で動かせる駒(move-2を持つ駒)がなくなったりすると、ステイルメイトになります。
(turn-order (Black move-1) (Black move-2) (White move-1) (White move-2) )
(piece
(name Try)
(moves
(move-type move-1)
(try1)
(move-type move-2)
(try2)
)
)
(define try1
(
n
add
)
)
(define try2
(
w
add
)
)
<連続移動の場合1>
「add-partial」を持つ駒のみに適用されます。
「attribute」をフラグとして使用し、1回目の移動と2回目の移動を区別します。
1回目の移動は2回目の移動を呼び出し、2回目の移動は移動を終了します。
1回目の移動が呼び出され続けると無限ループになり、移動が終了できません。
2回目以降は1回目の移動を呼び出せないように、1回目にはいきなり2回目の移動が呼ばれないようにフラグ管理しています。
(turn-order Black White)
(piece
(name Try)
(attribute never? true)
(moves
(try1)
(try2)
)
)
(define try1
(
(verify never?)
n
(set-attribute never? false)
add-partial
)
)
(define try2
(
(verify (not never?))
w
(set-attribute never? true)
add
)
)
※try2で「(verify (not never?))」を省略すれば、1回目の移動でtry2を行うこともできるようになります。
try2で「(set-attribute never? true)」しないと、以降の手番で駒を動かせなくなります。
「move-type」を使用しなくても実装できます。
<連続移動の場合2>
「add-partial」を持つ駒のみに適用されます。
「turn-order」で、最初の移動はmove-1のみ可能にします。
move-1の移動はmove-2の移動を呼び出し、move-2の移動は移動を終了します。
「(add-partial move-2)」は、move-2のみを呼び出すため、move-1が繰り返されることはありません。
(turn-order (Black move-1) (White move-1) )
(piece
(name Try)
(moves
(move-type move-1)
(try1)
(move-type move-2)
(try2)
)
)
(define try1
(
n
(add-partial move-2)
)
)
(define try2
(
w
add
)
)
※「(turn-order Black White)」に変更すれば、1回目の移動でtry2を行うこともできるようになります。
「attribute」によるフラグ管理が不要です。
最終更新:2020年09月15日 11:23