Action Script Math.random()応用例


サンプル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の乱数
function Rand () {
return Math.floor(Math.random()*52)+1;
}


1〜52までの乱数を得るためのfunction。




(c)2004 Tsuruji Studio
Click here to visit our sponsor