array("X"=>0,"Y"=>-1), "DOWN"=>array("X"=>0,"Y"=>1), "LEFT"=>array("X"=>-1,"Y"=>0), "RIGHT"=>array("X"=>1,"Y"=>0)); $CCDIR=array("LEFT"=>1, "RIGHT"=>2); global $valueStack=array(); global $DP=$DPDIR["RIGHT"]; global $CC=$CCDIR["LEFT"]; global $BLOCKLIST=array(); $X=0; $Y=0; global $TERMINATE=FALSE; while(!$TERMINATE) { $CODEL=imagecolorat($im, $X, $Y); $NEXTX=$X+$DP["X"]; $NEXTY=$Y+$DP["Y"]; $DPCCCHANGE=0; $DPCCCHANGECOUNT=0; while((!isCodel($im, $NEXTX, $NEXTY)||imagecolorat($im, $NEXTX, $NEXTY)==$black)&&!$TERMINATE) { if($DPCCCHANGE==0) { toggleCC(); $DPCCCHANGE=1; $DPCCCHANGECOUNT++; } else { toggleDP(); $DPCCCHANGE=0; $DPCCCHANGECOUNT++; } $NEXTX=$X+$DP["X"]; $NEXTY=$Y+$DP["Y"]; if($DPCCCHANGECOUNT==9) { $TERMINATE=TRUE; } } if(!$TERMINATE) { $NEXTCODEL=imagecolorat($im, $NEXTX, $NEXTY); if($NEXTCODEL!=$CODEL&&$CODEL!=$white) parseCodel($im, $NEXTX, $NEXTY, $CODEL); } } } function parseCodel($im, $X, $Y, $origin) { $CODEL=imagecolorat($im, $X, $Y); findBlockSize($im, $X, $Y); $BLOCKSIZE=count($BLOCKLIST); $BLOCKLIST=array(); $command=0; } function findBlockSize($im, $X, $Y) { $CODEL=imagecolorat($im, $X, $Y); array_push($BLOCKLIST, array($X, $Y); if(isCodel($im, $X, $Y-1)) { $UP=imagecolorat($im, $X, $Y-1); if($UP=$CODEL&&!array_key_exists(array($X, $Y-1), $BLOCKLIST)) { findBlockSize($im, $X, $Y-1); } } if(isCodel($im, $X, $Y-1)) { $DOWN=imagecolorat($im, $X, $Y+1); if($DOWN=$CODEL&&!array_key_exists(array($X, $Y+1), $BLOCKLIST)) { findBlockSize($im, $X, $Y+1); } } if(isCodel($im, $X, $Y-1)) { $LEFT=imagecolorat($im, $X-1, $Y); if($LEFT=$CODEL&&!array_key_exists(array($X-1, $Y), $BLOCKLIST)) { findBlockSize($im, $X-1, $Y); } } if(isCodel($im, $X, $Y-1)) { $RIGHT=imagecolorat($im, $X+1, $Y); if($UP=$CODEL&&!array_key_exists(array($X+1, $Y), $BLOCKLIST)) { findBlockSize($im, $X+1, $Y); } } } function isCodel($im, $X, $Y) { $XSIZE=imagesx($im); $YSIZE=imagesy($im); if($X>0&&$Y>0&&$X<$XSIZE&&$Y<$YSIZE) return TRUE; else return FALSE; } function toggleDP() { switch($DP) { case $DPDIR["RIGHT"]: $DP=$DPDIR["LEFT"]; break; case $DPDIR["LEFT": $DP=$DPDIR["DOWN"]; break; case $DPDIR["DOWN"]: $DP=$DPDIR["UP"]; break; case $DPDIR["UP"]: $DP=$DPDIR["RIGHT"]; break; } } function toggleCC() { switch($CC) { case $CCDIR["LEFT"]: $CC=$CCDIR["RIGHT"]; break; case $CCDIR["RIGHT"]: $CC=$CCDIR["LEFT"]; break; } } ?>