<マクロの定義1>
(define leap1
( $1
(verify not-friend?)
add
)
)
※$1は方向(n,s,e,w,ne,nw,se,sw)が入力されます。
※
チェスでは利用されません。
(define leap2
( $1
$2
(verify not-friend?)
add
)
)
※$1には方向(n,s,e,w)が入力されます。
※$2には方向(ne,nw,se,sw)が入力されます。
例)
n-ne,n-nw,s-ne,s-nw,e-ne,e-se,w-nw,w-sw
※ナイトで利用されます。
- キングの1歩移動を定義しているブロック:(king-shift)
(define king-shift
( $1
(verify not-friend?)
(set-attribute never-moved? false)
add
)
)
※$1には方向(n,s,e,w,ne,nw,se,sw)が入力されます。
※キングで利用されます。
※attributeの「never-moved?」をfalseにします。
(define slide
( $1
(while empty?
add
$1
)
(verify not-friend?)
add
)
)
※$1には方向(n,s,e,w,ne,nw,se,sw)が入力されます。
※ビショップやクイーンで利用されます。
- ルークの任意歩移動を定義しているブロック:(rook-slide)
(define rook-slide
( $1
(while empty?
(set-attribute never-moved? false)
add
$1
)
(verify not-friend?)
(set-attribute never-moved? false)
add
)
)
※$1には方向(n,s,e,w)が入力されます。
※ルークで利用されます。
※attributeの「never-moved?」をfalseにします。
- ショートキャスリングを定義しているブロック:(O-O)
(define O-O
( (verify never-moved?)
e ; KB1
(verify empty?)
e ; KN1
(verify empty?)
cascade
e ; KR1
(verify (and friend? (piece? Rook)never-moved?) )
from
back ; K1
; Save expensive not-attacked?s for last
(verify not-attacked?)
e ; KB1
(verify not-attacked?)
to
(set-attribute never-moved? false)
; We could check if KN1 is attacked too, but this isn't
; really necessary since Zillions doesn't allow any moves
; into check
e ; KN1
(set-attribute never-moved? false)
add
)
)
※キング側のルークとキャスリングします。
- ロングキャスリングを定義しているブロック:(O-O-O)
(define O-O-O
( (verify never-moved?)
w ; Q1
(verify empty?)
w ; QB1
(verify empty?)
cascade
w ; QN1
(verify empty?)
w ; QR1
(verify (and friend? (piece? Rook) never-moved?) )
from
back ; K1
{; Save expensive not-attacked?s for last
(verify not-attacked?)
w ; Q1
(verify not-attacked?)
to
(set-attribute never-moved? false)
; We could check if KN1 is attacked too, but this isn't
; really necessary since Zillions doesn't allow any moves
; into check
w ; QB1
(set-attribute never-moved? false)
add
)
)
※ビショップ側のルークとキャスリングします。
- ポーンのaddを定義しているブロック:(Pawn-add)
(define Pawn-add
( if (in-zone? promotion-zone)
(add Knight Bishop Rook Queen)
else
add
)
)
※「promotion-zone」でなければ、ポーンをaddします。
※「promotion-zone」では、ナイト、ビショップ、ルーク、クイーンから選択させてaddします。
- ポーンの非キャプチャ移動を定義しているブロック:(Pawn-move)
(define Pawn-move
( n
(verify empty?)
(Pawn-add)
(verify (in-zone? third-rank))
n
(verify empty?)
add
)
)
※nがすでに代入されており、方向は入力されません。
※空のマスで(Pawn-add)を呼び出します。
※2回目の空のマスでは直接addします。
- ポーンのキャプチャ移動を定義しているブロック:(Pawn-capture)
(define Pawn-capture
( $1
(verify enemy?)
(Pawn-add)
)
)
※$1は方向(neまたはnw)が入力されます。
※敵のマスで(Pawn-add)を呼び出します。
- アンパッサンを定義しているブロック:(En-Passant)
(define En-Passant
( $1
(verify enemy?)
(verify last-to?)
(verify (piece? Pawn))
capture
n
to
n
(verify last-from?)
add
)
)
※$1は方向(nまたはn)が入力されます。
最終更新:2020年08月18日 15:06