首页 > 代码库 > ActionScript 3.0 自写类整理笔记(十三)——Random类

ActionScript 3.0 自写类整理笔记(十三)——Random类

一个简单的随机函数工具类,总共提供了9种静态方法来获取不同的随机值
随便写的,如果你还有什么更好的建议,请提出来,谢谢~

index.Random类:
代码:public final class Random
提供了9种静态方法来获取不同的随机值

构造函数:
public function Random()
如果直接实例化该类,将抛出错误

boolean静态属性:
public static function get boolean():Boolean
随机获取一个布尔值,即可能是true,也可能是false

wave静态属性:
public static function get wave():int
随机获取一个正负波动值,即可能是1,也可能是-1

integer静态方法:
public static function integer(num:Number):int
随机获取一个范围中的整数值

number静态方法:
public static function number(num:Number):Number
随机获取一个范围中的Number指

range静态方法:
public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number
isInt:表示是否以整数随机
随机在一个指定范围获取数值

ranges静态方法:
public static function ranges(...args):Number
最后一个参数可以是逻辑值,用处等同于range的isInt参数,默认为true
随机在多个指定范围获取数值

string静态方法:
public static function string(str:String = "0-9,A-Z,a-z"):String
在指定范围随机一个字符

bit静态方法:
public static function bit(num:int,str:String = ""):String
在指定范围随机一个num位的字符串

color静态方法:
public static function color(red:String = "0-255",green:String = "0-255",blue:String = "0-255"):uint
在指定范围随机一个颜色值

举例:

 1 import index.Random;
 2 trace(Random.boolean+"(随机一个布尔值)");
 3 trace(Random.color()+"(随机一个RGB颜色值)");
 4 trace(Random.color("153-255","0-100","0-100")+"(随机一个偏红的RGB颜色值)");
 5 trace(Random.wave+"(随机一个波动值)");
 6 trace(Random.string()+"(随机一个字符)");
 7 trace(Random.integer(4)+"(随机一个int值)");
 8 trace(Random.number(4)+"(随机一个Number值)");
 9 trace(Random.string("a-z,A-Z")+"(在一个范围随机字符)");
10 trace(Random.string("我,你,他")+"(在一个范围随机中文字符)");
11 trace(Random.ranges(5,4,3,-1,-10,-14,true)+"(在多个指定范围随机数值)");
12 trace(Random.range(4,9)+"(在一个指定范围随机数值)");
13 trace(Random.bit(8)+"(随机一个八位的字符串)");
14 trace(Random.bit(16,"0-1")+"(随机一个十六位的二进制)");
15 trace("…………")
16 
17 //生成一个偏红的颜色色块
18 var sh:Shape = new Shape();
19 var rgb:uint = Random.color("204-255","0-153","0-153");
20 trace(rgb1.toString(16));
21 sh.graphics.beginFill(rgb);
22 sh.graphics.drawRect(100,100,100,100);
23 addChild(sh);
24 
25 //生成一个颜色偏深或者偏淡的颜色色块
26 var sh1:Shape = new Shape();
27 var rgb1:uint = Random.color("0-20,240-255","0-20,240-255","0-20,240-255");
28 trace(rgb1.toString(16));
29 sh1.graphics.beginFill(rgb1);
30 sh1.graphics.drawRect(200,100,100,100);
31 addChild(sh1);
32 
33 /**
34  * 输出:
35  * false(随机一个布尔值)
36  * 8370486(随机一个RGB颜色值)
37  * 12322387(随机一个偏红的RGB颜色值)
38  * -1(随机一个波动值)
39  * E(随机一个字符)
40  * 3(随机一个int值)
41  * 1.0007172282785177(随机一个Number值)
42  * m(在一个范围随机字符)
43  * 我(在一个范围随机中文字符)
44  * -14(在多个指定范围随机数值)
45  * 5(在一个指定范围随机数值)
46  * idPJav1l(随机一个八位的字符串)
47  * 1010100101010100(随机一个十六位的二进制)
48  * …………
49  * dd5506
50  * fef003
51  */

