工程家园's Archiver

紫色流星 发表于 2007-9-18 20:56

[原创]Flash游戏—对对碰

  昨天终于把新制作的Flash游戏《对对碰》完成了。说实话,好久没有编写过如此让我郁闷的程序了。原因倒不是算法多么复杂,只要是比较繁琐,而且事先没有规划好,以至于开始写了六天之后才发现当初设想的致命缺陷。在第七天终于修正了缺陷,于是很多麻烦的地方都相对轻松地解决了。经过初步的测试,结果还算满意。

  有人说这个游戏的颜色过于鲜艳,玩的时间长了有些眼睛疲劳,我坚持不改,因为第一,我喜欢这么多色彩;第二,我是研究算法和程序的,不是搞美工的,呵呵

  源代码回复中可见,有些长,共910行。估计没有人愿意看,虽然我精心加了些并不完整的注释,呵呵
[align=center][attach]6181[/attach][/align]

  文件下载后直接用IE打开就可以。[attach]6180[/attach]

紫色流星 发表于 2007-9-18 21:03

[code]
//--------------------
// 版本:0.30
// 开始日期:2007-09-10
// 完成日期:2007-09-17
// 更新历史:
// 0.01:部分功能实现;
// 0.10:更改了核心代码和算法,使得基本功能全部实现;
// 0.20:增加了提示功能;
// 0.30:增加了自动检测是否存在可消除方块的功能;
//--------------------
/*
全局变量说明:
table_w:球阵的宽度;
table_h:球阵的高度;
balls:球的种类数;
prx、pry:前次鼠标选中的球在矩阵中的坐标;
nwx、nwy:本次鼠标选中的球在矩阵中的坐标;
count0、count1、count2:过程计数器;
mc0、mc1:用于存放两个被选中的球的电影剪辑名;
zt:用于标示当前的可操作状态;
cache:用于存储要消除的球的电影剪辑名;
cache0:用于存储消除后下落的球的电影剪辑名;
table:二维数组,用于标示对应点的球的种类。
函数功能及简要算法说明:
showArray:显示出table的数据,调试程序用;
update:刷新台面上所有球;
test0:用于检测是否存在直接相连的同色球,返回布尔值;
firstRun:初始化游戏,也用于重新开始;
mb.onMouseDown:鼠标事件处理;
box0:画出一个标记选中球的方框;
timer0FC:将两个选中的临近球交换位置,如果不满足消去条件再交换回原位置;
test1:检测选中球是否在交换后符合消去条件;
test2:检测参数所定位的球是否满足消去条件;
scf_check:将交换后能消去的球压入堆栈;
scf_clean:将能消去的球从屏幕上抹去;
scf_down:让数组向下塌陷,填补消去的空白;
scf_fall:让屏幕上的球依次填补空白;
creat:在空白处产生新的随机球;
checks:检测下落和产生随机球后时候存在可消去的球;
restart:重新开始;
item:自动提示;
changed:在屏幕上让提示的球闪烁;
test3:用于检测是否存在可交换消去的球。
*/
Stage.scaleMode = "noScale";
var table_w:Number = 10;
var table_h:Number = 10;
var balls:Number = 8;
var prx:Number = -1;
var pry:Number = -1;
var nwx:Number = -1;
var nwy:Number = -1;
var count0:Number = 0;
var count1:Number = 0;
var count2:Number = 0;
var mc0:MovieClip;
var mc1:MovieClip;
var zt:Boolean = true;
var cache:Array = new Array();
var cache0:Array = new Array();
var table:Array = new Array(table_w);
for (var i = 0; i<table_w; i++) {
table[i] = new Array(table_h);
}
_root.createEmptyMovieClip("box0_mc", 1000);
showArray = function ():Void {
for (var i = 0; i<table_w; i++) {
  trace(table[i].toString());
}
};
update = function ():Void {
for (var i = 0; i<table_w; i++) {
  for (var j = 0; j<table_h; j++) {
   var c = table[i][j];
   var s = table_w*i+j;
   _root.attachMovie("Ball", "ball"+s, s);
   _root["ball"+s]._x = 50*i+50;
   _root["ball"+s]._y = 50*j+50;
   _root["ball"+s].gotoAndStop(c+1);
  }
}
};
test0 = function ():Boolean {
var w = table_w-2;
var h = table_h-2;
for (var i = 0; i<w; i++) {
  for (var j = 0; j<h; j++) {
   if (table[i][j] == table[i][j+1] && table[i][j] == table[i][j+2]) {
    return true;
   }
   if (table[i][j] == table[i+1][j] && table[i][j] == table[i+2][j]) {
    return true;
   }
  }
}
for (var i = 0; i<h; i++) {
  if (table[w][i] == table[w][i+1] && table[w][j] == table[w][i+2]) {
   return true;
  }
  if (table[w+1][i] == table[w+1][i+1] && table[w+1][i] == table[w+1][i+2]) {
   return true;
  }
}
for (var i = 0; i<w; i++) {
  if (table[i][h] == table[i+1][h] && table[i][h] == table[i+2][h]) {
   return true;
  }
  if (table[i][h+1] == table[i+1][h+1] && table[i][h+1] == table[i+2][h+1]) {
   return true;
  }
}
return false;
};
firstRun = function ():Void {
do {
  for (var i = 0; i<table_w; i++) {
   for (var j = 0; j<table_h; j++) {
    table[i][j] = random(balls)+1;
   }
  }
} while (test0() == true && test3() == true);
update();
};
mb.onMouseDown = function() {
var x = Math.floor((_root._xmouse-25)/50);
var y = Math.floor((_root._ymouse-25)/50);
if (x>=0 && y>=0 && x<10 && y<10 && zt == true) {
  if (prx+pry<0) {
   prx = x;
   pry = y;
   zt = true;
   box0(x, y);
  } else {
   if (Math.abs(prx-x)+Math.abs(pry-y) == 1) {
    zt = false;
    nwx = x;
    nwy = y;
    mc0 = _root["ball"+(nwx*table_w+nwy)];
    mc1 = _root["ball"+(prx*table_w+pry)];
    if (pry>nwy) {
     count0 = 1;
    }
    if (prx<nwx) {
     count0 = 2;
    }
    if (pry<nwy) {
     count0 = 3;
    }
    if (prx>nwx) {
     count0 = 4;
    }
    count1 = 0;
    timer0 = setInterval(timer0FC, 40);
   } else {
    box0_mc.clear();
    prx = x;
    pry = y;
    box0(x, y);
   }
  }
}
};
box0 = function (x:Number, y:Number):Void {
var ix:Number = x*50+25;
var iy:Number = y*50+25;
with (box0_mc) {
  lineStyle(3, 0x00FF00, 100);
  moveTo(ix, iy);
  lineTo(ix+50, iy);
  lineTo(ix+50, iy+50);
  lineTo(ix, iy+50);
  lineTo(ix, iy);
}
};
timer0FC = function ():Void {
switch (count0) {
case 1 :
  count1++;
  mc0._y += 5;
  mc1._y -= 5;
  break;
case 2 :
  count1++;
  mc0._x -= 5;
  mc1._x += 5;
  break;
case 3 :
  count1++;
  mc0._y -= 5;
  mc1._y += 5;
  break;
case 4 :
  count1++;
  mc0._x += 5;
  mc1._x -= 5;
  break;
default :
  trace("Error!");
}
if (count1 == 10) {
  test1();
}
if (count1 == 20) {
  clearInterval(timer0);
  zt = true;
}
};
test1 = function ():Void {
var c = table[nwx][nwy];
table[nwx][nwy] = table[prx][pry];
table[prx][pry] = c;
if (test2(nwx, nwy) == false && test2(prx, pry) == false) {
  var c = table[nwx][nwy];
  table[nwx][nwy] = table[prx][pry];
  table[prx][pry] = c;
  switch (count0) {
  case 1 :
   count0 = 3;
   break;
  case 2 :
   count0 = 4;
   break;
  case 3 :
   count0 = 1;
   break;
  case 4 :
   count0 = 2;
   break;
  }
  trace(false);
} else {
  mc0._x = nwx*50+50;
  mc0._y = nwy*50+50;
  mc0.gotoAndStop(table[nwx][nwy]+1);
  mc1._x = prx*50+50;
  mc1._y = pry*50+50;
  mc1.gotoAndStop(table[prx][pry]+1);
  clearInterval(timer0);
  trace(true);
  box0_mc.clear();
  scf_check();
}
};
test2 = function (ix:Number, iy:Number):Boolean {
if (iy<9 && table[ix][iy] == table[ix][iy+1] && table[ix][iy] == table[ix][iy+2]) {
  return true;
}
if (iy>0 && iy<10 && table[ix][iy] == table[ix][iy-1] && table[ix][iy] == table[ix][iy+1]) {
  return true;
}
if (iy>1 && table[ix][iy] == table[ix][iy-2] && table[ix][iy] == table[ix][iy-1]) {
  return true;
}
if (ix<9 && table[ix][iy] == table[ix+1][iy] && table[ix][iy] == table[ix+2][iy]) {
  return true;
}
if (ix>0 && ix<10 && table[ix-1][iy] == table[ix][iy] && table[ix][iy] == table[ix+1][iy]) {
  return true;
}
if (ix>1 && table[ix][iy] == table[ix-2][iy] && table[ix][iy] == table[ix-1][iy]) {
  return true;
}
return false;
};
scf_check = function ():Void {
trace("nwx:"+nwx+"  nwy:"+nwy+"  prx:"+prx+"  pry:"+pry);
var enablenw:Boolean = false;
var enablepr:Boolean = false;
if (nwx == prx && nwy<pry) {
  trace("First:nwx == prx && nwy>pry");
  if (nwy>1 && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy-2]) {
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   enablenw = true;
  }
  if (nwx>1 && nwx<9 && table[nwx][nwy] == table[nwx-2][nwy] && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   //@@@@@
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>1 && nwx<10 && table[nwx][nwy] == table[nwx-2][nwy] && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy]) {
   //@@@@X
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>0 && nwx<9 && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   //X@@@@
   //cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>1 && table[nwx][nwy] == table[nwx-2][nwy] && table[nwx][nwy] == table[nwx-1][nwy]) {
   //@@@XX
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>0 && nwx<10 && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy]) {
   //X@@@X
   //cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx<9 && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   //XX@@@
   //cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  }
  if (enablenw == true) {
   cache.push(_root["ball"+(nwx*table_w+nwy)]);
  }
  if (pry<9 && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  }
  if (prx>1 && prx<9 && table[prx][pry] == table[prx-2][pry] && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   //@@@@@
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>1 && prx<10 && table[prx][pry] == table[prx-2][pry] && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry]) {
   //@@@@X
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>0 && prx<9 && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   //X@@@@
   //cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>1 && table[prx][pry] == table[prx-2][pry] && table[prx][pry] == table[prx-1][pry]) {
   //@@@XX
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>0 && prx<10 && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry]) {
   //X@@@X
   //cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx<9 && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   //XX@@@
   //cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   //cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  }
  if (enablepr == true) {
   cache.push(_root["ball"+(prx*table_w+pry)]);
  }
}
if (nwx == prx && nwy>pry) {
  trace("Second:nwx == prx && nwy<pry");
  if (nwy<9 && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  }
  if (nwx>1 && nwx<9 && table[nwx][nwy] == table[nwx-2][nwy] && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   //@@@@@
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>1 && nwx<10 && table[nwx][nwy] == table[nwx-2][nwy] && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy]) {
   //@@@@X
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>0 && nwx<9 && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   //X@@@@
   //cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>1 && table[nwx][nwy] == table[nwx-2][nwy] && table[nwx][nwy] == table[nwx-1][nwy]) {
   //@@@XX
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx>0 && nwx<10 && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx+1][nwy]) {
   //X@@@X
   //cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  } else if (nwx<9 && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   //XX@@@
   //cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   //cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  }
  if (enablenw == true) {
   cache.push(_root["ball"+(nwx*table_w+nwy)]);
  }
  if (pry>1 && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry-2]) {
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   enablepr = true;
  }
  if (prx>1 && prx<9 && table[prx][pry] == table[prx-2][pry] && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   //@@@@@
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>1 && prx<10 && table[prx][pry] == table[prx-2][pry] && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry]) {
   //@@@@X
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>0 && prx<9 && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   //X@@@@
   //cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>1 && table[prx][pry] == table[prx-2][pry] && table[prx][pry] == table[prx-1][pry]) {
   //@@@XX
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx>0 && prx<10 && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx+1][pry]) {
   //X@@@X
   //cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   //cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  } else if (prx<9 && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   //XX@@@
   //cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   //cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  }
  if (enablepr == true) {
   cache.push(_root["ball"+(prx*table_w+pry)]);
  }
}
if (nwy == pry && nwx>prx) {
  trace("Third:nwy == pry && nwx>prx");
  if (nwx<9 && table[nwx][nwy] == table[nwx+1][nwy] && table[nwx][nwy] == table[nwx+2][nwy]) {
   cache.push(_root["ball"+((nwx+1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx+2)*table_w+nwy)]);
   enablenw = true;
  }
  if (nwy>1 && nwy<9 && table[nwx][nwy] == table[nwx][nwy-2] && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   //@@@@@
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>1 && nwy<10 && table[nwx][nwy] == table[nwx][nwy-2] && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1]) {
   //@@@@X
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>0 && nwy<9 && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   //X@@@@
   //cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>1 && table[nwx][nwy] == table[nwx][nwy-2] && table[nwx][nwy] == table[nwx][nwy-1]) {
   //@@@XX
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>0 && nwy<10 && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1]) {
   //X@@@X
   //cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy<9 && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   //XX@@@
   //cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  }
  if (enablenw == true) {
   cache.push(_root["ball"+(nwx*table_w+nwy)]);
  }
  if (prx>1 && table[prx][pry] == table[prx-1][pry] && table[prx][pry] == table[prx-2][pry]) {
   cache.push(_root["ball"+((prx-1)*table_w+pry)]);
   cache.push(_root["ball"+((prx-2)*table_w+pry)]);
   enablepr = true;
  }
  if (pry>1 && pry<9 && table[prx][pry] == table[prx][pry-2] && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   //@@@@@
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>1 && pry<10 && table[prx][pry] == table[prx][pry-2] && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1]) {
   //@@@@X
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>0 && pry<9 && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   //X@@@@
   //cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>1 && table[prx][pry] == table[prx][pry-2] && table[prx][pry] == table[prx][pry-1]) {
   //@@@XX
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>0 && pry<10 && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1]) {
   //X@@@X
   //cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry<9 && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   //XX@@@
   //cache.push(_root["ball"+(prx*table_w+pry-2)]);
   //cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  }
  if (enablepr == true) {
   cache.push(_root["ball"+(prx*table_w+pry)]);
  }
}
if (nwy == pry && nwx<prx) {
  trace("Forth:nwy == pry && nwx<prx");
  if (nwx>1 && table[nwx][nwy] == table[nwx-1][nwy] && table[nwx][nwy] == table[nwx-2][nwy]) {
   cache.push(_root["ball"+((nwx-1)*table_w+nwy)]);
   cache.push(_root["ball"+((nwx-2)*table_w+nwy)]);
   enablenw = true;
  }
  if (nwy>1 && nwy<9 && table[nwx][nwy] == table[nwx][nwy-2] && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   //@@@@@
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>1 && nwy<10 && table[nwx][nwy] == table[nwx][nwy-2] && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1]) {
   //@@@@X
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>0 && nwy<9 && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   //X@@@@
   //cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>1 && table[nwx][nwy] == table[nwx][nwy-2] && table[nwx][nwy] == table[nwx][nwy-1]) {
   //@@@XX
   cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy>0 && nwy<10 && table[nwx][nwy] == table[nwx][nwy-1] && table[nwx][nwy] == table[nwx][nwy+1]) {
   //X@@@X
   //cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  } else if (nwy<9 && table[nwx][nwy] == table[nwx][nwy+1] && table[nwx][nwy] == table[nwx][nwy+2]) {
   //XX@@@
   //cache.push(_root["ball"+(nwx*table_w+nwy-2)]);
   //cache.push(_root["ball"+(nwx*table_w+nwy-1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+1)]);
   cache.push(_root["ball"+(nwx*table_w+nwy+2)]);
   enablenw = true;
  }
  if (enablenw == true) {
   cache.push(_root["ball"+(nwx*table_w+nwy)]);
  }
  if (prx<9 && table[prx][pry] == table[prx+1][pry] && table[prx][pry] == table[prx+2][pry]) {
   cache.push(_root["ball"+((prx+1)*table_w+pry)]);
   cache.push(_root["ball"+((prx+2)*table_w+pry)]);
   enablepr = true;
  }
  if (pry>1 && pry<9 && table[prx][pry] == table[prx][pry-2] && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   //@@@@@
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>1 && pry<10 && table[prx][pry] == table[prx][pry-2] && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1]) {
   //@@@@X
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>0 && pry<9 && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   //X@@@@
   //cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>1 && table[prx][pry] == table[prx][pry-2] && table[prx][pry] == table[prx][pry-1]) {
   //@@@XX
   cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry>0 && pry<10 && table[prx][pry] == table[prx][pry-1] && table[prx][pry] == table[prx][pry+1]) {
   //X@@@X
   //cache.push(_root["ball"+(prx*table_w+pry-2)]);
   cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   //cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  } else if (pry<9 && table[prx][pry] == table[prx][pry+1] && table[prx][pry] == table[prx][pry+2]) {
   //XX@@@
   //cache.push(_root["ball"+(prx*table_w+pry-2)]);
   //cache.push(_root["ball"+(prx*table_w+pry-1)]);
   cache.push(_root["ball"+(prx*table_w+pry+1)]);
   cache.push(_root["ball"+(prx*table_w+pry+2)]);
   enablepr = true;
  }
  if (enablepr == true) {
   cache.push(_root["ball"+(prx*table_w+pry)]);
  }
}
count2 = 0;
timer1 = setInterval(scf_clean, 100);
};
scf_clean = function ():Void {
if (cache[0]._alpha<=0) {
  for (var i = 0; i<cache.length; i++) {
   cache[i]._alpha = 100;
   cache[i]._xscale = 100;
   cache[i]._yscale = 100;
   cache[i].gotoAndStop(1);
  }
  clearInterval(timer1);
  scf_down();
} else {
  for (var i = 0; i<cache.length; i++) {
   cache[i]._alpha -= 10;
   cache[i]._xscale -= 10;
   cache[i]._yscale -= 10;
  }
}
};
scf_down = function ():Void {
for (var i = 0; i<cache.length; i++) {
  var ix = (cache[i]._x-50)/50;
  var iy = (cache[i]._y-50)/50;
  table[ix][iy] = -1;
}
for (var i = 0; i<table_w; i++) {
  for (var j = table_h; j>=0; j--) {
   if (table[i][j]<0) {
    var s:Number = 0;
    do {
     s++;
    } while (s<=j && table[i][j-s]<0);
    if (table[i][j-s] == undefined) {
     table[i][j] = -1;
    } else {
     table[i][j] = table[i][j-s];
     table[i][j-s] = -1;
    }
    cache0.push(_root["ball"+(i*table_w+j)]);
   }
  }
}
for (var i = 0; i<cache.length; i++) {
  for (var j = 0; j<cache0.length; j++) {
   if (cache[i] == cache0[j]) {
    cache0.splice(j, 1);
    break;
   }
  }
}
count1 = 0;
timer2 = setInterval(scf_fall, 50);
};
scf_fall = function () {
var ix = cache0[count1]._x/50-1;
var iy = cache0[count1]._y/50-1;
var s = ix*table_w+iy;
var c = 0;
do {
  c++;
} while (_root["ball"+(s+c)]._currentframe == 1);
_root["ball"+(s+c-1)].gotoAndStop(_root["ball"+s]._currentframe);
_root["ball"+s].gotoAndStop(1);
count1++;
if (count1>cache0.length) {
  clearInterval(timer2);
  creat();
}
};
creat = function () {
for (var i = 0; i<table_w; i++) {
  for (var j = 0; j<table_h; j++) {
   if (table[i][j]<0) {
    table[i][j] = random(balls)+1;
   }
  }
}
update();
//showArray();
checks();
};
checks = function () {
cache = new Array();
cache0 = new Array();
for (var i = 0; i<table_w; i++) {
  for (var j = 0; j<table_h; j++) {
   if (test2(i, j) == true) {
    cache.push(_root["ball"+(i*table_w+j)]);
   }
  }
}
if (cache.length>0) {
  count2 = 0;
  timer1 = setInterval(scf_clean, 100);
} else {
  prx = -1;
  pry = -1;
  cache = new Array();
  cache0 = new Array();
  zt = true;
  if (test3() == false) {
   restart();
  }
}
};
restart = function ():Void {
my_cmi.enabled = false;
box0_mc.clear();
prx = -1;
pry = -1;
nwx = -1;
nwy = -1;
cache = new Array();
cache0 = new Array();
firstRun();
zt = true;
my_cmi.enabled = true;
};
item = function () {
if (test3() == true) {
  zt = false;
  for (var i = 1; i<table_w; i++) {
   for (var j = 1; j<table_h; j++) {
    var c = table[i-1][j];
    table[i-1][j] = table[i][j];
    table[i][j] = c;
    if (test2(i, j) == true || test2(i-1, j) == true) {
     var c = table[i-1][j];
     table[i-1][j] = table[i][j];
     table[i][j] = c;
     count0 = 0;
     timer3 = setInterval(changed, 200, _root["ball"+(i*table_w+j)], _root["ball"+((i-1)*table_w+j)]);
     i = table_w;
     j = table_h;
    } else {
     var c = table[i-1][j];
     table[i-1][j] = table[i][j];
     table[i][j] = c;
     c = table[i][j-1];
     table[i][j-1] = table[i][j];
     table[i][j] = c;
     if (test2(i, j) == true || test2(i, j-1) == true) {
      var c = table[i][j-1];
      table[i][j-1] = table[i][j];
      table[i][j] = c;
      count0 = 0;
      timer3 = setInterval(changed, 200, _root["ball"+(i*table_w+j)], _root["ball"+(i*table_w+j-1)]);
      i = table_w;
      j = table_h;
     } else {
      var c = table[i][j-1];
      table[i][j-1] = table[i][j];
      table[i][j] = c;
     }
    }
   }
  }
} else {
  restart();
}
};
changed = function (mc0_mc:MovieClip, mc1_mc:MovieClip) {
if (mc0_mc._currentframe == 10 && mc1_mc._currentframe == 10) {
  update();
} else {
  mc0_mc.gotoAndStop(10);
  mc0_mc._xscale = 150;
  mc0_mc._yscale = 150;
  mc1_mc.gotoAndStop(10);
  mc1_mc._xscale = 150;
  mc1_mc._yscale = 150;
}
if (++count0>6) {
  update();
  clearInterval(timer3);
  zt = true;
}
};
test3 = function ():Boolean {
for (var i = 1; i<table_w; i++) {
  for (var j = 1; j<table_h; j++) {
   var c = table[i-1][j];
   table[i-1][j] = table[i][j];
   table[i][j] = c;
   if (test2(i, j) == true || test2(i-1, j) == true) {
    var c = table[i-1][j];
    table[i-1][j] = table[i][j];
    table[i][j] = c;
    return true;
   } else {
    var c = table[i-1][j];
    table[i-1][j] = table[i][j];
    table[i][j] = c;
    c = table[i][j-1];
    table[i][j-1] = table[i][j];
    table[i][j] = c;
    if (test2(i, j) == true || test2(i, j-1) == true) {
     var c = table[i][j-1];
     table[i][j-1] = table[i][j];
     table[i][j] = c;
     return true;
    } else {
     var c = table[i][j-1];
     table[i][j-1] = table[i][j];
     table[i][j] = c;
    }
   }
  }
}
return false;
};
firstRun();
var my_cm:ContextMenu = new ContextMenu();
var my0_cmi:ContextMenuItem = new ContextMenuItem("提示", item);
var my1_cmi:ContextMenuItem = new ContextMenuItem("重新开始", restart, true);
my_cm.customItems.push(my0_cmi, my1_cmi);
//my_cm.customItems.push(my1_cmi);
my_cm.hideBuiltInItems();
_root.menu = my_cm;

