【Animate】 As3脚本制作随机生成迷宫算法可视化
- 创建一个动画剪切元件,随便画个小球
- 在创建一个动画剪切元件,把之前的小球拖进来,并赋值实例名
wa
- 然后添加以下动作脚本,不要添加帧数
var sp:Shape = new Shape;
var i,j,k:int;
var d:int = 20;
var s:Number = 1.5;
var x0:int = 0;
var y0:int = 0;
var x1:int = 30;
var y1:int = 30;
var t0:int = 1;
var num:int = x1*y1;
var maze:Array = new Array;
var pass:Array = new Array;
var dir:Array = new Array([1,0],[0,1],[-1,0],[0,-1]);
addChild(sp);
sp.graphics.lineStyle(2,0x000000);
sp.graphics.moveTo(x0,y0);
for (i = 0; i < x1; i++) {
for (j = 0; j < y1; j++) {
sp.graphics.drawRect(i*d,j*d,d,d);
}
}
for (i = 0; i < x1; i++) {
var rmaze:Array = new Array;
for (j = 0; j < y1; j++) {
rmaze.push(0);
}
maze.push(rmaze);
}
maze[x0][y0] = -1;
trace(dir);
sp.graphics.lineStyle(2,0xfffffb);
function check(px:int,py:int):Boolean {
return px >= 0 && py >= 0 && px < x1 && py < y1 &&
maze[px][py] == 0;
}
function alive(px:int,py:int):Boolean {
return check(px+dir[0][0],py+dir[0][1]) ||
check(px+dir[1][0],py+dir[1][1]) ||
check(px+dir[2][0],py+dir[2][1]) ||
check(px+dir[3][0],py+dir[3][1]);
}
stage.addEventListener(Event.ENTER_FRAME,Draw);
function Draw(e:Event):void
{
if (t0 < num) {
if (!alive(x0,y0)) {
for (i = 0; i < pass.length; i++) {
for (k = 0; k < 4; k++) {
if (alive(pass[i][0]+dir[k][0],pass[i][1]+dir[k][1])) {
x0=pass[i][0]+dir[k][0];
y0=pass[i][1]+dir[k][1];
break;
}
}
if (alive(x0,y0)) break;
}
}
k = int(4*Math.random())+1;
while (!check(x0+dir[k-1][0],y0+dir[k-1][1]))
k = int(4*Math.random())+1;
switch (k) {
case 1:
sp.graphics.moveTo(x0*d+d,y0*d+s);
sp.graphics.lineTo(x0*d+d,y0*d+d-s);
break;
case 2:
sp.graphics.moveTo(x0*d+s,y0*d+d);
sp.graphics.lineTo(x0*d+d-s,y0*d+d);
break;
case 3:
sp.graphics.moveTo(x0*d,y0*d+s);
sp.graphics.lineTo(x0*d,y0*d+d-s);
break;
case 4:
sp.graphics.moveTo(x0*d+s,y0*d);
sp.graphics.lineTo(x0*d+d-s,y0*d);
break;
}
x0 += dir[k-1][0];
y0 += dir[k-1][1];
wa.x = x0*d;
wa.y = y0*d;
maze[x0][y0] = k;
var p = new Array(x0,y0);
pass.push(p);
trace(p);
trace(t0);
}
t0++;
}
参考: 迷宫生成随机拆墙算法-MATLAB实现