トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ランダムに配列等から値を取得
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tkm
Åê¹ÆNo.30559
投稿日時: 2006-12-6 12:35
新米
居住地: 関西
投稿: 6
使用環境:
MAC OSX
Flash8
ランダムに配列等から値を取得
はじめまして。

ふと疑問に思った事なのですが、
例えば配列等に値を1?100迄を入れておいたとして、
この値をランダムに1?100かぶらないよう一度だけ取り出すのは
どのようにしたら良いのでしょうか?

やはり Math.random() で取り出した値を一度別に格納しておいて、
その値を元に条件分岐でもし取り出し済みの値であれば再度値を取得、といった感じなのか…

これが出来ればいろいろな事に応用出来るなぁと
思っているのですが、上記のような力技しか思いつかず。
もっとスマートな方法が絶対にある!
と思い投稿させて頂きました。

まだスクリプトを書き出したばかりの初心者なので、どうにも…
もし別の方法等をご存知の方はご教授下さい。

何卒宜しくお願い致します。

開発環境は OSX10.4 Flash8 です。

野中文雄
Åê¹ÆNo.30561
投稿日時: 2006-12-6 12:44
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ランダムに配列等から値を取得
配列をシャッフルして、頭から順に取出せばよいと思います。
引用:
tMiyakeさんは書きました:
ふと疑問に思った事なのですが、
例えば配列等に値を1?100迄を入れておいたとして、
この値をランダムに1?100かぶらないよう一度だけ取り出すのは
どのようにしたら良いのでしょうか?


----------------
 

Tonpoo (gaienboy改め)
Åê¹ÆNo.30562
投稿日時: 2006-12-6 13:07
職人
居住地: 東京・神宮前
投稿: 717
使用環境:
Windows 7 Professional,
Flash CS5 Pro,
Flash Player 10,1,102,64
Re: ランダムに配列等から値を取得
こんにちは、gaienboyといいます。
引用:
tMiyakeさんは書きました:
例えば配列等に値を1?100迄を入れておいたとして、
この値をランダムに1?100かぶらないよう一度だけ取り出すのは
どのようにしたら良いのでしょうか?

アクションが起こるたびに、「0?配列の長さ」の中のランダムな位置の値を配列から抜き出していってやればできるのではないでしょうか?
var my_array:Array = new Array();
for(var i:Number=0;i<100;i++){
	my_array[i] = i;
}

btn_mc.onRelease = function():Void{
	var splicePosition:Number = Math.floor(Math.random()*my_array.length);
	var spliceValue = my_array.splice(splicePosition,1);
	trace(spliceValue);
};

・・・って書いてたら野中先生に先を超されました(笑)。


----------------
Tonpoo (a.k.a. gaienboy)
Tonpoo.com / TONPOOBLOG / twitter@tonpootwit

kuromassa
Åê¹ÆNo.30563
投稿日時: 2006-12-6 13:45
半人前
居住地: 北東北
投稿: 33
使用環境:
Windows 7 Professional

:Flash CS4: Flash CS4

Browser: IE10/Firefox22.0/Safari5/GoogleChrome 28.0.1500.72

FlashPlayer10-11
Re: ランダムに配列等から値を取得
kuromassaと申します。

引用:
//----------------------------------------------------------
//0-99配列(100配列)
var rmd100 = new Array(100);
var X = new Array(100);
var chkVal = -1; //ありえない数を初期値
var limitVal = 99;
//初期化のため100配列に添え字分+1の数を入れておく
for (var i = 0; i<100; i++) {
X[i] = i+1;
}
//重複を回避したランダム
for(var i=0; i<100; i++){
chkVal = Math.round(Math.random()*limitVal);
rmd100[i] = X[chkVal];
X[chkVal] = X[limitVal];
limitVal--;
}
//ランダムな順番になった配列rmd100の中身表示
for (var i = 0; i<100; i++) {
trace("NO." + (i+1) + ":" + rmd100[i]);
}
//----------------------------------------------------------

もう先越されてる?
ってみなさんのスクリプトのほうが簡単な記述だなぁ?
まだまだ勉強足りないですね・・・。
tkm
Åê¹ÆNo.30685
投稿日時: 2006-12-10 5:24
新米
居住地: 関西
投稿: 6
使用環境:
MAC OSX
Flash8
Re: ランダムに配列等から値を取得

引用:

野中文雄さんは書きました:
配列をシャッフルして、頭から順に取出せばよいと思います。


配列はシャッフルが可能なのですか!?
ランダムにシャッフルできたらものすごい便利そうですね・・・

もし宜しければ方法を教えていただけないでしょうか?
よろしくお願いいたします。
tkm
Åê¹ÆNo.30686
投稿日時: 2006-12-10 5:29
新米
居住地: 関西
投稿: 6
使用環境:
MAC OSX
Flash8
Re: ランダムに配列等から値を取得
ご教授いただき有難うございます。

var my_array:Array = new Array();
for(var i:Number=0;i<100;i++){
	my_array[i] = i;
}

btn_mc.onRelease = function():Void{
	var splicePosition:Number = Math.floor(Math.random()*my_array.length);
	var spliceValue = my_array.splice(splicePosition,1);
	trace(spliceValue);
};


うわぁ・・・
.spliceを完全に忘れておりました。
Arrayのメソッドは以外に多くて、まだ頭に入っていなかったりします・・・ orz

まさにコレです!
有難う御座いました。
野中文雄
Åê¹ÆNo.30687
投稿日時: 2006-12-10 7:45
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ランダムに配列等から値を取得
青い文字はリンクを示します。リンク先をご覧ください。
引用:
tMiyakeさんは書きました:
もし宜しければ方法を教えていただけないでしょうか?


----------------
 

tkm
Åê¹ÆNo.30713
投稿日時: 2006-12-11 15:05
新米
居住地: 関西
投稿: 6
使用環境:
MAC OSX
Flash8
Re: ランダムに配列等から値を取得
すみません。
リンクだと気付いておりませんでした…
申し訳ないです。

早速参考にさせて頂きます。
有り難うございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops