解説:position-flag

  • position-flag?
 その位置の位置フラグの値(「true」または「false」)を確認します。

  • (position-flag? <flag-name>)
 その位置の位置フラグ<flag-name>の値が「true」かどうかを確認します。

  • (position-flag? <flag-name> <position>)
 ある位置<position>の位置フラグ<flag-name>の値が「true」かどうかを確認します。

  • (position-flag? <flag-name> <direction>)
 ある方向<direction>の位置フラグ<flag-name>の値が「true」かどうかを確認します。

  • (not-position-flag? <flag-name>)
 その位置の位置フラグ<flag-name>の値が「false」かどうかを確認します。

  • (not-position-flag? <flag-name> <position>)
 ある位置<position>の位置フラグ<flag-name>の値が「false」かどうかを確認します。

  • (not-position-flag? <flag-name> <direction>)
 ある方向<direction>の位置フラグ<flag-name>の値が「false」かどうかを確認します。

 指定された位置における指定された位置フラグの値を返します。
 位置フラグは、「set-position-flag」を使用して設定できます。

(verify (position-flag? my-flag))
 位置フラグ<my-flag>が「true」の場合に実行します。

  • Ultimaの使用例
 コーディネーターは、コーディネーターの移動先と同じランクまたはファイルにあり、かつ味方のキングと同じランクまたはファイルにある全ての駒をキャプチャする駒です。
 つまり、コーディネーターは盤上でキングとともに矩形を形成し、矩形の他の2つの頂点にある駒がキャプチャされます。

 次のマクロでは、方向$1の直線上の全てのマスに位置フラグ<king-line>を「true」設定します。
(define make-king-line
 (while (on-board? $1)
      $1
      (set-position-flag king-line true)
 )
)
 次のマクロは、直線上に延長して、位置フラグ<king-line>が「true」に設定されているマスにいる全ての敵の駒をキャプチャします。
(define coordinate
 (while (on-board? $1)
      $1
      (if (and enemy? (position-flag? king-line)) capture)
 )
 (go to)
)

 コーディネーターの移動の開始時に、キングと同じランクまたはファイルの全てのマスに、位置フラグ<king-line>が設定されます。
 キング位置から始めて、上下左右に
(make-king-line n) back
(make-king-line e) back
(make-king-line s) back
(make-king-line w)

 コーディネーターの移動が「add」される前に、全ての直交方向でキャプチャが検索されます。
(if (not-position-flag? king-line)
   (coordinate n) (coordinate e) (coordinate s) (coordinate w)
)
add




最終更新:2020年08月29日 02:21