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;
/*0表示可通过,1表示障碍物*/
private var mapArray:Array=[[0,0,0,0,0,0,1,1,0,1],
[1,0,0,1,0,0,0,0,1,0],
[0,0,0,0,0,1,0,1,0,1],
[1,0,0,0,1,0,0,0,0,1],
[0,0,0,1,0,0,1,0,1,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<5; i++) {
for (var j:Number=0; j<10; j++) {
if (mapArray[i][j]==0) {
var way:Way=new Way();
way.x=i*22+100;
way.y=j*22+100;
addChild(way);
} else {
var block:Block=new Block();
block.x=i*22+100;
block.y=j*22+100;
addChild(block);
}
}
}
var mc:Mc=new Mc();
mc.x=100;
mc.y=100;
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{
x0+=1;
}
}
if(updir && y0>0){
y0-=1;
if(mapArray[x0][y0]==0){
getChildByName("mc0").y-=22;
} else{
y0+=1;
}
}
if(rightdir && x0<4){
x0+=1;
if(mapArray[x0][y0]==0){
getChildByName("mc0").x+=22;
}else{
x0-=1;
}
}
if(downdir && y0<9){
y0+=1;
if(mapArray[x0][y0]==0){
getChildByName("mc0").y+=22;
} else{
y0-=1;
}
}
}
}
}
源文件下载:http://space.flash8.net/bbs/viewthread.php?tid=351277&extra=page%3D1&frombbs=1
下面增加了随机生成10*10到 20*20地图的功能,代码把上面的代码覆盖就行了
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 hang:int;
private var lie:int;
private var x0:Number=0;
private var y0:Number=0;
/*0表示可通过,1表示障碍物*/
private var mapArray:Array;
public function TestWay():void {
hang=Math.floor(Math.random()*10+10);
lie=Math.floor(Math.random()*10+10);
mapArray=new Array();
for(var i:Number=0;i<hang;i++){
mapArray[i]=new Array();
for(var j:Number=0;j<lie;j++){
if(Math.random()*10<8){
mapArray[i][j]=0;
} else{
mapArray[i][j]=1;
}
}
}
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<hang; i++) {
for (var j:Number=0; j<lie; j++) {
if (mapArray[i][j]==0) {
var way:Way=new Way();
way.x=i*22+50;
way.y=j*22+50;
addChild(way);
} else {
var block:Block=new Block();
block.x=i*22+50;
block.y=j*22+50;
addChild(block);
}
}
}
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{
x0+=1;
}
}
if(updir && y0>0){
y0-=1;
if(mapArray[x0][y0]==0){
getChildByName("mc0").y-=22;
} else{
y0+=1;
}
}
if(rightdir && x0<hang-1){
x0+=1;
if(mapArray[x0][y0]==0){
getChildByName("mc0").x+=22;
}else{
x0-=1;
}
}
if(downdir && y0<lie-1){
y0+=1;
if(mapArray[x0][y0]==0){
getChildByName("mc0").y+=22;
} else{
y0-=1;
}
}
}
}
}