<マクロの定義2>
- 成りのない1歩移動を定義しているブロック:(shift)
(define shift
( (verify (in-zone? play-zone))
$1
(verify not-friend?)
(prisoner-check)
add
)
)
※(in-zone? play-zone)で盤上の駒かどうか確認します。
※空きマスまたは敵のいるマスの場合、進めます。
※敵の場合に持駒にするため、「add」の前に(prisoner-check)を呼び出します。
※金将、玉将、と金、成金3種、竜王、竜馬で利用されます。
- 成りのある1歩移動を定義しているブロック:(shiftP)
(define shiftP
( (verify (in-zone? play-zone))
(set-flag came-from-zone (in-zone? promotion-zone))
$1
(verify not-friend?)
(prisoner-check)
(if (in-zone? $3)
add
)
(verify (or (flag? came-from-zone) (in-zone? promotion-zone)))
(if enemy?
(change-type $2)
(if (in-zone? $3)
(first-empty)
(convert-prisoner)
)
add
else
(add $2)
)
)
)
※(in-zone? play-zone)で盤上の駒かどうか確認します。
※空きマスまたは敵のいるマスの場合、進めます。
※敵の場合に持駒にするため、「add」の前に(prisoner-check)を呼び出します。
※歩兵、銀将で利用されます。
- 成りのある2歩移動を定義しているブロック:(shift2P)
(define shift2P
( (verify (in-zone? play-zone))
(set-flag came-from-zone (in-zone? promotion-zone))
$1
$2
(verify not-friend?)
(prisoner-check)
(if (in-zone? $4)
add
)
(verify (or (flag? came-from-zone) (in-zone? promotion-zone)))
(if enemy?
(change-type $3)
(if (in-zone? $4)
(first-empty) (convert-prisoner)
)
add
else
(add $3)
)
)
)
※(in-zone? play-zone)で盤上の駒かどうか確認します。
※空きマスまたは敵のいるマスの場合、進めます。
※敵の場合に持駒にするため、「add」の前に(prisoner-check)を呼び出します。
※桂馬で利用されます。
- 成りのない任意歩移動を定義しているブロック:(slide)
(define slide
( (verify (in-zone? play-zone))
$1
(while empty?
add
$1
)
(verify not-friend?)
(prisoner-check)
add
)
)
※(in-zone? play-zone)で盤上の駒かどうか確認します。
※空きマスまたは敵のいるマスの場合、進めます。
※敵の場合に持駒にするため、「add」の前に(prisoner-check)を呼び出します。
※竜王、竜馬で利用されます。
- 成りのある任意歩移動を定義しているブロック:(slideP)
(define slideP
( (verify (in-zone? play-zone))
(set-flag came-from-zone (in-zone? promotion-zone))
$1
(while empty?
(if (in-zone? promotion-zone)
(set-flag came-from-zone true)
)
(if (in-zone? $3)
add
)
(if (flag? came-from-zone)
(add $2)
)
$1
)
(verify not-friend?)
(prisoner-check)
(if (in-zone? $3)
add
)
(verify (or (flag? came-from-zone) (in-zone? promotion-zone)))
(if enemy?
(change-type $2)
(if (in-zone? $3)
(first-empty) (convert-prisoner)
)
add
else
(add $2)
)
)
)
※(in-zone? play-zone)で盤上の駒かどうか確認します。
※空きマスまたは敵のいるマスの場合、進めます。
※敵の場合に持駒にするため、「add」の前に(prisoner-check)を呼び出します。
※香車、飛車、角行で利用されます。
最終更新:2020年08月18日 17:40