类源代码:

  1 package com
  2 {
  3 
  4     public final class Random{;
  5 
  6     public function Random()
  7     {
  8         throw new Error("随机函数工具包无法实例化!");
  9     }
 10 
 11     //获取一个随机的布尔值
 12     public static function get boolean():Boolean
 13     {
 14         return Math.random() < 0.5;
 15     }
 16 
 17     //获取一个正负波动值
 18     public static function get wave():int
 19     {
 20         return boolean ? 1 : -1;
 21     }
 22 
 23     //获取一个随机的范围整数值
 24     public static function integer(num:Number):int
 25     {
 26         return Math.floor(number(num));
 27     }
 28 
 29     //获取一个随机的范围Number值
 30     public static function number(num:Number):Number
 31     {
 32         return Math.random() * num;
 33     }
 34 
 35     //在一个范围内获取一个随机值,返回结果范围:num1 >= num > num2
 36     public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number
 37     {
 38         var num:Number = number(num2 - num1) + num1;
 39         if (isInt)
 40         {
 41             num = Math.floor(num);
 42         }
 43         return num;
 44     }
 45 
 46     //在多个范围获取随机值
 47     public static function ranges(...args):Number
 48     {
 49         var isInt:Boolean = args[args.length - 1] is Boolean ? args.pop():true;
 50         var num:Number = randomRange(args);
 51         if (! isInt)
 52         {
 53             num +=  Math.random();
 54         }
 55         return num;
 56     }
 57 
 58     //获取一个随机字符,默认随机范围为数字+大小写字母,也可以指定范围,格式:a-z,A-H,5-9
 59     public static function string(str:String = "0-9,A-Z,a-z"):String
 60     {
 61         return String.fromCharCode(randomRange(explain(str)));
 62     }
 63 
 64     //生成指定位数的随机字符串
 65     public static function bit(num:int,str:String = "0-9,A-Z,a-z"):String
 66     {
 67         var reStr:String = "";
 68         for (var i:int = 0; i < num; i ++)
 69         {
 70             reStr +=  string(str);
 71         }
 72         return reStr;
 73     }
 74 
 75     //获取一个随机的颜色值
 76     public static function color(red:String = "0-255",green:String = "0-255",blue:String = "0-255"):uint
 77     {
 78         return Number("0x" + transform(randomRange(explain(red,false))) +
 79                                          transform(randomRange(explain(green,false))) +
 80                                          transform(randomRange(explain(blue,false))));
 81     }
 82 
 83     //将10进制的RGB色转换为2位的16进制
 84     private static function transform(num:uint):String
 85     {
 86         var reStr:String = num.toString(16);
 87         if (reStr.length != 2)
 88         {
 89             reStr = "0" + reStr;
 90         }
 91         return reStr;
 92     }
 93 
 94     //字符串解析
 95     private static function explain(str:String,isCodeAt:Boolean = true):Array
 96     {
 97         var argAr:Array = new Array  ;
 98         var tmpAr:Array = str.split(",");
 99         for (var i:int = 0; i < tmpAr.length; i ++)
100         {
101             var ar:Array = tmpAr[i].split("-");
102             if (ar.length == 2)
103             {
104                 var arPush0:String = ar[0];
105                 var arPush1:String = ar[1];
106                 if (isCodeAt)
107                 {
108                     arPush0 = arPush0.charCodeAt().toString();
109                     arPush1 = arPush1.charCodeAt().toString();
110                 }
111                 //此处如果不加1,将不会随机ar[1]所表示字符,因此需要加上1,随机范围才是对的
112                 argAr.push(Number(arPush0),Number(arPush1) + 1);
113             }
114             else if (ar.length == 1)
115             {
116                 var arPush:String = ar[0];
117                 if (isCodeAt)
118                 {
119                     arPush = arPush.charCodeAt().toString();
120                 }//如果范围是1-2,那么整型随机必定是1,因此拿出第一个参数后,把范围定在参数+1,则就是让该参数参加随机
121                 argAr.push(Number(arPush),Number(arPush) + 1);
122             }
123             ar = null;
124         }
125         tmpAr = null;
126         return argAr;
127     }
128 
129     //获取随机范围
130     private static function randomRange(ar:Array):Number
131     {
132         var tmpAr:Array = new Array  ;
133         var length:int = ar.length;
134         if (length % 2 != 0 || length == 0)
135         {
136             throw new Error("参数错误!无法获取指定范围!");
137         }//将所有可能出现的随机数存入数组,然后进行随机
138         for (var i:int = 0; i < length / 2; i ++)
139         {
140             var i1:int = ar[i * 2];
141             var i2:int = ar[i * 2 + 1];
142             if (i1 > i2)
143             {
144                 var tmp:Number = i1;
145                 i1 = i2;
146                 i2 = tmp;
147             }
148             for (i1; i1 < i2; i1 ++)
149             {
150                 tmpAr.push(i1);
151             }
152         }
153         var num:Number = tmpAr[integer(tmpAr.length)];
154         tmpAr = null;
155         ar = null;
156         return num;
157     }
158 
159 }
160 
161 }