/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/SIVb
*/
package {
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
mw=12; mh=12;
vecGrid = new Vector.<int>(mw*mh, false);
var i:int;
for(i=0;i<mw;i+=1)
{
setWall(i,0,1); setWall(0,i,1);
// setWall(i,mh-1,1); setWall(mw-1,i,1);
}
for (i=0;i<16;i+=1)
{ setWall(Math.random()*mw, Math.random()*mh,1); }
setWall(3,3, 1);
setWall(5,3, 1);
setWall(3,5, 1);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
public function isKey(k:int):Boolean { return vecKey[k]; }
public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512, false);
public var vecGrid:Vector.<int>;
public var mw:int = 8;
public var mh:int = 8;
public function isWall(ax:int, ay:int):Boolean
{ if(ax<0||ax>=mw||ay<0||ay>=mh){return true;} return vecGrid[ax+(ay*mw)] > 0; }
public function setWall(ax:int, ay:int, t:int):void
{ if(ax<0||ax>=mw||ay<0||ay>=mh){return;} vecGrid[ax+(ay*mw)] = t; }
//public function isWall2(ax:Number, ay:Number):Boolean
//{ return isWall(ax/32, ay/32); }
public var cx:Number = 128+16;
public var cy:Number = 128+16;
public var x0:Number = 0;
public var y0:Number = 0;
public var x1:Number = 0;
public var y1:Number = 0;
public var u0:Number = 1;
public var gx:int = 0;
public var gy:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
graphics.drawRect(0,0, mw*32, mh*32);
var i:int; var k:int;
var yt:int; var t:int;
for (i=0;i<mh;i+=1)
{
yt = mw*i;
for (k=0;k<mw;k+=1)
{
t = vecGrid[yt+k];
if (t<=0){ continue; }
if (t==2){ continue; }
graphics.beginFill(0x808080,1);
graphics.drawRect(k*32,i*32,32,32);
graphics.endFill();
} //nextk
} //nexti
var ms:Number;
var vx:Number; var vy:Number;
vx=0; vy=0; ms =4;
if (isKey(Keyboard.UP)) { vy =-ms; }
if (isKey(Keyboard.DOWN)) { vy = ms; }
if (isKey(Keyboard.LEFT)) { vx =-ms; }
if (isKey(Keyboard.RIGHT)) { vx = ms; }
var tx:int; var ty:int;
tx = Math.floor(cx / 32);
ty = Math.floor(cy / 32);
var kx:Number; var ky:Number;
kx = Math.floor(cx/32)*32;
ky = Math.floor(cy/32)*32;
var wx:int; var wy:int;
wx = vx > 0 ? 1 : (vx < 0 ? -1 : 0);
wy = vy > 0 ? 1 : (vy < 0 ? -1 : 0);
var whit:int;
whit = 0;
if (isWall(tx+1,ty)&&vx>0) { if (cx+vx>(kx+16)){vx=0; whit=1;} }
if (isWall(tx-1,ty)&&vx<0) { if (cx+vx<(kx+16)){vx=0; whit=1;} }
if (isWall(tx,ty+1)&&vy>0) { if (cy+vy>(ky+16)){vy=0; whit=1;} }
if (isWall(tx,ty-1)&&vy<0) { if (cy+vy<(ky+16)){vy=0; whit=1;} }
if (u0>=1 && whit>0 && (wx==0||wy==0)&&isWall(tx+wx, ty+wy))
{ if (isWall(tx+wx+wx,ty+wy+wy)==false)
{
setWall(tx+wx,ty+wy,0);
setWall(tx+wx+wx, ty+wy+wy, 2);
// if (u0<1) { setWall(gx,gy,1); }
gx=tx+wx+wx; gy=ty+wy+wy;
x0 = (tx+wx)*32; y0 = (ty+wy)*32;
x1 = (tx+wx+wx)*32; y1 = (ty+wy+wy)*32;
u0 = 0;
}
}
cx+=vx; cy+=vy;
graphics.drawCircle(cx,cy,16);
graphics.drawCircle(cx,cy,2);
//graphics.drawRect(kx,ky,32,32);
graphics.lineStyle(2, 0xFF0000);
if (u0 < 1.0)
{
u0+=0.1;
graphics.beginFill(0x808080,1);
graphics.drawRect(x0+(x1-x0)*u0, y0+(y1-y0)*u0, 32,32);
graphics.endFill();
if (u0>=1)
{ setWall(gx, gy, 1); }
}//endif
}//onenter
}//classend
}