
ActionScript3.0で配列/数値のシャッフルや乱数生成を行う「Randomize」クラスを作成しました。
静的クラスメンバ“shuffleArray”は指定した配列要素の順序をシャッフルして返し、静的クラスメンバ“shuffle”は指定した範囲内の数値をシャッフルし配列として返します。((シャッフルの方式には Fisher-Yatesのアルゴリズムを使用しています))
静的クラスメンバ“exactRandom”は除外指定した数値以外の乱数を返し、静的クラスメンバ“range”は指定した範囲内の乱数を返します。
ファイル
使用方法
- myArrayの要素をシャッフルし、shuffledArrayへ代入する
1
2
| var myArray:Array = [1, 3, 5, 7, 9]
var shuffledArray:Array = Randomize.shuffleArray(myArray);
|
- 1~12までの数値をシャッフルし、12個の要素を持つ配列として shuffledArrayへ代入する
1
2
3
| var shuffleMin:uint = 1;
var shuffleMax:uint = 12;
var shuffledArray:Array = Randomize.shuffle(shuffleMin, shuffleMax);
|
- 1~12までの乱数を取得し、myUintへ代入する(ただし exceptUintと同じ数値である 1は返らない)
1
2
3
4
| var exceptUint:uint = 1;
var randomMin:uint = 1;
var randomMax:uint = 12;
var myUint:uint = Randomize.exactRandom(exceptUint, randomMin, randomMax);
|
- 1~12までの乱数を取得し、myUintへ代入する
1
2
3
| var randomMin:uint = 1;
var randomMax:uint = 12;
var myUint:uint = Randomize.range(randomMin, randomMax);
|
ソースコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| package net.dolice.utils{
public class Randomize {
private static var shuffleList:Array = [];
private static var shuffleNum:uint;
private static var tempList:Array = [];
private static var tempInt:int;
public static function shuffleArray(arr:Array):Array {
Randomize.shuffleList = arr;
Randomize.shuffleNum = Randomize.shuffleList.length;
while (Randomize.shuffleNum) {
var m:int = Math.floor(Math.random() * Randomize.shuffleNum);
var n:int = Randomize.shuffleList[--Randomize.shuffleNum];
Randomize.shuffleList[Randomize.shuffleNum] = Randomize.shuffleList[m];
Randomize.shuffleList[m] = n;
}
return (Randomize.shuffleList);
}
public static function shuffle(shuffleMin:int, shuffleMax:int):Array {
for (var i:uint; i<shuffleMax; i++) {
Randomize.tempList[i] = i + shuffleMin;
}
Randomize.shuffleList = Randomize.shuffleArray(Randomize.tempList);
return (Randomize.shuffleList);
}
public static function exactRandom(exceptInt:int, randomMin:int, randomMax:int):int {
do {
Randomize.tempInt = Randomize.range(randomMin,randomMax);
} while (Randomize.tempInt==exceptInt);
return (Randomize.tempInt);
}
public static function range(randomMin:int, randomMax:int):int {
var i:int = Math.floor(Math.random()*(randomMax-randomMin+1))+randomMin;
return (i);
}
}
}
|