Traversing desktop icons

(2) Programming with Modula-2

Part (1) に戻る  Part (3) に進む   Workbench に戻る
アイコンをどう記述するか

まず画面上に(x,y)座標系があると想定します。慣例により y 軸は下方を向いています。 配置パラメータ (W, H, A)に従うアイコン配置に対してID番号を割り振ります。ID番号と(x,y)を対応づけることが最初のステップです。

次に他のアイコンとの隣接状況を4成分の配列にID番号を入れて指定します。その際、隣接位置にアイコンがある・ないをやはり4成分の配列で指定します。 最後にどの隣接部位がアクティブであるかをセルごとに指定します。

アイコンの属性
TYPE
  cellType = RECORD
    x,y: INTEGER;
    neighbor: ARRAY [0..3] OF INTEGER;  (* surrounding ID *)
    dpi4: ARRAY [0..3] OF BOOLEAN;      (* possible path *)
    dircn: INTEGER;                     (*  where to move to/from *)
             END;

VAR
  Icon    : ARRAY [0.._maxSize-1] OF cellType;
アイコンの属性の確認

Icon が正しく設定されたことを H=4, W=6, A=2 の場合について確認しました。 XDS Modula-2 ではテキスト画面が使えるのでその上にデータを描いていきます。

右図の左は ID番号と(x,y)の対応を表しています。図の右はID番号を掃引しながら隣接位置が正しいことを示しています。

移動経路

前頁の折れ線矢印はID番号の移り変わりを表しています。 次の関数で実現できます。

PROCEDURE followIcons(VAR iconID: ARRAY OF INTEGER;
                       VAR sizeN: INTEGER;
                          startN: INTEGER;
                           dircn: INTEGER);
startN から dircn 方向に出発すると sizeN 個のアイコンを経てゴールします。iconID が途中のアイコンを示しています。 この中で重要な役割を果たすのが次の関数で、TRUE が返った時に次に進むIDの newN が得られます。
PROCEDURE checkNeighbor(VAR newN: INTEGER;
			   prevN: INTEGER;
		       prevdircn: INTEGER): BOOLEAN;
左上が起点の経路

左下が起点の経路>周期が12のパターンを無限に繰り返す。

10-27-2023, S. Hayashi