In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

flash on 2011-9-11

Get Adobe Flash player
by WinField95 11 Sep 2011
    Embed
/**
 * Copyright WinField95 ( http://wonderfl.net/user/WinField95 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gzPR
 */

package
{
    import flash.display.Sprite;
    import flash.geom.Point;
    import flash.text.TextField;
    import flash.text.TextFormat;
 
    public class Main extends Sprite
    {
        private var map:String = 
        "***************************" +
        "*S        *   *   *      G*" +
        "* ******* *       *       *" +
        "*         *   *   *       *" +
        "* *********   *   *       *" +
        "*                         *" +
        "***************************";
 
        private var WIDTH:int = 27;
        private var HEIGHT:int = 7;
 
        private var open /*Node*/:Array = [];
        private var close/*Node*/:Array = [];
 
        private var nodes:Array;
 
        private var start:Point;
        private var goal:Point;
 
        public function Main()
        {
            start = new Point(int(map.indexOf("S") % WIDTH), int(map.indexOf("S") / WIDTH));
            goal  = new Point(int(map.indexOf("G") % WIDTH), int(map.indexOf("G") / WIDTH));
 
            nodes = new Array(HEIGHT);
            for (var y:int = 0; y < HEIGHT; y++)
            {
                nodes[y] = new Array(WIDTH);
                for (var x:int = 0; x < WIDTH; x++)
                {
                    var node:Node = new Node();
                    node.x = x;
                    node.y = y;
                    nodes[y][x] = node;
                }
            }
 
            open.push(nodes[start.y][start.x]);
 
            while (true)
            {
                open.sortOn("f", Array.NUMERIC);
                node = open.shift();
 
                if (node == null) return;
                close.push(node);
                if (node.x == goal.x && node.y == goal.y) break;
 
                var dir:Array = 
                [
                    [ 0,  1, 1.0],
                    [ 0, -1, 1.0],
                    [ 1,  0, 1.0],
                    [-1,  0, 1.0],
                    [-1,  1, 1.4],
                    [-1, -1, 1.4],
                    [ 1, -1, 1.4],
                    [ 1,  1, 1.4]
                ];
 
                for (var i:int = 0; i < dir.length; i++)
                {
                    var tx:int = node.x + dir[i][0];
                    var ty:int = node.y + dir[i][1];
 
                    if (tx < 0 || WIDTH  <= tx ||
                        ty < 0 || HEIGHT <= ty) continue;
                    if (map.charAt(ty * WIDTH + tx) == "*") continue;  // 壁だったら
 
                    var next:Node = nodes[ty][tx];
                    var g:Number = node.g + dir[i][2];
                    var h:Number = Math.abs(goal.x - next.x) + Math.abs(goal.y - next.y);
                    var f:Number = g + h;
 
                    if (open.indexOf(next) != -1 || close.indexOf(next) != -1)
                    {
                        if (next.f > f)
                        {
                            next.g = g;
                            next.h = h;
                            next.f = f;
                            next.prev.x = node.x;
                            next.prev.y = node.y;
                        }
                    }
                    else
                    {
                        next.g = g;
                        next.h = h;
                        next.f = f;
                        next.prev.x = node.x;
                        next.prev.y = node.y;
                        open.push(next);
                    }
                }
            }
 
            var array:Array = map.split("");
            while (true)
            {
                node = nodes[node.prev.y][node.prev.x];
                if (node.prev.x == -1) break;
                array[node.y * WIDTH + node.x] = "O";
            }
 
            var tf:TextField = new TextField();
            var format:TextFormat = new TextFormat("_typeWriter", 16, 0x0, true);
            format.leading = -6;
            tf.defaultTextFormat = format;
            tf.autoSize = "left";
            addChild(tf);
 
            for (i = 0; i < array.length; i++)
            {
                tf.appendText(array[i]);
                if ((i + 1) % WIDTH == 0)
                {
                    tf.appendText("\n");
                }
            }
        }
    }
}
import flash.geom.Point;
 
class Node
{
    public var x:int;
    public var y:int;
    public var prev:Point = new Point(-1);
 
    public var g:Number = 0;
    public var h:Number;
    public var f:Number;
}