2次元の擬似配列をあやつる!

ピースクリップに対応する変数
前回,ステージクリップに,図1のようにインスタンス名を付けてピースクリップを配置したが,次に,各ピースクリップに対応する変数を用意し,この変数に,各ピースクリップが表示するピースが置かれたフレーム番号を格納する。この変数とピースクリップを関連付けるために擬似配列を用いる。これは,以前のレクチャーでカードゲーム(神経衰弱)を作る時に,各カードのスーツ及びナンバーを示すフレーム番号を管理した方法と同じ手法だ。ただし,15パズルのピースは,縦横2次元に動くため,管理方法は,もう少し複雑になる。擬似配列も2次元で考える必要が出て来る訳だ。
各ピースクリップと表示するピースが置かれたフレーム番号を保持する変数の対応をまとめると表1のようになる。下2桁の数字で対応を表していることが,見て取れると思う。この下2桁の数字1桁ずつが,2次元配列の縦横のインデックスを表している。
表1 ピースクリップの各インスタンスとその制御のための変数の対応
| インスタンス名 | 対応する変数名 | 設定する初期値 |
|---|---|---|
| p00 | v00 | 1 |
| p01 | v01 | 2 |
| p02 | v02 | 3 |
| p03 | v03 | 4 |
| p10 | v10 | 5 |
| p11 | v11 | 6 |
| p12 | v12 | 7 |
| p13 | v13 | 8 |
| p20 | v20 | 9 |
| p21 | v21 | 10 |
| p22 | v22 | 11 |
| p23 | v23 | 12 |
| p30 | v30 | 13 |
| p31 | v31 | 14 |
| p32 | v32 | 15 |
| p33 | v33 | 16 |
この対応付けは,メインとなるFlashムービー(以下,シーン1)の2フレーム目のフレームアクションによって,次のように行なう。
リスト1 各ピースクリップを変数の対応付けるスクリプト
k = 1;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
set ("/:v" add i add j, k++);
tellTarget ("stage/p" add i add j) {
gotoAndStop (eval ("/:v" add ../../:i add ../../:j));
}
}
}
リスト1のように2重のfor文で変数iおよびjをそれぞれ0,1,2,3と変化させて,add演算子によって文字列 "/:v" として連結し変数名とする。これにset関数を使って初期値をセットし,同様に文字列 "stage/p" にi,jを連結してインスタンス名とする。こうして名前の下2桁で対応するピースクリップと変数の組ができる。ここでピースクリップの表示フレームを対応する変数の値で設定すると,図3のように一枚の完成画のようにピースが並ぶことになる。
実際のゲームではここで操作ガイドを表示し,5キーの押下を待って16番目のピースを一枚抜いて空きを作り,シャッフルした上で,ゲーム開始となる。




