いつもお世話になります。今回ご質問させて頂く内容はFlashlite1.0で、1~10までの数字をランダムかつ同じ数字がかぶらないように表示する方法(シャッフル)です。Flashlite2.0からは配列が使え、考えればシャッフルする方法もあったのですが、1.0ですと配列が使えない為やり方がわかりません。FlashのASは経験あるのですが、Flashliteの知識や経験があまりなく困っております。どなたかお教え頂けたらと思います。
具体的な内容なのですが、今作ったスクリプトが以下です。iという文字にsetを使い擬似配列(?)を組みarray0~array9という変数をランダムな数字で表すといったスクリプトを組んだのですが、これだとランダムなので同じ数字が何回も出てきてしまいます。これを同じ数字は省いてダブる数字が無いようにしたいと思っています。
▼スクリプト▼
num = 10;
for(i = 0;i < num;i++){
set("array" add i,random(10));
}
// 確認用
trace(array0);
trace(array1);
trace(array2);
trace(array3);
trace(array4);
trace(array5);
trace(array6);
trace(array7);
trace(array8);
trace(array9);
お手数お掛けして申し訳ありません。どなたかお教え頂ける方がいらっしゃいましたらよろしく御願い致します。
制作環境はAdobe Flash CS3です。
No.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回繰り返されるとある程度シャッフルされます。(たぶん十分)
お返事遅れて本当にすみませんでした。また丁寧なご説明本当にありがとう御座いました!15mmさんのご説明でスクリプトの意味を理解でき、無事実装することができました。今回は本当にありがとう御座いました。また何かご質問させて頂く事があるかとは思いますが、その時もよろしくお願いできればと思います。失礼致します。
No.1
- 回答日時:
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を使って擬似配列を作っている人もいました。スクリプトを記載して頂きまして本当にありががとう御座いました。しかしまだまだ勉強不足の私では、いろいろ解析してみたのですが、申し訳ない事にこれが何をしているのかがわからなく、もしお時間がありましたらもう少し細かい説明を頂けたら大変うれしいです。お手数お掛けしてしまって本当の申し訳ありません。
補足日時:2008/09/13 08:34お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# c言語について array[i]-‘0’ これってどーゆー意味ですか? (ちなみに16進数を10進数 5 2022/12/06 18:39
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino プログラムについて
-
スマホでサイトの画像を長押し→...
-
この曲はなんでしょう?
-
フラッシュゲームアーカイブ2
-
Flashは2020年にサポートが終了...
-
potplayerについて質問です
-
ボカロ動画はFlash?HTML5?
-
flash (.swf) を編集したい
-
FLASHでゲームを作っていた人は...
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでボタンを押すと画像をラン...
-
配列の要素番号を取得するには?
-
VB.NET の配列の要素数
-
重複しない乱数整数を発生させる。
-
IDの自動採番について
-
DataGridでCTRLキーを押さずに...
-
重複しない乱数の生成
-
複数の変数宣言を、for文で一気...
-
C言語のsizeof(サイズオブ)演算...
-
変な質問ですみません、n番目の...
-
Vba 配列の中の特定文字列の位...
-
FlashソフトSuzukaで、トランプ...
-
VB6 複数行のテキストをリスト...
-
簡単な当たり判定作りたい
-
【数字ランダム】計算問題ラン...
-
絵を描き、その都度のxy座標を...
-
問題がランダムに出るクイズ
-
String.prototype.split2d 理...
-
ヒープソートの問題について
-
景品パネルの作り方
おすすめ情報