//首先在元件庫內創造兩個元件,wall代表迷宮的牆,player就是玩家
//宣告場景布置元素
var nowthis = this ;
//下面二維陣列主要是設定哪地圖上哪些地方是牆(0),哪些地方可以走(1) var MapSpace:Array=[ [0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,0,0,0,0,0,1,1,0], [0,1,0,0,1,1,1,1,1,1,1,1,0], [0,1,0,0,0,0,0,0,0,0,0,1,0], [0,1,1,1,1,1,1,1,1,1,0,1,0], [0,0,0,0,0,0,0,1,0,0,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,0,0,0,0,0,0,1,0,0,1,0], [0,1,0,1,1,1,1,1,1,0,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,0,1,1,1,1,1,1,1,0,1,0], [0,1,1,0,0,0,0,0,1,0,0,1,0], [0,1,1,1,1,1,1,1,1,1,0,1,0], [0,1,0,0,0,0,0,0,0,0,0,1,0], [0,1,0,1,0,0,0,0,0,0,0,1,0], [0,1,0,1,1,1,1,1,1,1,1,1,0], [0,0,0,0,0,1,0,0,0,0,0,0,0] ] var i : int = 0 ; var j : int = 0 ;
//設定牆的寬高 var WallWdith : int = 30 ; var WallHeight : int = 30 ;
var MapSpaceLength : int = MapSpace.length ;
//下面的迴圈用來將陣列內的迷宮樣子,布置到可視場景上 for (i = 0 ; i <MapSpaceLength;i++){ var TmpLength : int = MapSpace[i].length; for (j=0 ; j<TmpLength;j++){ if (MapSpace[i][j] == 0){ var TmpWall : Wall = new Wall(); nowthis.addChild(TmpWall); TmpWall.x = (i*30); TmpWall.y = (j*30); } } }
//創造玩家可控制移動的元件 var man : Player = new Player();
//用來偵測玩家目前所在位置的陣列索引 man['IndexX']=17; man['IndexY']=5; man.x = man['IndexX']*WallWdith; man.y = man['IndexY']*WallHeight; nowthis.addChild(man);
//利用鍵盤上、下、左、右來控制移動,下面是鍵盤監聽式子 stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDownHanlder);
//keyCode 上:38,下:40,左:37,右:39
//下面function會在接收到鍵盤的事件後,先將預期索引傳入CheckMove做檢查
//再根據檢查結果的索引,移動玩家控制的元件 function KeyDownHanlder(me:KeyboardEvent):void{ var KeyCodeNum : int = me.keyCode ; var TmpObj :Object = {IndexX:man['IndexX'],IndexY:man['IndexY'],CheckArray:MapSpace}; if (KeyCodeNum == 38){ TmpObj['IndexY'] -=1; man['IndexY']=(CheckMove(TmpObj))?(man['IndexY']-1):(man['IndexY']); }else if (KeyCodeNum == 40){ TmpObj['IndexY'] +=1; man['IndexY']=(CheckMove(TmpObj))?(man['IndexY']+1):(man['IndexY']); }else if (KeyCodeNum == 37){ TmpObj['IndexX'] -=1; man['IndexX']=(CheckMove(TmpObj))?(man['IndexX']-1):(man['IndexX']); }else if (KeyCodeNum == 39){ TmpObj['IndexX'] +=1; man['IndexX']=(CheckMove(TmpObj))?(man['IndexX']+1):(man['IndexX']); } man.x = (man['IndexX']*WallWdith); man.y = (man['IndexY']*WallHeight); }
//用來檢查玩家預期走入的格子是否可以行走 function CheckMove(reObj:Object):Boolean{ if (reObj['CheckArray'][reObj['IndexX']][reObj['IndexY']] == 1){ return true; }else{ return false; } }
|