魔法の呪文!? FlashLite1.xのActionScriptの底力を知ろう!
擬似配列を使ったデータ上のシャッフル
複数のオブジェクトやデータを一様に扱いたい場合,
今回作成する"神経衰弱ゲーム"の場合,
(1)擬似配列の作り方
いきなり”
例えば,
- 実際のflaファイルGameCard.
fla (Flash CS3用のもの, Flash 8用のもの)
ご覧いただけば分かるように各カードクリップは,
(2)各カードのマークやナンバーを保持する変数
前回の復習になるがカードクリップは,
(3)シャッフルさせるスクリプト
ゲームクリップの1フレーム目にカードをシャッフルさせるスクリプトを記述する。もっともカードそのものをシャッフルさせる必要はない。CardVal0~CardVal7に設定するフレーム番号をシャッフルさせるだけで良いのだ。
ここに記述するスクリプトは次のようなものだ。
List1 カードをシャッフルさせるスクリプト
//0~12の数列を作る・・・・・・①
for(i=0;i<13;i++){
set("Number" add i, i);
}
//適当に交換して,乱数列を作る(頭4つを利用)・・・・・・②
for(i=0;i<13;i++){
idx1 = Random( 13);
idx2 = Random( 13);
temp = Eval("Number" add idx1);
set("Number" add idx1,Eval("Number" add idx2));
set("Number" add idx2,temp);
}
//場に並ぶカードの決定・・・・・・③
for(i=0;i<4;i++){
j=i+4;
switch(Random( 6)){
case 0: //スーツ(ダイヤ×クローバ)
set("CardVal" add i,Eval("Number" add i)+2);
set("CardVal" add j,Eval("Number" add i)+15);
break;
case 1: //スーツ(ダイヤ×ハート)
set("CardVal" add i,Eval("Number" add i)+2);
set("CardVal" add j,Eval("Number" add i)+28);
break;
case 2: //スーツ(ダイヤ×スペード)
set("CardVal" add i,Eval("Number" add i)+2);
set("CardVal" add j,Eval("Number" add i)+41);
break;
case 3: //スーツ(クローバ×ハート)
set("CardVal" add i,Eval("Number" add i)+15);
set("CardVal" add j,Eval("Number" add i)+28);
break;
case 4: //スーツ(クローバ×スペード)
set("CardVal" add i,Eval("Number" add i)+15);
set("CardVal" add j,Eval("Number" add i)+41);
break;
case 5: //スーツ(ハート×スペード)
set("CardVal" add i,Eval("Number" add i)+28);
set("CardVal" add j,Eval("Number" add i)+41);
break;
}
//カードロック状態を未ロックにする・・・・・・④
set("CardLook" add i, 0);
set("CardLook" add j, 0);
}
//場に並ぶカードを切る・・・・・・⑤
for(i=0;i<20;i++){
idx1 = Random( 8);
idx2 = Random( 8);
temp = Eval("CardVal" add idx1);
set("CardVal" add idx1,Eval("CardVal" add idx2));
set("CardVal" add idx2,temp);
}
//各種フラグの初期化・・・・・・⑥
selectCard1 = -1; //1枚目にめくったカードのインデックス
selectCard2 = -1; //2枚目にめくったカードのインデックス
sameCount = 0; //揃った回数
missCount = 0; //ミスした回数
targetIndex = 0; //選択候補カードのインデックス
List1をご覧いただけばわかるように,