flash on 2017-1-25
♥0 |
Line 74 |
Modified 2017-01-25 06:06:36 |
MIT License
archived:2017-03-20 16:21:07
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/QsMd
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
mw=16;mh=16;
vecHeight = new Vector.<Number>(mw*mh,false);
var i:int; var num:int; num=mw*mh;
for (i=0; i<num;i+=1)
{ vecHeight[i] = Math.random()<0.5?1:0; }
vecMark = new Vector.<int>(mw*mh,false);
for (i=0; i<num;i+=1)
{ vecMark[i] = 0; }
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var mw:int = 16;
public var mh:int = 16;
public var vecHeight:Vector.<Number>;
public var vecMark:Vector.<int>;
public function getMark(ax:int, ay:int):int
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return 1;} return vecMark[ax+(ay*mw)]; }
public function setMark(ax:int, ay:int, t:int):void
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecMark[ax+(ay*mw)] = t; }
public function getHeight(ax:int, ay:int):Number
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return 0;} return vecHeight[ax+(ay*mw)]; }
public function getFlag(ax:int, ay:int):int
{
var f:int;
f = 0;
if (getHeight(ax+1, ay) > 0) { f|=1; }
if (getHeight(ax-1, ay) > 0) { f|=2; }
if (getHeight(ax, ay+1) > 0) { f|=4; }
if (getHeight(ax, ay-1) > 0) { f|=8; }
if (f ==15){ return 0; }
return f;
}//getflag
public var cx:int = 0;
public var cy:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
var i:int; var k:int;
for (i=0;i<mh;i+=1)
{
for(k=0;k<mw;k+=1)
{
var h:Number;
h = getHeight(k,i);
if (h>0){ graphics.drawCircle(32+k*16,32+i*16,4);}
if (h >0 && getMark(k,i)>0)
{
graphics.beginFill(0, 1);
graphics.drawCircle(32+k*16,32+i*16,4);
graphics.endFill();
}//endif
}//nextk
}//nexti
graphics.drawCircle(32+cx*16,32+cy*16,8);
if (getMark(cx,cy)==0)
{
setMark(cx,cy, 1);
if (getMark(cx+1, cy)==0 && getFlag(cx+1,cy) > 0)
{ cx+=1; }
else if (getMark(cx, cy+1)==0 && getFlag(cx,cy+1) > 0)
{ cy+=1;}
else if (getMark(cx-1, cy)==0 && getFlag(cx-1,cy) > 0)
{ cx-=1;}
else if (getMark(cx, cy-1)==0 && getFlag(cx,cy-1) > 0)
{ cy-=1;}
//cx+=1; if (cx>=mw){cx=0;cy+=1; }
}//endif
}//onenter
}//classend
}