- ベストアンサー
flashliteでランダム(シャッフル)を作りたい
- Flashlite1.0で、1~10までの数字をランダムかつ同じ数字がかぶらないように表示する方法(シャッフル)が知りたい。
- Flashliteの経験があまりなく、困っています。FlashのASは経験があるので、Flashliteの知識や経験がある方のアドバイスをお待ちしています。
- 制作環境はAdobe Flash CS3です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
説明・・・うまくできる自信ないですが^^; 不足と感じれば遠慮なく補足要求してください。 説明のためnum = 10;は定数で書かせていただきました。 for(i = 0;i < 10;i++){ set("array" add i,i);//array0=0;array1=1;array2=・・・のループ処理 } for(i=0;i<20;i++){//とりあえず20回ループ。iの値そのものに意味は無い a=random(10);b=random(10);//シャッフル用乱数を生成。シャッフルされないこともあるかも c=set("array" add a);//変数cに配列a番目の数値を保持(コピー) set("array" add a,eval("array" add b));//配列a番目にb番目の数値を上書き set("array" add b,c);//配列a番目とb番目が重複するので、保持しておいたcを代入。 } for(i = 0;i < 10;i++){ trace(eval("array" add i));//動作確認 } 初期段階ではarrayは[0,1,2,3,4,5,6,7,8,9]のようになっています。 20回の処理の中では以下のようなことが行われています。 下記数値は array[a] ,array[b] ,c の順 1,2, 乱数a,bが1,2だったとして(array1,array2について処理) 1,2,1 cにarray1("array" add a)の値を保持 2,2,1 array1にはarray2の値が入り、array1とarray2は重複 2,1,1 元のarray1の値である、cをarray2に代入することで、重複を戻す→結果的にarray1とarray2が入れ替わる 続けて2回目のループ。arrayは、[0,2,1,3,4,5,6,7,8,9]から開始 2,3, 乱数が1,3だった場合(array1,array3について処理) 2,3,2 3,3,2 3,2,2 この時点でのarrayは、[0,3,2,1,4,5,6,7,8,9] これが20回繰り返されるとある程度シャッフルされます。(たぶん十分)
その他の回答 (1)
- 15mm
- ベストアンサー率65% (65/100)
FlashCS3でFlashLite作ったことない者ですが [0,1,2,3,4,5,6,7,8,9]のようにarray0~9に代入しておき、 他の変数を介してランダムに2つずつ入れ替えるというのは・・・原始的ですね^^; 文法うろ覚えですがサンプル for(i=0;i<(シャッフル回数:20回くらいやればいいかな?);i++){ a=random(10);b=random(10);//シャッフルされないこともあるかも c=set("array" add a);//交換のためにデータ保持 set("array" add a,eval("array" add b)); set("array" add b,c); } i=0,1,2,・・・をarray?に代入する際、array?が存在するか確かめられれば楽なのですが・・・ for(i = 0;i < num;i++){ a=random(10); if(eval("array" add a)){ set("array" add a,i); }} ところでevalって使えましたかね?
補足
せっかくご返答を頂いていたのにお返事が遅くなって大変申し訳ありません。evalは使えます!ネットでいろいろ調べたところevalを使って擬似配列を作っている人もいました。スクリプトを記載して頂きまして本当にありががとう御座いました。しかしまだまだ勉強不足の私では、いろいろ解析してみたのですが、申し訳ない事にこれが何をしているのかがわからなく、もしお時間がありましたらもう少し細かい説明を頂けたら大変うれしいです。お手数お掛けしてしまって本当の申し訳ありません。
お礼
お返事遅れて本当にすみませんでした。また丁寧なご説明本当にありがとう御座いました!15mmさんのご説明でスクリプトの意味を理解でき、無事実装することができました。今回は本当にありがとう御座いました。また何かご質問させて頂く事があるかとは思いますが、その時もよろしくお願いできればと思います。失礼致します。