论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

如何用as打造自己的密文解码器?

文章类别:Flash | 发表日期:2008-9-21 15:03:59

  

如何用as打造自己的密文解码器?

例如:A到Z到a到z排列成一个环,字母A用字母C代替,字母B则用字母D代替……比如密文“ABC”解码后为“CDE”……那么我们看一下“DjYqf”解码后会是什么呢?
解决思路
首先,我先说一下基本的编程思路:
  1、看一下原文中的“A到Z到a到z排列成一个环,字母A用字母C代替……”我们先不管后面那几句,只看第1句,“A到Z到a到z排列成一个环”那么,编程的第1步已经有了:新建一数组1,元素为A-Z,a-z共52个元素,此数组即为密文数组(Miwen)。
  2、这时我们在看一下后面的那几句“字母A用字母C代替,字母B则用字母D代替……”这样,编程的第二步也有了:按原文提到的字母替换规则,将上面数组(Miwen)中所有元素向前‘移’两位,最前面的两位放到后面,得到一个新数组2,其元素为C-Za-zAB。
  3、这时我们看一下,数组1中的某位置上的元素(密文)的原文就是数组2相同位置上的元素。如数组1中第一个元素是“A”,而数组2中的第一个元素是“C”(即“ZT01”一文中提到的“字母A用字母C代替”……)
  4、我们只要将A-Z、a-z分别赋值为1-26、27-52。这时解密文时就只须将密文字母所代表的值来对应数组2中的元素即可(如“B”的值是2,那么在数组2中的第2个元素“D”就是“B”的原文……)。
  5、但在Flash中变量不分大小写,也就是说“A”与“a”(“B”与“b”……)代表的是同一变量。不过没关系,我们可以把大写的“A”双拼为“AA”、大写字母“B”双拼为“BB”,这样就与小写字母区分开了。
  6、当然,密文不可能是单一的一个字母,而是一串字母,这样我们就要用到String.substr(字符串截取)函数,并把截取的字母存放到新的数组中,再与数组2中的元素相对应就可得到明文。
  7、将所有Action写在一帧中与写入多帧中得到的效果是一样的(针对本文来说),但我们最好能有这样一个习惯:如没有非凡情况,最好将AS按其所完成的功能分别写入不同的帧中,这样日后修改起来会非常方便。
具体步骤
第1帧中的AS
第1步:定义密文数组Miwen(),元素为A-Z,a-z
1、定义大写字母A-Z的数组Miwen1(),其元素为大写字母A到Z
miwen1=new?Array()
my_i=65
while?(my_i<=(65+25)){
?miwen1[my_i-65]=String.fromCharCode(my_i)
?my_i++
}
2、定义小写字母a-z的数组Miwen2()
miwen2=new?Array()
my_j=97
while(my_j<=(97+25)){
?miwen2[my_j-97]=String.fromCharCode(my_j)
?my_j++
}
3、将Miwen1与Miwen2联合为Miwen()
miwen=new?Array()
miwen=miwen1.concat(miwen2)
4、测试Miwen数组长度与数组内的元素
/*trace(Miwen.length)
 my_z=0
 while(my_z<Miwen.length){
?trace(Miwen[my_z])
?my_z++
 }*/
第2步:建立数组2 Yuanwen(),元素为C-Za-zAB
1、将Miwen数组中的元素‘copy’到Yuanwen1数组中
yuanwen1=new?Array()
yuanwen1=yuanwen1.concat(miwen)
2、将Yuanwen1中的元素进行‘移位’
yuanwen_AB=new?Array("A","B")
yuanwen=new?Array()
yuanwen=yuanwen1.concat(yuanwen_AB)
yuanwen.splice(0,2)
3、测试Yuanwen数组的长度与其元素
/*trace(yuanwen.length)
 my_z=0
 while(my_z<yuanwen.length){
?trace(yuanwen[my_z])
?my_z++
 }*/
第二帧中的AS
第3步:将A-Z,a-z分别赋值为1-26,27-52,但由于Flash中变量不分大小写,所以,大写的“A”双拼为“AA”、大写字母“B”双拼为“BB”,这样就与小写字母区分开了。
1、定义Big_abc()数组,元素为大写字母A-Z,并将大写字母全部‘双拼’,随后为其元素赋与相应的值。
my_i=1
big_abc=new?Array()
while(my_i<=26){
?big_abc[my_i-1]=String.fromCharCode(64+my_i)+String.fromCharCode(64+my_i)
?set?(big_abc[my_i-1],my_i)
?my_i++
}
2、定义Small_abc()数组,元素为小写字母a-z,并为其赋与相应的值。
my_j=1
small_abc=new?Array()
while?(my_j<=26)?{
?small_abc[my_j-1]=String.fromCharCode(96+my_j)
?set?(small_abc[my_j-1],26+my_j)
?my_j++
}

第三帧中的AS
第4步:将密文(myText)分别拆分为单个字母并放入myTexts()数组内(注重大写字母要‘双拼’),并用Mingwen_num()数组存储myTexts()数组元素所对应的数值。最后用Mingwen_num数组元素与Yuanwen()数组内的元素相对应即可得到明文。
mytext?=?"uuuDjYqfcpalyGWG"; //这就是密文了,可以做成输入文本
//将密文拆分为单个字母并放入myTexts()数组内
mytexts?=?new?Array();
mylength?=?mytext.length;
my_i?=?1;
while?(my_i<=mylength)?{
?mytexts[my_i-1]?=?mytext.substr(my_i-1,?1);
?my_i++;
}
//将大写字母进行‘双拼’
mycode?=?mytexts.join("");
mystr?=?new?String(mycode);
myteststr?=?new?String("a");
my_i?=?1;
while?(my_i<=mylength)?{
?mytexts[my_i-1]?=?mytext.substr(my_i-1,?1);
?if?((mystr.charCodeAt(my_i-1))<(myteststr.charCodeAt(0)))?{
??mytexts[my_i-1]?=?mytexts[my_i-1]+mytexts[my_i-1];
?}
?//trace(mytexts[my_i-1])
?my_i++;
}
mingwen_num?=?new?Array(); //定义mingwen_num数组
//用Mingwen_num数组元素与Yuanwen()数组内的元素相对应即可得到明文。
mingwen?=?new?Array();
my_i?=?1;
while?(my_i<=mylength)?{
?mingwen_num[my_i-1]?=?eval(mytexts[my_i-1]);
?my_i++;
}
my_i?=?1;
while?(my_i<=mylength)?{
?mingwen[my_i-1]?=?yuanwen[mingwen_num[my_i-1]-1];
?my_i++;
}
mymingwen?=?mingwen.join("");  //可做为动态文本
trace(mymingwen);
stop();  //假如不加它的话会一直不停地出,所以还是加上个stop好了。
发布测试吧,在弹出的Output窗口就会得到明文了。参看源文件密文解码器.fla

非凡说明



此“解码器”只能运行在Flash?MX测试环境中,如生成.swf?或?.exe文件后,则无法得到结果。由于此文的主要目的是讲解Action?Script的编程思路,所以并未介绍输出为swf的步骤。不过聪明的你一定会有办法的(提示一下,将myText做成输入文本的变量,而myMingwen做为一个动态文本的变量,再加入一个按钮,一个最简单的‘密文解码器’就诞生了。当然,假如你有爱好和耐心的话,也可以把它做成标准的windows小程序:有菜单、有帮助说明、有版权信息等……)

视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058