美文网首页
cocos creator的简易随机迷宫生成算法

cocos creator的简易随机迷宫生成算法

作者: 神大人korose | 来源:发表于2018-03-21 09:03 被阅读0次
cc.Class({
    extends: cc.Component,

    properties: {

    },

    // use this for initialization
    onLoad: function () {
    },
    rand:function(min,max){
        var num = Math.random()*(max+1-min) + min;
        num = parseInt(num, 10);
        return num
    },
    creatMap:function (r,c) {
        this.mapArr = [];
        var notAccessed = [];
        var accessed = [];
        var TreeList = [];
        var CubeList = [];
        var Road = [];
        var atlasList = [];
        for (let i = 0; i < r * 2 + 1; ++i) {
            var arr = [];
            for (let n = 0; n < c * 2 + 1; ++n) {
                if ((n ^ (n - 1)) == 1 && (i ^ (i - 1)) == 1)
                {
                    arr.push(0);                   // 0 表示路
                    notAccessed.push(0);
                }
                else
                {
                    arr.push(1);                  // 1 表示墙
                }
            }
            this.mapArr.push(arr);
        }
        var count = r * c;
        var cur = this.rand(0, count);
        var offs = [-c, c, -1, 1];         // 四周顶点在notAccessed的偏移量
        var offr = [-1, 1, 0, 0];                        // 四周顶点在arr的纵向偏移量
        var offc = [0, 0, -1, 1];                        // 四周顶点在arr的横向偏移量
        accessed.push(cur);
        notAccessed[cur] = 1;

        while (accessed.length < count)
        {
            var tr = parseInt(cur / c);
            var tc = parseInt(cur % c);
            var num = 0;
            var off = -1;

            // 遍历上下左右顶点
            while (++num < 5)
            {
                var around = this.rand(0, 4),
                    nr = tr + offr[around],
                    nc = tc + offc[around];
                if (nr >= 0 && nc >= 0 && nr < r && nc < c && notAccessed[cur + offs[around]] == 0)
                {
                    off = around;
                    break;
                }
            }
            // 四周顶点均被访问,则从已访问的顶点中随机抽取一个为cur
            if (off < 0)
            {
                cur = accessed[this.rand(0, accessed.length)];
            }
            else
            {
                tr = 2 * tr + 1;
                tc = 2 * tc + 1;
                this.mapArr[tr + offr[off]][tc + offc[off]] = 0;
                cur = cur + offs[off];
                notAccessed[cur] = 1;
                accessed.push(cur);
                // cc.log(accessed.length)
            }
        }
        return this.mapArr;
    }
    // called every frame, uncomment this function to activate update callback
    // update: function (dt) {

    // },
});

相关文章

网友评论

      本文标题:cocos creator的简易随机迷宫生成算法

      本文链接:https://www.haomeiwen.com/subject/bjxbqftx.html