魔法色块
本来是想写个祖玛寻宝的,结果写来写去成这样了。
点击颜色相同的色块相连超过三个的图片即可消除,换新的色块。
package
{
import adobe.utils.CustomActions;
import flash.display.MovieClip;
import flash.events.MouseEvent ;
import flash.events.Event;
import Block ;
import BlockId;
import flash.utils.Timer;
import flash.events .TimerEvent;
/**
* ...
* @author ...
*/
public class Game extends MovieClip
{
var block:MovieClip ;
var MARGINX:int = 90;
var MARGINY:int = 90;
private var maparr:Array = [[], [], [], [], [], [], []] ;
private var lockmap:Array = new Array ();
private var newarr:Array ;
private var main:Block;
private var arr:Array ;
private var maxr:int=7;
private var maxc:int = 7;
private var timer:Timer;
public function Game()
{
init();
}
private function init() //初始化界面
{
for (var i:int = 0; i < maxr; i++ )
{
for (var j:int = 0; j < maxc ; j++ )
{
var id:int = Math.floor(Math.random() * 7 + 1);
var block:Block = BlockId. creatId(id);
block .x = MARGINX + j * 32;
block .y = MARGINY + i * 32;
block .i = i;
block .j = j;
maparr[i][j]= block ;
addChild (maparr[i][j]);
block.addEventListener (MouseEvent .CLICK , onclick);
}
}
}
private function onclick(evt:MouseEvent ):void
{
timer = new Timer (300, 1);
timer.addEventListener(TimerEvent.TIMER, ontimer);
timer.start ();
var id:int = evt.currentTarget .id;
var i:int = evt.currentTarget .i;
var j:int = evt.currentTarget .j;
evt.currentTarget.islock = true;
var arr:Array = [i, j];
lockmap.push(arr);
check(id, i, j);
}
function ontimer(e:TimerEvent):void //此时已经寻找到要处理的色块了
{
if (lockmap.length >= 3)
{
clear ();
timer .removeEventListener (TimerEvent .TIMER , ontimer );
}
else
{
lockmap.splice(0);
for (var i:int = 0; i < maxr; i++ )
{
for (var j:int = 0; j < maxc; j++ )
{
maparr[i][j].islock = false;
}
}
timer .removeEventListener (TimerEvent .TIMER , ontimer );
}
}
private function check(id:int,i:int,j:int ):void //搜寻色块
{
var ix:int = i;
var iy:int = j;
addUnlocklist (chectkId (ix+1,iy-1,id));
addUnlocklist (chectkId (ix+1,iy ,id));
addUnlocklist (chectkId (ix+1,iy+1,id));
addUnlocklist (chectkId (ix,iy+1 ,id));
addUnlocklist (chectkId (ix-1,iy+1 ,id ));
addUnlocklist (chectkId (ix-1,iy ,id ));
addUnlocklist (chectkId (ix-1,iy-1,id ));
addUnlocklist (chectkId (ix, iy - 1, id ));
// addUnlocklist (chectkId (ix, iy, id ));
}
private function addUnlocklist( bll:Boolean)
{
//if(bll)
//trace (lockmap.length )
}
private function chectkId(i:int, j:int, idd:int ):Boolean
{
//越界
if (i < 0 || j < 0 || i >= maxr || j >= maxc )
{
return false ;
}
//加入了lock已经扫描过
if (maparr [i][j].islock)
{
return false;
}
if (maparr [i][j].id == idd )
{
arr = new Array (i, j);
maparr [i][j].islock = true ;
lockmap.push(arr);
check(idd, i, j); //以此为中心,再次搜寻
return false;
}
else
{
maparr[i][j].islock = true;
return false;
}
return false ;
}
private function clear():void
{
addEventListener (Event.ENTER_FRAME , onevent);
function onevent(e:Event ):void
{
for (var i:int = 0; i < lockmap.length ; i++ )
{
var r:int = lockmap [i][0];
var c:int = lockmap [i][1];
maparr [r][c].alpha -= 0.1;
if (maparr [r][c].alpha <= 0.1)
{
for (var j:int = 0; j < lockmap.length ; j++ )
{
var n:int = lockmap [j][0];
var m:int = lockmap [j][1];
removeChild (maparr [n][m]);
var id:int = Math.floor(Math.random() * 7 + 1);
var block:Block = BlockId. creatId(id);
block .i = maparr [n][m].i;
block .j = maparr [n][m].j;
block.x = MARGINX + maparr [n][m].j * 32;
block.y = MARGINY + maparr [n][m].i * 32;
maparr [n][m] = block ;
addChild (block );
block.addEventListener (MouseEvent .CLICK , onclick);
}
removeEventListener(Event.ENTER_FRAME , onevent );
lockmap .splice (0);
}
}
}
for (var i:int = 0; i < maxr; i++ )
{
for (var j:int = 0; j < maxc; j++ )
{
maparr[i][j].islock = false;
}
}
}
}
}
浙公网安备 33010602011771号