[/code]

上将 发表于 2007-9-18 22:01

跟戈薇有一拼~

紫梦 发表于 2007-9-19 09:16

开心:o

上将 发表于 2007-9-19 22:44

那搞什么?

紫色流星 发表于 2007-9-20 10:57

[quote]原帖由 [i]小书童华安[/i] 于 2007-9-19 22:35 发表 [url=http://www.heubbs.com/redirect.php?goto=findpost&pid=263724&ptid=20038][img]http://www.heubbs.com/images/common/back.gif[/img][/url]
比我强多了  我不搞代码 [/quote]
传说中的美工?

上将 发表于 2007-9-20 11:02

跪键盘吧~

daidai0628 发表于 2007-10-20 13:40

拜!

太牛了!
没搞过flash
flash用的是什么语言?

紫色流星 发表于 2007-12-8 09:27

[quote]原帖由 [i]daidai0628[/i] 于 2007-10-20 13:40 发表 [url=http://www.heubbs.com/redirect.php?goto=findpost&pid=271661&ptid=20038][img]http://www.heubbs.com/images/common/back.gif[/img][/url]
拜!

太牛了!
没搞过flash
flash用的是什么语言? [/quote]
ActionScript

高西 发表于 2008-1-1 11:18

不错了 还好
不过那个颜色看着有点混 能不能搞的色差大点

高西 发表于 2008-1-1 11:41

:cry: 连重新开始都没有

高西 发表于 2008-1-1 11:42

帮助也没有 5555555555

没有了一样的也没有自动整合的程序

紫色流星 发表于 2008-1-5 19:18

这个其实就是一种算法验证性的程序,并不是成品,呵呵,过几天我上传一个最近的成品Flash。

datou618 发表于 2008-1-5 20:10

回复 14楼 的帖子

大哥,帮我找一下那个张的联系方式吧,多谢了

上将 发表于 2008-1-5 20:35

[quote]原帖由 [i]紫色流星[/i] 于 2008-1-5 19:18 发表 [url=http://www.heubbs.com/redirect.php?goto=findpost&pid=293117&ptid=20038][img]http://www.heubbs.com/images/common/back.gif[/img][/url]
这个其实就是一种算法验证性的程序,并不是成品,呵呵,过几天我上传一个最近的成品Flash。 [/quote]
不错,友情支持~

lys008 发表于 2009-6-25 18:48

[b] [url=http://www.heubbs.com/redirect.php?goto=findpost&pid=263516&ptid=20038]1#[/url] [i]紫色流星[/i] [/b]
好东西,学习一下

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.