正版软件交易论坛

首页 » 技术咨询区 » 综合其他(没有开版的技术在此讨论) » 游戏中的 寻路算法(A*算法)源码
taomaintao - 2008-3-10 14:55:00

 附件: 您所在的用户组无法下载或查看附件 

var tabel1=new Array();//已访问的点
    var tabel2=new Array();//路线
    var tabel3=new Array();//临时路线
    var point={x:-1,y:-1};
    function _axing(res)
    {
        tabel1=new Array();//已访问的点
        tabel2=new Array();//路线
        tabel3=new Array();//临时路线
        var rv=res.value;
        var curlu=new Array();
        if(rv.x!=-1 && rv.y!=-1)
        {
            curlu=new Array();
            point={x:rv.x,y:rv.y};
            tabel1.push(point);
            curlu.push(point);
            tabel2.push(curlu);
            int pianlizhi=10;
            int p=0;
            var isfind=0;
            /////////////////////////////////////////////
            point={x:tox,y:toy};
            if(cannotpoint(point))
                return;
            while(isfind==0 && p<pianlizhi)
            {
                p++;
                tabel3=new Array();               
                for(var i=0;i<tabel2.length && isfind==0;i++)
                {
                    for(var j=0;j<4 && isfind==0;j++)
                    {
                        lu=tabel2.slice();
                        if(j==0)
                            point={x:lu[lu.length-1].x-1,y:lu[lu.length-1].y}
                        else if(j==1)
                            point={x:lu[lu.length-1].x,y:lu[lu.length-1].y-1}
                        else if(j==2)
                            point={x:lu[lu.length-1].x+1,y:lu[lu.length-1].y}
                        else if(j==3)
                            point={x:lu[lu.length-1].x,y:lu[lu.length-1].y+1}
                        if(!cannotpoint(point))
                        {
                            tabel1.push(point);
                            if(point.x!=tox || point.y!=toy)
                            {
                                lu.push(point);
                                tabel3.push(lu);
                            }
                            else
                            {
                                isfind=1;
                                curlu=lu;
                                break;
                            }
                        }
                    }                 
                }
                tabel2=tabel3;
            }
            alert(isfind);
        }
    }
    function cannotpoint(point)
    {
        if(point.x<0 || point.y<0 || point.x>width || point.y>height)
            return true;
        for(var i=0;i<tabel1.length;i++)
        {
            if(tabel1.x==point.x && tabel1.y==point.y)
                return true;
        }
        return false;
    }
1