猫史档案馆


【岛3】bfs实现喵的扩张

用户:yee089yee089查看:11 回复:10 评论:11 创建时间:2022-03-01T10:48:14


 

我解释不清,上代码吧))

const fx =  [new Box3Vector3(-1,0,0),new Box3Vector3(0,0,-1),new Box3Vector3(0,0,1),new Box3Vector3(1,0,0) ]
console.clear();
async function bfs(x,y,z){
    var queue = [new Box3Vector3(0,0,0),new Box3Vector3(0,0,0),new Box3Vector3(0,0,0)];
    queue.pop();
    queue.pop();
    queue.pop();
    var stpq=[0,0,0];
    stpq.pop();stpq.pop();
    
    queue.push(new Box3Vector3(x,y,z));
    world.say(x + ' ' + y +' ' + z)
    while(queue.length > 0){
        var now = queue[0];
        queue.shift();
        var stp = stpq[0];
        stpq.shift();
        for(var i = 0; i < 4; i++){

            var nowx = now.x+fx[i].x;
            var nowy = now.y+fx[i].y;
            var nowz = now.z+fx[i].z;
            if(voxels.getVoxel(nowx,nowy,nowz) == voxels.id('grass')){
                if(stp < 30 && Math.floor( Math.random() * 1000) % 2 ==  0){
                    voxels.setVoxel(nowx,nowy,nowz,'yellow_grass');
                    queue.push(new Box3Vector3(nowx,nowy,nowz));
                    stpq.push(stp+1);
                }
           }
        }
        await sleep(200);
    }
}




var flag = true;
for(let i = 0; i < 128 && flag; i++){
    for(var j = 0; j < 128 && flag; j++){
        for(var k = 0; k < 128 && flag; k++){
            if(voxels.name(voxels.getVoxelId(i,j,k)) == 'yellow_grass'){
                console.log(i + ' ' + j +' ' + k);
                bfs(i,j,k);
                flag = false;
            }
        }
    }
}

a


回复

上一页1 页 / 共 1下一页
yee089yee089

效果:center_image

点赞0


评论


yee089yee089

温馨提示:这份代码不是用在控制台的(我不会控制台),希望各位大佬帮忙修改下,谢谢

点赞0


评论


yee089yee089

解释下,stp:层数(step) Math.floor(Math.random()*1000)%2==0 就是随机生成代码)) 实际上,其实代码不难看懂(喵)        

点赞0


评论


yee089yee089

az

点赞0


评论


墨染云天墨染云天

imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"

点赞0


评论


一个STUB用户_14302596一个STUB用户_14302596

顶顶顶

点赞0


评论


yee089yee089

如果你读懂了这些代码,其实很有用,比如这段铺地板代码:

const fx =  [new Box3Vector3(-1,0,0),new Box3Vector3(0,0,-1),new Box3Vector3(0,0,1),new Box3Vector3(1,0,0) ];
async function bfs(x,y,z){
    var queue = [new Box3Vector3(0,0,0),new Box3Vector3(0,0,0),new Box3Vector3(0,0,0)];
    queue.pop();
    queue.pop();
    queue.pop();
    var stpq=[0,0,0];
    stpq.pop();stpq.pop();
    
    queue.push(new Box3Vector3(x,y,z));
    world.say(x + ' ' + y +' ' + z);
    var voxel = 1;
    while(queue.length > 0){
        var now = queue[0];
        queue.shift();
        var stp = stpq[0];
        stpq.shift();
        for(var i = 0; i < 4; i++){

            var nowx = now.x+fx[i].x;
            var nowy = now.y+fx[i].y;
            var nowz = now.z+fx[i].z;
            if(voxels.getVoxel(nowx,nowy,nowz) == voxels.id('air')){
                if(stp < 100 ){
                        await sleep(Math.random() * 50);
                        voxels.setVoxelId(nowx,nowy,nowz,voxels.id('stone'));
                    
                    queue.push(new Box3Vector3(nowx,nowy,nowz));
                    stpq.push(stp+1);
                }
           }
        }
    }
    console.log('finish');
}
bfs(40,9,79)

虽然你可以写出一些更简单的,但本质思想相同,而且优点是在于无论什么鬼样子的地板,它都可以铺(改造后可以铺3维的地板,同理还可以判封闭)

 

点赞0


评论


传奇无敌传奇无敌

BFS用来铺地板有点浪费吧()改改能做高级的僵尸代码()不会掉虚空的那种()

点赞0


评论


AlcalaAlcala

没加括号逼死强迫症()

点赞0


评论


alopdopsalopdops

收藏

点赞0


评论