本篇基于只懂用flash as2.0构建function的知识量实现
要求
- 13个阴离子和5个阳离子随机组成8*8的方阵,点击一个阴离子后点阳离子,判断他们不共存的话两个一起消失。
- 每次打开随机生成地图。
- 三分钟时间限制。
- 最后总结出本回合中点击消除的阴阳离子所生成的物质。
每次打开生成随机地图
新建mc,将阴离子分别放到mc的1-13帧,阳离子放到14-18帧。在最后一帧上写:
var r =random(19);
if(r<14){
var o = random(19);
gotoAndStop(o);
}
else{
gotoAndStop(r);
}
//阴离子的种类是阳离子的一倍多,所有在生成阴离子的条件多加一次判断,使最后结果是阳离子的概率大一些。
将mc复制64份依序放置在方阵内,这样每次开局将随机生成不同的组合。
获取方阵内所有mc的帧数
因为mc里阴阳离子都是按顺序放置,获取每个mc最后停留的帧数便可知道每个mc随机后的离子类型。并将其存储在一个数组中。用于之后游戏结束的判断依据。场景内mc的实例名为s1到s64。
function fengyin(){
for(var i1 = 1;i1<=64;i1++){
_root["s"+i1].enabled = false;
}
}
fengyin();
function jiefeng(){
for(var i1 = 1;i1<=64;i1++){
_root["s"+i1].enabled = true;
}
}
//构建函数fenyin并执行让运行中的按钮不可用,构建函数jiefeng到数据稳定后解封
var mco:Array = [];
function gogogo(){
for(var i = 1;i<=64;i++){
var ner = _root["s"+i]._currentframe
mco.push(ner);
}
trace(mco);
clearInterval(intervalID)
}
intervalID=setInterval(gogogo,3500);
//构建函数gogogo,获取每个框里元素既离子的编号,定时在3500毫秒后执行,把数据记录到数组mco中
function Gs(shuzi:Number){
geshu=0
for(i=0;i<mco.length;i++){
if(mco[i]==shuzi)
{geshu++;}
}
return geshu
}
//________________________________________
var jishu:Array = [];
var bs:Array = [];
function gogogo1(){
for(e=0;e<18;e++){
var vc:Number = e+1;
jishu.push(Gs(vc));
bs.push(Gs(vc));
}
trace(jishu);
genxin();
jiefeng();
clearInterval(intervalID1)
}
intervalID1=setInterval(gogogo1,3800);
//构建函数Gs,返回数组mco中每个元素出现的次数,既是记录每个离子出现的次数按序列存到数组jishu中。
//函数定时在3800毫秒后,等数组mco获取到数据后执行一次。
因为mc开局后要经过13帧时间和最后判断跳转的时间,一开始获取数据并不是最后随机的结果。所以构建成函数,定时3.5s后执行,执行一次后关闭定时器。jiefeng,fengyin函数是为防止判断时点击造成数据错误。
把每个mc的所在帧数记录到mco数组后,构建一个函数Gs,用来返回输入的数字在数组mco中出现的次数,以此来获取方阵内每个离子出现的次数。将数据依次存在数组jishu中。
function xiaoshi(){
for(var i2 = 1;i2<=64;i2++){
_root["s"+i2]._visible = false;
}
_root.dp._visible = false;
_root.gezi._visible = false;
bjx();
mySound4.start(0,10)
_root.yanhuan1.yan1.play(1);
_root.yanhuan1.yan2.play(1);
jiangpai3.gotoAndPlay(2);
shibai1.text = "通关";
var mycolor =new Color(shibai1);
mycolor.setRGB(0xff0000);
djs1._visible = false;
_root.rt1._visible = true;
mc_yongshi.text = "用时:"+ yongshi + "s";
}
//构建函数xiaoshi,执行时可以让按钮和格子不可见
function jieshu1(){
if((jishu[13] == 0 &&jishu[17] == 0)|| (jishu[17]>0 &&(jishu[0]+jishu[4]+jishu[5]+jishu[7]+jishu[8]+jishu[9]+jishu[10]+jishu[11]+jishu[12]) == 0)||(jishu[13]>0 &&(jishu[0]+jishu[1]+jishu[6]+jishu[7]+jishu[8]+jishu[9]+jishu[10]+jishu[11]+jishu[12]) == 0)){
if((jishu[16] > 0 && jishu[4] ==0)||(jishu[4] > 0 && jishu[16] ==0)||(jishu[4] == 0 && jishu[16] ==0)){
if((jishu[12] > 0 && jishu[15] ==0)||(jishu[15] > 0 && jishu[12] ==0)||(jishu[15] == 0 && jishu[12] ==0)){
xiaoshi();
trace("yes1");
trace(jishu);
}
}
}
else{trace("no1");trace(jishu);}
}
//构建函数jieshu,当所有可以消除元素都消失后,执行已经构建的xiaoshi函数,结束游戏
jieshu1函数中的判断是依据场上所剩的可用于消除的离子的数量来判断游戏是否结束。结束的让执行函数xiaoshi(),使场上所有的元素消失。
var bbb:Array = [];
function Xczl(dai:String){
p = _root[dai];
mySound = new Sound();
mySound.attachSound("wang571.wav");
mySound1 = new Sound();
mySound1.attachSound("cc.mp3");
var gg:Number = p._currentframe;
if(gg == 1 && (bbb[1] == 14 || bbb[1] == 18)){Hbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 2 && bbb[1] == 14){NHbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 5 && (bbb[1] == 17 || bbb[1] == 18)){BAbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 6 && bbb[1] == 18){CAbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 7 && bbb[1] == 14){MGbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 8 && (bbb[1] == 14 || bbb[1] == 18)){ALbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 9 && (bbb[1] == 14 || bbb[1] == 18)){ZNbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 10 && (bbb[1] == 14 || bbb[1] == 18)){FE2bj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 11 && (bbb[1] == 14 || bbb[1] == 18)){FE3bj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 12 && (bbb[1] == 14 || bbb[1] == 18)){CUbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 13 && (bbb[1] == 14 || bbb[1] == 18 ||bbb[1] == 16)){AGbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 14 && (bbb[1] == 1 || bbb[1] == 2 || bbb[1] == 7 || bbb[1] == 8 || bbb[1] == 9 || bbb[1] == 10 || bbb[1] == 11 || bbb[1] == 12 || bbb[1] == 13)){OHbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 16 && bbb[1] == 13){CLbj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 17 && bbb[1] == 5){SObj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else if(gg == 18 && (bbb[1] == 1 || bbb[1] == 6 || bbb[1] == 5 || bbb[1] == 8 || bbb[1] == 9 || bbb[1] == 10 || bbb[1] == 11 || bbb[1] == 12 || bbb[1] == 13)){CObj(bbb[1]);p._visible = false;_root[bbb[0]]._visible = false;if(jishu[bbb[1]-1]>0){jishu[bbb[1]-1]=jishu[bbb[1]-1]-1;}bbb[1] = 0;bbb[0] = 0;trace(bbb);mySound1.start();if(jishu[gg-1]>0){jishu[gg-1] = jishu[gg-1] - 1;}}
else{p._alpha = 100;_root[bbb[0]]._alpha = 100;trace(1);bbb[1] = gg;bbb[0] = dai;mySound.start();}
if(p._alpha == 100){p._alpha = 70;trace(bbb);}else{p._alpha = 100};
genxin();
jieshu1();
}
点击mc后使执行如上函数,定义一个全局空数组bbb,mc点击后把此mc的实例名和所在帧数既离子类型存到bbb的0和1位。
点击另外的mc时,先判断上一次点击后bbb的数据,1号位的类型可以和当前的mc代表的类型消除的就让两个实例一起不可见。同时使jishu中的所代表的的离子的个数减1。同时给bbb的0和1位全赋值0。如果不可共存,则让bbb的0和1位赋值此mc的实例名和所在帧数既离子类型。用于下次的点击判断。
以上是实现功能的主要代码,另外还加入了一些美化,比如消除成功出现的音效和不成功的音效以及点击变色。侧边栏实时统计各类离子剩余数量等等
倒计时,时限设置
加入两个动态文本,一个实例名miaozhen1,一个实例名fenzhen1。代码如下,用定时器的方法实现。结束时统计总用时。
var yongshi = 0;
function daoshu(){
if(int(djs1.miaozhen1.text) > 0 && int(djs1.fenzhen1.text) >=0){
djs1.miaozhen1.text = int(djs1.miaozhen1.text) -1;
yongshi++;
}
else if(int(djs1.miaozhen1.text) == 0 && int(djs1.fenzhen1.text) >0){
djs1.miaozhen1.text = 59;
djs1.fenzhen1.text = int(djs1.fenzhen1.text) - 1;
}
else if(int(djs1.fenzhen1.text) == 0 && int(djs1.miaozhen1.text)== 0){
for(var i2 = 1;i2<=64;i2++){
_root["s"+i2]._visible = false;
}
_root.dp._visible = false;
_root.gezi._visible = false;
bjx();
var mycolor =new Color(shibai1);
mycolor.setRGB(0x999999);
djs1._visible = false;
shibai1.text ="失败了";
clearInterval(daojishi2);
_root.rt1._visible = true;
mc_yongshi.text = "用时:"+ yongshi + "s";
}
}
daojishi2 = setInterval(daoshu,1000);