flash随机数.doc_第1页
flash随机数.doc_第2页
flash随机数.doc_第3页
flash随机数.doc_第4页
flash随机数.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用flash脚本语言做,场景中放一个按钮和一个动态文本,变量名为a,效果为:点1下按钮,产生一个1-10的随机数字,不重复,将这个数字由动态文本出示,10个数字都出现过后停止,(也就是点击10次按钮后无效),var numArr:Array = 1,2,3,4,5,6,7,8,9,10;function getNum() if(numArr.length=0) return -1; return numArr.splice(Math.floor(Math.random()*numArr.length),1)0;上以代码,每次想要得到一个110之间的数字时就调用一个getNum();其返回值就是了。当返回值为-1时,则说明产生了10个数字了,此时将按钮的enabled设置成false即可。由于考虑as2.0与as3.0的问题,代码写成as2.0和as3.0都适用的了var numArr:Array = 1,2,3,4,5,6,7,8,9,10;function getNum() if(numArr.length=0) return -1; return numArr.splice(Math.floor(Math.random()*numArr.length),1)0;button.onRelease = function()var num = getNum();if(num0)button.enabled = false;return;a = num;以上代码复制至帧即可其他回答 共1条 var pressDown=true/btn是按钮事例名,学习群66982752btn.onRelease=function() if(pressDown) /停止脚本 else /播放 pressDown=!pressDownrandom 写不重复随机数的方法目的:一个类似洗牌的操作,即随机产生54个不重复的数原理:地上有一排砖,共54块,每块上都按顺序标着号码,1,2,3,4,5,6,7.。54,拿一个54面的骰子,一扔,按照得到的数取走其中一块按顺序从头开始摆放到另一个地方。实现方法:建立两个数组,pai1与pai2,pai1是动态数组,pai2是有54个元素的整型数组,先将pai1按0-53赋值,然后随机产生一个0-53的整数,以该随机数为下标从pai1数组中取元素,按顺序赋值给pai2数组,然后删除pai1中已取走的元素,重复该动作,直到取完pai1里的数!与别的方法比较,我的方法只需要取54次随机数,就可以得到想要的结果,而不是靠循环找非,浪费资源!源代码(可直接复制测试):import java.util.*;class puke2public static void main(String args)Random r=new Random();ArrayList pai1=new ArrayList();int pai2=new int54;int k=0,pai1chang=54,pai2biao=0;for(int i=0;i54;i+)pai1.add(i);for(int i=0;i54;i+)k=r.nextInt(pai1chang); pai2pai2biao=pai1.get(k); pai1.remove(k); pai1chang-; pai2biao+;for(int i=0;i=1000)play();delete this.onEnterFrame;方法二:stop();/设置停顿时间,单位毫秒var loadTime=setInterval(playMC,1000);function playMC()play();clearInterval(loadTime);用来产生 6-20 之间的 5 个不重复的随机数1): 首先产生一个随机数 , 放在数组对象中的第一个位置2): 产生一个新的随机数3): 检查新产生的随机数和所有目前已产生的随机数是否相同 , 若是相同则返回 (2), 否则返回 (4)4): 将新的随机数加入数组对象中下一个数组元素内5): 检查数组对象个数是否已达到 5 个 , 若是跳到 (6), 否则返回 (2)6): 结束AS 如下 :data1=newArray(5);tot=1;data1=tot-1=random(20-6+1)+6;dogen_data=random(20-6+1)+6;reapeat_data=0;for(i=0,i=tot-1;i+)if(gen_data=datareapeat_data=1;break;if(reapeat_data=0)tot+datatot-1=reapeat_data;while(tot5);trace(data1);function RandomArray(n:int):Array var my_array:Array=new Array();var i:int=0;for (i=0; in; i+) my_array.push(i);for (i=0; in; i+) var tmp1:int=Math.random()*n;var tmp2:int=my_arrayi;my_arrayi=my_arraytmp1;my_arraytmp1=tmp2;return my_arraytrace(RandomArray(100);ss在一个红绿灯测试试验中,当绿灯过了出现黄灯的时候,开始随机出现一个时间,车在这个规定的时间内行驶得分,一旦超过这个时间,红灯出现,以前的积分都处为0,否则本次积分累计到总分。一个人十次测验,每次使用的行驶距离即为刚才出现的10个数中的一个(当然这个行驶距离是看不见的),分数最大的取胜。算法的关键是产生十个不同的随机数,并分10次随机取出这10个随机数(10个随机数固定下来以后,每位测试者都使用这十位,但这十个数字出现的次序不能相同)。需要注意的是,如果从1-10之间来随机产生10个不同的数字是非常困难的,往往等好长时间不能得到结果,所以要随机数范围,将整数部分减去,留下个位数部分的做法比较快。产生10个不同的随机数AS脚本如下:var inttemp=0;int_array=new Array(10);int_array1=Math.round(Math.random()*80+20);var count=1;var flags=0;dointtemp=Math.round(Math.random()*80+20);for(i=1;i=count;i+)if(int_arrayi=inttemp) flags=1;/标示是否发现重复数字,如发现跳出 break; if(flags=0)/没有发现重复数字,则记录下来 count=count+1; int_arraycount=inttemp; flags=0;while(count10) gen_data=gen_data-10;/求余也可 for(tt=1;tt=tot;tt+) if(gen_data=data1tt) flag=1; break; if(flag=0) tot=tot+1; data1tot=gen_data; flag=0;while(tot10); out1_txt=int_arraydata11;out2_txt=int_arraydata12;out3_txt=int_arraydata13;out4_txt=int_arraydata14;out5_txt=int_arraydata15;out6_txt=int_arraydata16;out7_txt=int_arraydata17;out8_txt=int_arraydata18;out9_txt=int_arraydata19;out10_txt=int_arraydata110;stop();显示在6个动态文本里,要求是从1到33的随机数,不重复/as2代码/分别给动态文本命名为t1,t2,t3,t4,t5,t6i=1 /记录多少次获得不同随机数function is_cf(vars) for(u=1;u6;u+) / 判断次数,只需前5次不同 if (vars = eval(t+u).text) /如果有相同 is_cf(Math.round(Math.random(33)*33); /重新获得随机数 if (i7) /获得多少次不同的数字 eval(t+i).text = vars; /给动态文本赋值 i+; /记录赋值次数 is_cf(Math.round(Math.random(33)*33) is_cf(Math.round(Math.random(33)*33)筛选型随机数 如希望取099的随机数,但不能是6。 解决方法: x=random(100); while(x=6) x=random(100); 又如希望取099的随机数,但不要5的倍数 解决方法: x=random(100); while(x5)=0) x=random(100); 2、从连续的一段范围内取随机数。 如从40-50的范围内取随机数。 解决方法: x=random(11)+40 3、从一组乱数中取随机数。 如:从67,87,34,78,12,5,9,108,999,378十个数中随机取数。 解决方法:可以用数组将些十个数存贮,然后把09中取出的随机数作为序号,实现随机取数。 a=newArray(67,87,34,78,12,5,9,108,999,378); j=random(10); x=aj;选取不重复的随机数(或者叫乱数),在flash的编程中经常都会用到。源文件下载本节知识要点1、循环语句, condition 为要计算的条件,statement(s) 是只要 condition 参数计算结果为 true 就会执行的语句。do statement(s) while (condition) 2、 break;在循环语句中使用,break 动作可命令 Flash 跳过循环体的其余部分,停止循环动作,并执行循环语句之后的语句。3、 Array.push();将一个或多个元素添加到数组的结尾,并返回该数组的新长度。4、Array.splice()向数组中添加元素或删除数组中元素介绍两种乱数排列的方法:在1到32中选取10个随机数,要求这10个随机数必须是不重复的。方法1:在1到32中选取1个随机数后,把它与前面选取的所有数进行比较,如果和其中一个相同,那么就重新选择;如果和前面选取的所有数都不相同,那么,这个数就被选定,并进一步选取下一个数。例 1 打开3.5.1.fla文件,第1帧上的脚本为:i = 0;rand_arry = new Array();/定义数组(也可以:rand_arry =)do /执行下面的循环语句rand_arryi = Math.floor(Math.random()*32)+1;/给数组赋值-1到32之间的一个随机数;k = true;/设置一个逻辑变量;for (j=0; ji; j+) if (rand_arryi = rand_arryj) /把刚才取得的这个随机数与前面取得的所有数进行比较,如果相等.k = false;/改变逻辑变量break;/跳出for循环if (k) /如果逻辑变量k没有发生改变;i+;/变量i加1 while (i10);/如果i10,回到do开始的循环;如果i=10,则跳出do循环 web=rand_arry.sort(16) / /把数组rand_arry按升序排列,并用文本web显示 点击查看动画效果方法2:把1到32个数放入一个数组中;从这个数组中随机选出一个数;并把选得的这个数从原数组中删去,这样就可以保证下一次在这个数组中不会选到同一个数了;用同样办法、从已经删去了一些数的原数组中再随机选出一个数;这些被选出的数随时放进另一个数组。点击查看动画效果例 2 打开3.5.2.fla文件,在第1帧上的脚本为:function luanshu() /设置为自定义函数,便于用按扭多次调用myArry = ;/定义两个数组;shu = ;for (i=1; i=32; i+) shu.push(i);/把1到32个数加入数组,(数组中为0到31个元数)for (i=0; i=9; i+) k = Math.floor(Math.random()*shu.length);/从数组shu中随机选一个元素(第k个)myArryi = shuk;/把数组shu中选出的元素的值赋给数组myArry第i个元素;shu.splice(k, 1);/把数组shu中第k个元素删掉(保证下一次选的一定不会重复 )web=myArry.sort(18)/把数组myArry按降序排列,并用文本web显示luanshu(); /调自定义函数在按扭上的脚本:on (release) luanshu();/调自定义函数 作业在前一节的作业的基础上,把上面的文字和下面的mc的位置都分别作任意的排列,如下图注意:把文字和mc的横坐标分别放入一个数组中点击查看动画效果查看全套Flash AS 高级教程AS3as3关于数字方面的取整,随机数,小数点精度,度数等介绍,使用Math.round()对一个数取整,四舍五入,产生一个随机数,使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分使用Math.round()对一个数取整,四舍五入 Math.round() trace(Math.round(204.499); /输出:204 trace(Math.round(401.5); /输出:402 使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分 trace(Math.floor(204.99); /输出:204 使用Math.ceil()对一个数向上取整,只要小数部分不为零,整数部分就加1 trace(Math.ceil(401.01); /输出:402 产生一个随机数使用Math.random()产生一个伪随机数n,其中 0 = n 1把数字取至最近的小数点位,即指定精确度1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;2. 让输入值除以步骤1所选的数字(此例为0.01);3. 使用Math.round()把步骤2所计得的值取成最近的整数;4. 把步骤3所得的结果乘以步骤2用于除法的那个值.例如,要把90.337取成两个小数点位数,可以使用: trace(Math.round(90.337/0.01)*0.01); /输出:90.34 把数字取成一个整数的最接近倍数值例1,这样会把92.5取成5的最近倍数值:trace(Math.round(92.5/5)*5); /输出:95例2,这样会把92.5取成10的最近倍数值:trace(Math.round(92.5/10)*10); /输出:90在指定数值范围内获得随机数 /可取范围:min, max private function randRange(min:Number, max:Number):Number var randomNum:Number = Math.floor(Math.random() * (max - min + 1) + min; return randomNum; 应用例子:模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);模拟投骰子,即希望得到随机六个值: randRange(1, 6);为避免被缓存而需要产生一个独一无二的数字追加在URL尾端,通常最佳方法是取得当前毫秒数.弧度(radian)与度数(degree)之间的转换从弧度转为度数: degrees = radians * 180 / Math.PI从度数转为弧度: radians = degrees * Math.PI / 180计算两点之间的距离勾股定理: c2 = a2 + b2假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:var c:Number = Math.sqrt(Math.pow(mc1.x - mc2.x, 2) + Math.pow(mc1.y - mc2.y, 2);flash里面怎么随机播放背景音乐啊? 首先选择,文件-导入-导入到库,将你需要的几个声音文件导入到库中。 upload=gifUploadFile/2004-4/200445101946712.gi打开库面板,在导入的声音文件上点右健,选择“链接”,输入标示符,如果你导入了5个音乐文件,标识符分别输入04。 upload=gifUploadFile/2004-4/200445101952787.gi现在打开动作面板,输入以下代码soundid = random(4);mySound = new Sound();mySound.attachSound(soundid);mySound.start();mySound.onSoundComplete = f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论