从左上角走到右下角
规则:深蓝色的方块代表角色,按上下左右键控制人物角色,黑色的方块代表可以通过,红色的方块代表墙,禁止通过,黄色的方块代表钥匙,捡起来了就可以开门,淡蓝色的方块代表门,只有有钥匙才能通过,一把钥匙只能通过一个门。一把钥匙只能开一个门
源文件下载:http://download.youkuaiyun.com/source/399060

最下面是源代码:
package
adreamstar
...
{
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.events.Event;

public class TestWay extends Sprite ...{
private var updir:Boolean=false;
private var downdir:Boolean=false;
private var rightdir:Boolean=false;
private var leftdir:Boolean=false;
private var x0:Number=0;
private var y0:Number=0;
private var keyIndex:Number=0;

/**//*0表示可通过,1表示障碍物,2表示门,3表示钥匙*/
private var mapArray:Array=[[0,0,0,0,0,0,0,0,0,1,0,0,0],
[0,1,0,1,1,0,1,0,2,1,0,1,0],
[0,2,2,1,0,0,1,0,2,0,0,1,0],
[0,1,0,1,1,1,0,0,1,1,1,2,0],
[0,1,0,0,0,0,1,0,1,3,0,0,1],
[0,1,0,1,2,0,1,0,0,1,1,1,3],
[0,1,0,0,1,0,0,1,2,0,0,0,0],
[0,0,1,0,1,1,0,0,1,1,1,0,1],
[0,1,1,0,0,0,2,0,0,0,1,0,1],
[0,0,0,1,1,1,1,0,1,0,1,0,1],
[1,1,0,0,1,3,1,0,1,0,1,0,1],
[0,0,1,0,1,0,1,0,1,0,1,0,2],
[1,0,0,0,0,0,1,2,1,0,1,0,0],
[3,1,1,1,1,1,0,0,1,1,1,0,0],
[0,0,0,1,0,1,0,1,0,0,0,0,1],
[0,1,0,0,0,1,0,1,3,1,1,1,0],
[0,1,0,1,1,0,0,1,1,2,1,0,0],
[0,1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,1,1,1,1,1,1,1,1,1,1,0],
[0,1,0,0,0,0,1,0,0,0,1,0,2],
[0,2,0,1,0,0,0,0,1,0,1,1,2],
[0,0,0,1,1,0,1,1,1,0,2,0,0]];

public function TestWay():void ...{
initModel();
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

private function initModel():void ...{

for (var i:Number=0; i<22; i++) ...{

for (var j:Number=0; j<13; j++) ...{

if (mapArray[i][j]==0) ...{
var way:Way=new Way();
way.x=i*22+50;
way.y=j*22+50;
addChild(way);

} else if(mapArray[i][j]==1)...{
var block:Block=new Block();
block.x=i*22+50;
block.y=j*22+50;
addChild(block);

} else if(mapArray[i][j]==2)...{
var door:Door=new Door();
door.x=i*22+50;
door.y=j*22+50;
addChild(door).name="door_"+i+"_"+j;

} else if(mapArray[i][j]==3)...{
var key:Key=new Key();
key.x=i*22+50;
key.y=j*22+50;
addChild(key).name="key_"+i+"_"+j;
}
}
}
var mc:Mc=new Mc();
mc.x=50;
mc.y=50;
addChild(mc).name="mc0";
}

private function keyDownHandler(evt:KeyboardEvent):void...{

if(evt.keyCode==37)...{
leftdir=true;
}

if(evt.keyCode==38)...{
updir=true;
}

if(evt.keyCode==39)...{
rightdir=true;
}

if(evt.keyCode==40)...{
downdir=true;
}
}

private function keyUpHandler(evt:KeyboardEvent):void...{

if(evt.keyCode==37)...{
leftdir=false;
}

if(evt.keyCode==38)...{
updir=false;
}

if(evt.keyCode==39)...{
rightdir=false;
}

if(evt.keyCode==40)...{
downdir=false;
}
}

private function enterFrameHandler(evt:Event):void...{

/**//*设定移动范围*/

if(leftdir && x0>0)...{
x0-=1;

if(mapArray[x0][y0]==0)...{
getChildByName("mc0").x-=22;

} else if(mapArray[x0][y0]==3)...{
getChildByName("mc0").x-=22;
removeChild(getChildByName("key_"+x0+"_"+y0));
keyIndex++;
var way0:Way=new Way();
way0.x=x0*22+50;
way0.y=y0*22+50;
addChild(way0);
mapArray[x0][y0]=0;

} else if(mapArray[x0][y0]==2 && keyIndex>0)...{
getChildByName("mc0").x-=22;
keyIndex--;
mapArray[x0][y0]=0;
removeChild(getChildByName("door_"+x0+"_"+y0));
var way4:Way=new Way();
way4.x=x0*22+50;
way4.y=y0*22+50;
addChild(way4);
}

else...{
x0+=1;
}
}

if(updir && y0>0)...{
y0-=1;

if(mapArray[x0][y0]==0)...{
getChildByName("mc0").y-=22;

} else if(mapArray[x0][y0]==3)...{
getChildByName("mc0").y-=22;
keyIndex++;
removeChild(getChildByName("key_"+x0+"_"+y0));
mapArray[x0][y0]=0;
var way2:Way=new Way();
way2.x=x0*22+50;
way2.y=y0*22+50;
addChild(way2);

}else if(mapArray[x0][y0]==2 && keyIndex>0)...{
getChildByName("mc0").y-=22;
keyIndex--;
mapArray[x0][y0]=0;
removeChild(getChildByName("door_"+x0+"_"+y0));
var way5:Way=new Way();
way5.x=x0*22+50;
way5.y=y0*22+50;
addChild(way5);
}

else...{
y0+=1;
}
}

if(rightdir && x0<21)...{
x0+=1;

if(mapArray[x0][y0]==0)...{
getChildByName("mc0").x+=22;

}else if(mapArray[x0][y0]==3)...{
getChildByName("mc0").x+=22;
keyIndex++;
removeChild(getChildByName("key_"+x0+"_"+y0));
mapArray[x0][y0]=0;
var way1:Way=new Way();
way1.x=x0*22+50;
way1.y=y0*22+50;
addChild(way1);

}else if(mapArray[x0][y0]==2 && keyIndex>0)...{
getChildByName("mc0").x+=22;
keyIndex--;
mapArray[x0][y0]=0;
removeChild(getChildByName("door_"+x0+"_"+y0));
var way6:Way=new Way();
way6.x=x0*22+50;
way6.y=y0*22+50;
addChild(way6);
}

else...{
x0-=1;
}
}

if(downdir && y0<12)...{
y0+=1;

if(mapArray[x0][y0]==0)...{
getChildByName("mc0").y+=22;

}else if(mapArray[x0][y0]==3)...{
getChildByName("mc0").y+=22;
keyIndex++;
removeChild(getChildByName("key_"+x0+"_"+y0));
mapArray[x0][y0]=0;
var way3:Way=new Way();
way3.x=x0*22+50;
way3.y=y0*22+50;
addChild(way3);

} else if(mapArray[x0][y0]==2 && keyIndex>0)...{
getChildByName("mc0").y+=22;
keyIndex--;
mapArray[x0][y0]=0;
removeChild(getChildByName("door_"+x0+"_"+y0));
var way7:Way=new Way();
way7.x=x0*22+50;
way7.y=y0*22+50;
addChild(way7);
}

else...{
y0-=1;
}
}
}
}
}