ホーム > 2010年2月

例えば10枚のイメージがあって、それを10個のオブジェクトにばらばらに貼っつけたい場合、(リロード/タイマーがかかる度にオブジェクトのイメージをシャッフルさせたいということ)どうすればいいのかね?という問題。

フツーに0~10からランダムに整数を取得して、それを10回繰り返すと同じイメージが2つ以上現れてしまう可能性が大です。絶対にイメージがかぶらないようにするにはどーすればよいのか?という問題。

どう検索すればよいのかわからずごにょごにょしましたが、「配列をランダムに生成する」、「Fisher-Yates」という方法があることを知りました。

スクリプトはこんな感じ。ここでは仮に配列の数を10コにしています。

var list:Array=[0,1,2,3,4,5,6,7,8,9]; 

var i:int=list.length;
while(i--){
var j:int=Math.floor(Math.random()*i);
var t:Number = list[i];
list[i] = list[j];
list[j] = t;

}



かなり行数が少ないキレイなスクリプトですが、何をやってるのかイマイチわからず。
list[i]の値、list[j]の値、iの値、jの値、listをトレースするとこんなかんじになりました。

i=9
j=8
list[i]=8
list[j]=9
list=0,1,2,3,4,5,6,7,9,8
i=8
j=3
list[i]=3
list[j]=9
list=0,1,2,9,4,5,6,7,3,8
i=7
j=5
list[i]=5
list[j]=7
list=0,1,2,9,4,7,6,5,3,8
i=6
j=0
list[i]=0
list[j]=6
list=6,1,2,9,4,7,0,5,3,8
i=5
j=1
list[i]=1
list[j]=7
list=6,7,2,9,4,1,0,5,3,8
i=4
j=0
list[i]=6
list[j]=4
list=4,7,2,9,6,1,0,5,3,8
i=3
j=0
list[i]=4
list[j]=9
list=9,7,2,4,6,1,0,5,3,8
i=2
j=1
list[i]=7
list[j]=2
list=9,2,7,4,6,1,0,5,3,8
i=1
j=0
list[i]=9
list[j]=2
list=2,9,7,4,6,1,0,5,3,8
i=0
j=0
list[i]=2
list[j]=2
list=2,9,7,4,6,1,0,5,3,8


おおー。処理をする度に数字が入れ替わっているのがわかります。
つまり、

while(i--){ //配列の長さ(この場合は10)から(ゼロになるまで)1を引く。
var j:int=Math.floor(Math.random()*i); //「j」は0~(i-1)までの数字のどれか
var t:Number = list[i]; //「t」は配列のi番目の数字
list[i] = list[j]; //リストのi番目にj番目の数字を代入
list[j] = t; //リストのj番目にt(=i)を代入

}

という処理を繰り返しているのですね。

いろいろ詳しく載っているページも沢山ありますが、イマイチ原理が理解できなかったのでメモメモしました。



2010年2月 8日 11:17 | コメント(0) | トラックバック(0)|


流れゆくTwitterのつぶやきを眺めるためのブログパーツ、Tweet watcherを作りました。
下のウィンドウにツイッターIDを記入して、ボタンをクリックでコードがコピーされます。


あとは好きなところに⌘Vでペースト。で、



こんなふうに表示されます。

my tweet(入力したIDの人のつぶやき)、everyone's tweet(すべてのユーザーのつぶやき)、search(単語検索)の3つのモードに切り替えられます。
searchはアルファベット以外でやるとエラーになってしまいますのでご注意ください。
実装にあたっては、swfjunkieさんのtweetrというライブラリを使わせていただきました。

いろんな言語で表示されるeveryone's tweetをぼんやり眺めたり、"avatar"とかで検索かけてみたりするとなかなか楽しいです。ユーザー名をクリックすると、その人のツイッターページに飛べます。

みなさんぺたぺたあちこちに貼ってください。
ご意見・ご感想お待ちしてまっす。


追記:みなさま貼付ありがとうございます。ちょっと直しました。リサイズされている方のトリさんがかなりかわいそうな感じになってましたので、きれいにみえるようにしました。ボタンとかもちょい大きめに。そのままのサイズで貼るとちょっと切れてしまう、という方は、お手数なのですが、タグ内のwidth="200" height="350" の数字を180・315とか、テキトーに書き換えてみてください。大きめのブログパーツなのでいろいろ不便ですよね。失礼しました。

2010年2月 1日 12:09 | コメント(0) | トラックバック(0)|