|
サンプルFLA GAME等では乱数を使うことがよくあるのでMath.random()を使用します。 Math.random()による乱数は前に出た数字が続けて出ることもあり例えば 100回繰り返すと1〜100までの数字が各1回出現するわけではありません。 ムービーの構造によっては1〜100までを1回ずつ出現させる必要がありますので その場合はシャッフルの考え方を使用します。 もしトランプの神経衰弱を作るとなると最大で1〜13が4種類で合計52枚の カードが必要ですね。 これらをランダムに並べ替える時はシャッフルを使います。とは言ってもAction Scriptに「シャッフル」という命令はありませんので配列とFOR文等で処理します。 //シャッフルの回数 kaisuu=100 変数kaisuuにシャッフルの回数を代入します。少なすぎるとカードの混ざり具合が 悪くなります。 //配列を宣言 a=[52] 1〜52までの数を入れ替えるための入れ物を用意します。 配列でなく52個の変数でも可能ですが配列は色々な操作が可能なので 積極的に使ったほうがいいと思います。 //配列1〜52に1〜52を入れる for(i=1;i<=52;i++){ a[i]=i } 用意した入れ物にとりあえず1〜52までを入れてやる。 //シャッフル for(i=0;i<=kaisuu;i++){ r1=Rand() //変数1に配列a[r1]を代入 s1=a[r1] r2=Rand() //変数2に配列a[r2]を代入 s2=a[r2] //配列a[r1]と配列a[r2]が入れ替わる a[r1]=s2 a[r2]=s1 } この部分で先ほど入れ物に入れた1〜52を入れ替えます。 FOR文ではFOR文内のScriptを100回繰り返すようにしています。 r1=Rand()は乱数を変数1に代入しています。ここでは仮に10だとします。 すると、s1=a[r1]では入れ替え用変数1s1には10番目の入れ物の値が入ります。 r2=Rand()は乱数を変数2に代入しています。ここでは仮に20だとします。 すると、s2=a[r2]では入れ替え用変数2s2には20番目の入れ物の値が入ります。 a[r1]=s2;a[r2]=s1はそれらの入れ替えを行っています。 これらの処理を100回行うことでシャッフルしています。 //配列の値を変数に代入 for(i=1;i<=52;i++){ eval("frame"+i)=a[i] } シャッフルによりバラバラになった数を変数に代入します。 //カード番号表示 for(i=1;i<=52;i++){ eval("c"+i).gotoAndStop(eval("frame"+i)) } サンプルFLAを見てもらえばわかりますが52枚のカードは1つのMCを使用しています。 MC内に52フレーム用意してスペードは1〜13フレーム、ハートは14〜26フレーム、 クローバーは27〜39フレーム、ダイヤは40〜52フレームとしてますので例えば インスタンス名c1のフレーム1が指定されたら左上のカードはスペードの1が表示されます。 //1〜52の乱数 |