/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/66lB
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
mw = 10;
mh = 8;
vecGrid = new Vector.<int>(mw*mh, false);
setTile(1,1,1);
setTile(5, 0, 1);
setTile(5, 1, 1);
setTile(4, 4, 1);
setTile(4, 3, 2);
setTile(6,3,3);
setTile(7,0,4);
//setTile(4, 7, 2);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecGrid:Vector.<int>;
public var mw:int = 0;
public var mh:int = 0;
public var cw:Number = 32;
public var ch:Number = 32;
public function setTile(ax:int, ay:int, t:int):void
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecGrid[ax+(ay*mw)]=t; }
public function getTile(ax:int, ay:int):int
{ if (ax<0||ax>=mw||ay<0||ay>=mh){ return 1;} return vecGrid[ax+(ay*mw)]; }
public function onTile(ax:int, ay:int):void
{ var t:int; t = getTile(ax,ay);
if (t==2){ vx=4; vy= 0; }
if (t==3){ vx=0; vy=-4; }
if (t==4){ vx=0; vy= 4; }
}//ontile
public var prevTile:int = -1;
public var cx:Number = 16;
public var cy:Number = 16;
public var vx:Number = 4;
public var vy:Number = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
graphics.drawRect(0,0,cw*mw,ch*mh);
var i:int; var k:int; var yt:int; var t:int;
for(i=0;i<mh;i+=1){yt=i*mw; for(k=0;k<mw;k+=1){
graphics.drawRect(k*cw,i*ch,cw,ch);
t = vecGrid[yt+k];
if(t==1){ graphics.beginFill(0); graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
if(t==2){ graphics.beginFill(0x4455FF); graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
if(t==3){ graphics.beginFill(0x881100); graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
if(t==4){ graphics.beginFill(0x33F122); graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
} }
graphics.lineStyle(2,0xFF0000);
graphics.drawCircle(cx,cy, 8);
var wx:Number;
var tx:int; var ty:int;
var ax:Number; var ay:Number;
tx = Math.floor(cx/cw); ty =Math.floor(cy/ch);
graphics.drawRect(tx*cw,ty*ch,cw,ch);
ax = tx*cw+cw*0.5; ay =ty*ch+ch*0.5;
graphics.drawCircle(ax,ay,2);
cx += vx; cy+=vy;
t = tx+(ty*mw);
if (prevTile != t)
{
if (vx>0 && cx>ax) { prevTile=t; onTile(tx,ty); cx=ax; }
if (vx<0 && cx<ax) { prevTile=t; onTile(tx,ty); cx=ax; }
if (vy>0 && cy>ay) { prevTile=t; onTile(tx,ty); cy=ay; }
if (vy<0 && cy<ay) { prevTile=t; onTile(tx,ty); cy=ay; }
}//endif
if (vx>0 && getTile(tx+1,ty) == 1)
{ if(cx>ax){cx=ax; wx=vx; vx=-vy; vy=wx; } }
if (vy>0 && getTile(tx,ty+1) == 1)
{ if (cy>ay){cy=ay; wx=vx; vx=-vy; vy=wx; } }
if (vx<0 && getTile(tx-1,ty) == 1)
{ if(cx<ax){cx=ax; wx=vx; vx=-vy; vy=wx; } }
if (vy<0 && getTile(tx,ty-1) == 1)
{ if(cy<ay){cy=ay; wx=vx; vx=-vy; vy=wx; } }
}//onenter
}//classend
}