移動ブロック

<移動ブロックの内部処理>
 「移動プリミティブ」を、(リバーシにおける移動として単一の駒の反転など、)何らかの方法で位置を変更する生成された移動の基本要素として定義します。

 次のセクションでは、移動の内部処理について説明します。
  • 移動の生成時に「移動プリミティブ」がどのように書き出されるか
  • プレイされた移動では、どのように実行されるか
  • 移動エントリとアニメーションにどのように影響するか
  • 移動コードで定義されたデータがクリアされる時


  • 移動の生成

 移動の生成と、ボード上でのプレイの違いが重要です。
 「move」または「drop」ブロックでは、移動を生成するロジックを設定します。
 ZoGが指定された位置での移動のリストを必要とするたびに、移動が生成されます。
 「add」によって移動が生成されると、合法な移動のリストに配置されます。
 その時点では実際にはボードでプレイされておらず、実際にプレイされることはありません。

 移動生成ロジック内では、ボードの状態を参照するため、これは重要です。
 現在の位置は占有されていますか?
 また、移動ロジックの変更はこの時点では適用されません。
 例えば、移動の一部として行うキャプチャはまだ行われていません。
 合法として生成されている移動は、決して実行されない場合があり、その場合キャプチャは発生しません。

  • 命令された「移動プリミティブ」は、移動内で再生されます。

 移動の生成時に「add」「add-copy」「add-copy」「add-copy-partial」が発生すると、「移動プリミティブ」は次の順序で(最初から最後まで)書き込まれます。

①add
②add-copy
③add-partial
④add-copy-partial
⑤cascade
⑥change-type
⑦create
⑧flip
⑨change-owner
⑩set-attribute
⑪capture

 これらは、書き込まれた順序で内部的に実行されます。
 つまり、ボード上や探索で実際に移動が行われる時、まず移動(昇格と、移動の結果としてのキャプチャを含む)、次に全ての駒の変更、最後に全ての「capture」でのキャプチャが行われます。
 同じレベル内では、順序は保証されません。
(例えば、駒を「create」し、それから「flip」する動きを当てにすべきではありません)

 「cascade」を使用して、1つの移動内で複数のピースの移動を定義すると、これらの移動は全て同時に実行されます。
 最初に全ての駒がピックアップされ、次に全ての着手した駒が取り除かれ、次に駒が再びセットされます。
 これにより、(「15パズル:Rotate 9」では、)移動する駒がキャプチャされることを心配する必要なく、駒のセットを回転できます。

  • キー移動プリミティブ

 移動における最初の「移動プリミティブ」は、「キー移動プリミティブ」として定義されます。
 例えば、チェスでは「キャスリング」のキングの動きが最初に「cascade」で「add」されるため、「キー移動プリミティブ」になります。
 ルークの動きは、「cascade」の後に「add」されます。
 「cascade」がない場合、「キー移動プリミティブ」は「add」になります。

 ユーザーのクリックが移動と一致するかどうかを判断する場合、「キー移動プリミティブ」の部分のみが一致します。
 「キー移動プリミティブ」が、まずアニメーション化されます。
 それから、他の全ての「移動プリミティブ」が、出現する順序でアニメーション化されます。

  • 移動データがリセットされる時

 移動生成では、ZoGは現在の状態を追跡し、「add」コマンドが検出された時に、移動の一部として書き出されるキャプチャやその他のアクションのリストを作成します。
 これらの状態とリストは、移動生成の間、様々なタイミングでクリアまたはリセットされます。

 以下は、移動生成において、移動が「add類」された後にリセットされます。

①change-type
②flip
③create
④change-owner
⑤set-attribute
⑥capture
⑦cascade
(ただし、「discard cascades:カスケードの破棄」オプションが「true」に設定されている場合)

 以下は、各「cascade」または「add類」の後にリセットされます。

①from
②to

 以下は、移動生成ブロックの開始時にリセットされます。
 「移動生成ブロック」(または単に「移動ブロック」)は、「moves」あるいは「drops」内で「()」で囲まれたセクションです。

①mark position
②position flag
③cascade
(ただし、「discard cascades:カスケードの破棄」オプションが「false」に設定されている場合)

  • (moves)内や(drops)内では、並列で複数の移動を設定できます。
 個々の「move」や「drop」はお互いに影響を受けません。
 つまり、それぞれ別個の移動方法になります。
 「add-partial」や「add-copy-partial」によって、同じ手番内に複数の移動を実行できます。

  • 同一の「move」内や「drop」内でも、複数の「add」類を利用して、直列で複数の移動を設定できます。
 直前の「add」類までの移動の影響を受けます。
 つまり、駒取りや駒の変更などの移動の結果が累積され、「add」類された位置から開始となります。

  • どちらで設定しても、設定された「add」類の数だけ、手番時に駒の移動の選択肢(駒の移動範囲、駒の利き)として表示されます。
 ただし、王手放置になるなど、非合法手は無効な移動となり、選択肢として表示されません。



最終更新:2020年08月30日 12:44