首页 > 代码库 > 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 }