蒋金阳 发表于 2009-5-15 02:05:10

Flash AS3教程:Random类

前面讲了Flash AS3教程:Level2D类,Random类是一个简单的随机函数工具类,总共提供了9种静态方法来获取不同的随机值。<br /><br />随便写的,如果你还有什么更好的建议,请提出来,谢谢~<br /><br />index.base.func.Random类:<br />代码:public final class Random<br />提供了9种静态方法来获取不同的随机值<br /><br />构造函数:<br />public function Random()<br />如果直接实例化该类,将抛出错误<br /><br />boolean静态属性:<br />public static function get boolean():Boolean<br />随机获取一个布尔值,即可能是true,也可能是false<br /><br />wave静态属性:<br />public static function get wave():int<br />随机获取一个正负波动值,即可能是1,也可能是-1<br /><br />integer静态方法:<br />public static function integer(num:Number):int<br />随机获取一个范围中的整数值<br /><br />number静态方法:<br />public static function number(num:Number):Number<br />随机获取一个范围中的Number指<br /><br />range静态方法:<br />public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number<br />isInt:表示是否以整数随机<br />随机在一个指定范围获取数值<br /><br />ranges静态方法:<br />public static function ranges(...args):Number<br />最后一个参数可以是逻辑值,用处等同于range的isInt参数,默认为true<br />随机在多个指定范围获取数值<br /><br />string静态方法:<br />public static function string(str:String = &quot;0-9,A-Z,a-z&quot;):String<br />在指定范围随机一个字符<br /><br />bit静态方法:<br />public static function bit(num:int,str:String = &quot;&quot;):String<br />在指定范围随机一个num位的字符串<br /><br />color静态方法:<br />public static function color(red:String = &quot;0-255&quot;,green:String = &quot;0-255&quot;,blue:String = &quot;0-255&quot;):uint<br />在指定范围随机一个颜色值<br /><br />举例:<br /><br />CODE:<br />import index.base.func.Random;<br /><br />trace(Random.boolean+&quot;(随机一个布尔值)&quot;);<br />trace(Random.color()+&quot;(随机一个RGB颜色值)&quot;);<br />trace(Random.color(&quot;153-255&quot;,&quot;0-100&quot;,&quot;0-100&quot;)+&quot;(随机一个偏红的RGB颜色值)&quot;);<br />trace(Random.wave+&quot;(随机一个波动值)&quot;);<br />trace(Random.string()+&quot;(随机一个字符)&quot;);<br />trace(Random.integer(4)+&quot;(随机一个int值)&quot;);<br />trace(Random.number(4)+&quot;(随机一个Number值)&quot;);<br />trace(Random.string(&quot;a-z,A-Z&quot;)+&quot;(在一个范围随机字符)&quot;);<br />trace(Random.string(&quot;我,你,他&quot;)+&quot;(在一个范围随机中文字符)&quot;);<br />trace(Random.ranges(5,4,3,-1,-10,-14,true)+&quot;(在多个指定范围随机数值)&quot;);<br />trace(Random.range(4,9)+&quot;(在一个指定范围随机数值)&quot;);<br />trace(Random.bit(8)+&quot;(随机一个八位的字符串)&quot;);<br />trace(Random.bit(16,&quot;0-1&quot;)+&quot;(随机一个十六位的二进制)&quot;);<br />trace(&quot;…………&quot;)<br /><br />//生成一个偏红的颜色色块<br />var sh:Shape = new Shape();<br />var rgb:uint = Random.color(&quot;204-255&quot;,&quot;0-153&quot;,&quot;0-153&quot;);<br />trace(rgb1.toString(16));<br />sh.graphics.beginFill(rgb);<br />sh.graphics.drawRect(100,100,100,100);<br />addChild(sh);<br /><br />//生成一个颜色偏深或者偏淡的颜色色块<br />var sh1:Shape = new Shape();<br />var rgb1:uint = Random.color(&quot;0-20,240-255&quot;,&quot;0-20,240-255&quot;,&quot;0-20,240-255&quot;);<br />trace(rgb1.toString(16));<br />sh1.graphics.beginFill(rgb1);<br />sh1.graphics.drawRect(200,100,100,100);<br />addChild(sh1);<br /><br />/**<br />* 输出:<br />* false(随机一个布尔值)<br />* 8370486(随机一个RGB颜色值)<br />* 12322387(随机一个偏红的RGB颜色值)<br />* -1(随机一个波动值)<br />* E(随机一个字符)<br />* 3(随机一个int值)<br />* 1.0007172282785177(随机一个Number值)<br />* m(在一个范围随机字符)<br />* 我(在一个范围随机中文字符)<br />* -14(在多个指定范围随机数值)<br />* 5(在一个指定范围随机数值)<br />* idPJav1l(随机一个八位的字符串)<br />* 1010100101010100(随机一个十六位的二进制)<br />* …………<br />* dd5506<br />* fef003<br />*/<br />类源代码:<br />CODE:<br />package index.base.func{<br />      <br />      public final class Random{<br />                <br />                public function Random(){<br />                        throw new Error(&quot;随机函数工具包无法实例化!&quot;);<br />                }<br />                <br />                //获取一个随机的布尔值<br />                public static function get boolean():Boolean{<br />                        return Boolean(integer(2));<br />                }<br />                <br />                //获取一个正负波动值<br />                public static function get wave():int{<br />                        return integer(2) * 2 - 1;<br />                }<br />                <br />                //获取一个随机的范围整数值<br />                public static function integer(num:Number):int{<br />                        return Math.floor(number(num));<br />                }<br />                <br />                //获取一个随机的范围Number值<br />                public static function number(num:Number):Number{<br />                        return Math.random() * num;<br />                }<br />                <br />                //在一个范围内获取一个随机值,返回结果范围:num1 &gt;= num &gt; num2<br />                public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number{<br />                        var num:Number = number(num2 - num1) + num1;<br />                        if(isInt) num = Math.floor(num);<br />                        return num;<br />                }<br />                <br />                //在多个范围获取随机值<br />                public static function ranges(...args):Number{<br />                        var isInt:Boolean = args is Boolean ? args.pop() : true;<br />                        var num:Number = randomRange(args);<br />                        if(!isInt) num += Math.random();<br />                        return num;<br />                }<br />                <br />                //获取一个随机字符,默认随机范围为数字+大小写字母,也可以指定范围,格式:a-z,A-H,5-9<br />                public static function string(str:String = &quot;0-9,A-Z,a-z&quot;):String{<br />                        return String.fromCharCode(randomRange(explain(str)));<br />                }<br />                <br />                //生成指定位数的随机字符串<br />                public static function bit(num:int,str:String = &quot;0-9,A-Z,a-z&quot;):String{<br />                        var reStr:String = &quot;&quot;;<br />                        for(var i:int = 0; i &lt; num; i ++) reStr += string(str);<br />                        return reStr;<br />                }<br />                <br />                //获取一个随机的颜色值<br />                public static function color(red:String = &quot;0-255&quot;,green:String = &quot;0-255&quot;,blue:String = &quot;0-255&quot;):uint{<br />                        return Number(&quot;0x&quot; + transform(randomRange(explain(red,false))) +<br />                                                               transform(randomRange(explain(green,false))) +<br />                                                               transform(randomRange(explain(blue,false))));<br />                }<br />                <br />                //将10进制的RGB色转换为2位的16进制<br />                private static function transform(num:uint):String{<br />                        var reStr:String = num.toString(16);<br />                        if(reStr.length != 2) reStr = &quot;0&quot; + reStr;<br />                        return reStr;<br />                }<br />                <br />                //字符串解析<br />                private static function explain(str:String,isCodeAt:Boolean = true):Array{<br />                        var argAr:Array = new Array;<br />                        var tmpAr:Array = str.split(&quot;,&quot;);<br />                        for(var i:int = 0; i &lt; tmpAr.length; i ++){<br />                              var ar:Array = tmpAr.split(&quot;-&quot;);<br />                              if(ar.length == 2){<br />                                        var arPush0:String = ar;<br />                                        var arPush1:String = ar;<br />                                        if(isCodeAt){<br />                                                arPush0 = arPush0.charCodeAt().toString();<br />                                                arPush1 = arPush1.charCodeAt().toString();<br />                                        }<br />                                        //此处如果不加1,将不会随机ar所表示字符,因此需要加上1,随机范围才是对的<br />                                        argAr.push(Number(arPush0),Number(arPush1) + 1);<br />                              }else if(ar.length == 1){<br />                                        var arPush:String = ar;<br />                                        if(isCodeAt) arPush = arPush.charCodeAt().toString();<br />                                        //如果范围是1-2,那么整型随机必定是1,因此拿出第一个参数后,把范围定在参数+1,则就是让该参数参加随机<br />                                        argAr.push(Number(arPush),Number(arPush) + 1);<br />                              }<br />                              ar = null;<br />                        }<br />                        tmpAr = null;<br />                        return argAr;<br />                }<br />                <br />                //获取随机范围<br />                private static function randomRange(ar:Array):Number{<br />                        var tmpAr:Array = new Array;<br />                        var length:int = ar.length;<br />                        if(length % 2 != 0 || length == 0) throw new Error(&quot;参数错误!无法获取指定范围!&quot;);<br />                        //将所有可能出现的随机数存入数组,然后进行随机<br />                        for(var i:int = 0; i &lt; length / 2; i ++){<br />                              var i1:int = ar;<br />                              var i2:int = ar;<br />                              if(i1 &gt; i2){<br />                                        var tmp:Number = i1;<br />                                        i1 = i2;<br />                                        i2 = tmp;<br />                              }<br />                              for(i1; i1 &lt; i2; i1 ++) tmpAr.push(i1);<br />                        }<br />                        var num:Number = tmpAr;<br />                        tmpAr = null;<br />                        ar = null;<br />                        return num;<br />                }<br />                <br />      }<br />      <br />}<br /><br /><blockquote class="blockquote">From: http://www.photoep.cn/read.php?tid=98Powered by PHPWind.com</blockquote>
页: [1]
查看完整版本: Flash AS3教程:Random类