将棋のZRF:解説1

<マクロの定義1>
  • 駒台の空き位置を検索するブロック:(first-empty)
(define first-empty
 to-prison
 (while not-empty? next-prison)
)

※「to-prison」で盤上の駒を、駒台へ送ります。
※「next-prison」で駒台の次のマスへ進みます。
※(prisoner-check)から呼び出されます。

  • 持駒を生駒へ戻して所有者を変更するブロック: (convert-prisoner)
(define convert-prisoner
 change-owner
 (if (flag? bSilver) (change-type Silver))
 (if (flag? bPawn) (change-type Pawn))
 (if (flag? bBishop) (change-type Bishop))
 (if (flag? bRook) (change-type Rook))
 (if (flag? bLance) (change-type Lance))
 (if (flag? bKnight) (change-type Knight))
)

※「change-owner」で駒の所有者が交代します。
※「change-type」で成駒を生駒へ変更します。
※(prisoner-check)から呼び出されます。

  • 取った駒の種類を判別して持駒として駒台へ送るブロック:(prisoner-check)
(define prisoner-check
 (if enemy?
  (set-flag bSilver (piece? Promoted-Silver))
  (set-flag bPawn (piece? Tokin))
  (set-flag bBishop (piece? Promoted-Bishop))
  (set-flag bRook (piece? Promoted-Rook))
  (set-flag bKnight (piece? Promoted-Knight))
  (set-flag bLance (piece? Promoted-Lance))
  cascade
  mark
  (first-empty)
  to
  (convert-prisoner)
  back
 )
)

※駒の種類に応じて、フラグを立ておきます。
※(first-empty)と(convert-prisoner)を呼び出します。

※「cascade」によって、取られた駒を操作します。
※取られた駒を「to」の位置へ移動させます。

※「back」により「mark」した位置(敵駒の位置)へ戻ります。
※取った駒が「add」される位置は、「back」により敵駒の位置が最終位置となっています。


最終更新:2020年08月18日 17:27