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 }

时间: 2024-10-08 22:32:00

ActionScript 3.0 自写类整理笔记(十三)——Random类的相关文章

python cookbook第三版学习笔记十三:类和对象(三)描述器

__get__以及__set__:假设T是一个类,t是他的实例,d是它的一个描述器属性.读取属性的时候T.d返回的是d.__get__(None,T),t.d返回的是d.__get__(t,T).说法比较绕,我们来看一个实例: class Descriptor(object):     def __get__(self, instance, owner):         return 'get',self,instance,owner class T(object):     d=Descri

python cookbook第三版学习笔记十三:类和对象(五)代理类以及内存回收

代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A:     def spam(self,x):         print 'in Class A x=%d' % x     def foo(self):         print 'in Class A:foo()' class B1:     def __init__(self):         self._a=A()       

JAVA的Random类介绍

Random类 (java.util)  Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子数的Random对象,相同次数生成的随机数字是完全相同的.也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同.这点在生成多个随机数字时需要特别注意. 下面介绍一下Random类的使用,以及如何生成指定区间的随机数组以及实现

java的Random类详解

Random类是一个专门用来生成一个伪随机数的类,这个类提供了两个构造函数,一个使用默认的种子,另一个需要程序员显示传入一个long型整数的种子.与Math类中的random方法生成的伪随机数不同的是,Math的random方法生成的伪随机数取值范围是[0,1.0),Random类不仅可以生成浮点数的伪随机数,还可以生成整数类型的伪随机数,还可以指定伪随机数的范围非常好用..下面是转载的博客园中的一篇文章讲解的非常好. Random类 (java.util) Random类中实现的随机算法是伪随

JAVA的Random类(转)

Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子数的Random对象,相同次数生成的随机数字是完全相同的.也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同.这点在生成多个随机数字时需要特别注意. 下面介绍一下Random类的使用,以及如何生成指定区间的随机数组以及实现程

Random 类生成随机数

Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子数的Random对象,相同次数生成的随机数字是完全相同的.也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同.这点在生成多个随机数字时需要特别注意. 下面介绍一下Random类的使用,以及如何生成指定区间的随机数组以及实现程

java Random类详解

java Random类位于java.util包下,主要用来生成随机数,本文详解介绍了Random类的用法,希望能帮到大家 Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子数的Random对象,相同次数生成的随机数字是完全相同的.也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也

ActionScript 3.0日期与时间管理(Date类)

/*Flash中,Date类管理着日期和时间信息.要获取   当前日期,可以新建一个Date对象   */var now:Date =new Date();trace (now);     /*输出当前时间和日期,格式如:                  Sun Jul 27 19:45:57 GMT+0800 2014  */ /*以上代码中,Date对象中包括了当前的秒.分.小时.  星期数.日.月.年.时区等信息...如果仅需要返  回星期值和日期值,而不返回时间或时区,可以使用Date

(原创)c#学习笔记10--定义类成员06--示例应用程序02--编写类库

10.6.2  编写类库 类和枚举都包含在一个类库项目 Ch10CardLib 中.这个项目将包含 4 个.cs 文件,Card.cs 包含Card类的定义,Deck.cs包含Deck类的定义,Suit.cs和Rank.cs文件包含枚举. 1. \Chapter10目录中创建一个新类库项目Ch10CardLib.从项目中删除Class1.cs. 2. 添加:Suit.cs和Rank.cs文件,如下所示修改: using System; using System.Collections.Gener