猫史档案馆


【box3】测试场世界--扫雷代码全公开

用户:YDS尹子YDS尹子查看:8 回复:9 评论:8 创建时间:2021-08-11T19:56:45



world.onPlayerJoin(({entity})=>{
    world.say("欢迎"+entity.player.name+"来到测试场世界!");
    entity.enableDamage=true;
    entity.player.score=0;
    entity.player.canFly=true;
})
world.onDie(async({entity})=>{
    for(let i=5;i>0;i--){
        entity.player.directMessage("重生倒计时:"+i);
        await sleep(1000);
    }
    entity.hp=100;world.say(entity.player.name+"重生了");
})
async function gamePlay(){
for(let i=5;i>0;i--){
    world.say(i+"...");
    await sleep(1000);
}
var minecnt=0;
var mineRate=10+Math.random()*5;
var size=2+Math.round(Math.random()*7);
if(world.querySelectorAll("player").length>=10){
    world.say("开始大型棋盘模式!");
    size=5+Math.random()*10;
}else if(world.querySelectorAll("player").length>=20){
    world.say("开始巨型棋盘模式!");
    size=8+Math.random()*12;
}
var p={x:71,y:12,z:54}
/*
规则我来讲一下
red_light是雷
green_light是玩家标记的方块
stainless_steel是空块
stone_pillar_03是没打开的方块
*/
function end(){
    var cnt=0;
    for(let i=-size;i<=size;i++){
        for(let j=-size;j<=size;j++){
            if(voxels.getVoxel(i+p.x,p.y-1,j+p.z)==voxels.id("stainless_steel")){
                if(voxels.getVoxel(i+p.x,p.y,j+p.z)==voxels.id("stone_pillar_03")){
                    return false;
                }if(voxels.getVoxel(i+p.x,p.y,j+p.z)==voxels.id("green_light")){
                    cnt++;
                }
            }
        }
    }
    if(cnt>=5){
        return false;
    }
    return true;
}

function isMine(x,y,z,entity){
        if(voxels.getVoxel(x,y-1,z)==voxels.id("stainless_steel")){
            var cnt=0;
            if(voxels.getVoxel(x+1,y-1,z)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x-1,y-1,z)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x,y-1,z+1)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x,y-1,z-1)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x+1,y-1,z+1)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x+1,y-1,z-1)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x-1,y-1,z+1)==voxels.id("red_light")){
                cnt++;
            }if(voxels.getVoxel(x-1,y-1,z-1)==voxels.id("red_light")){
                cnt++;
            }if(cnt!=0){
                var block="";
                if(cnt==1){
                    block="one";
                }else if(cnt==2){
                    block="two";
                }else if(cnt==3){
                    block="three";
                }else if(cnt==4){
                    block="four";
                }else if(cnt==5){
                    block="five";
                }else if(cnt==6){
                    block="six";
                }else if(cnt==7){
                    block="seven";
                }else if(cnt==6){
                    block="eight";
                }
                return block;
            }
            return "stainless_steel";
        }else if(voxels.getVoxel(x,y-1,z)==voxels.id("red_light")){
            entity.hp=0;
            entity.velocity.x=2;
            entity.velocity.z=2;
            entity.velocity.y=1;
            world.say(entity.player.name+"碰到了炸弹");
            entity.player.score-=10;
            entity.player.directMessage("你将在5秒后重生")
            return "red_light";
        }
}

var center={x:64,z:64};
function buildRect(point,radius,block){
    for(let i=point.x-radius;i<=point.x+radius;i++){
        for(let j=point.z-radius;j<=point.z+radius;j++){
            voxels.setVoxel(i,point.y,j,block);
        }
    }
}
var wid=size+4;
for(let k=9;k<=p.y;k++){
    for(let i=p.x-20;i<=p.x+20;i++){
        for(let j=p.z-20;j<=p.z+20;j++){
            if(voxels.getVoxel(i,k,j)==voxels.id("stainless_steel")||voxels.getVoxel(i,k,j)==voxels.id("plank_02")||voxels.getVoxel(i,k,j)==voxels.id("dark_stone")||voxels.getVoxel(i,k,j)==voxels.id("stone")||voxels.getVoxel(i,k,j)==voxels.id("stone_pillar_03")||voxels.getVoxel(i,k,j)==voxels.id("red_light")||voxels.getVoxel(i,k,j)==voxels.id("green_light")){
                voxels.setVoxel(i,k,j,0)
            }else if(voxels.getVoxel(i,k,j)==voxels.id("one")||voxels.getVoxel(i,k,j)==voxels.id("two")||voxels.getVoxel(i,k,j)==voxels.id("three")||voxels.getVoxel(i,k,j)==voxels.id("four")||voxels.getVoxel(i,k,j)==voxels.id("five")||voxels.getVoxel(i,k,j)==voxels.id("six")||voxels.getVoxel(i,k,j)==voxels.id("seven")||voxels.getVoxel(i,k,j)==voxels.id("eight")){
                voxels.setVoxel(i,k,j,0)
            }
        }
    }
}
for(let i=p.y-1;i>7;i--){
    if(Math.random()*3<1){
        buildRect({x:p.x,y:i,z:p.z},wid,"dark_stone");
    }else{
        buildRect({x:p.x,y:i,z:p.z},wid,"stone");
    }
    
    wid++;
}

buildRect({x:p.x,y:p.y,z:p.z},size+3,"plank_02");
buildRect({x:p.x,y:p.y,z:p.z},size,"stone_pillar_03");
buildRect({x:p.x,y:p.y-1,z:p.z},size,"stainless_steel");
world.ch=world.onChat(async({entity,message})=>{
    // if(message=="答案"){
    //     buildRect({x:p.x,y:p.y,z:p.z},size,0);
    //     await sleep(4000);
    //     world.ch.cancel();
    //     world.pr.cancel();
    //     world.say("游戏结束!十秒后开始新的一局");
    //         world.querySelectorAll("player").forEach((e)=>{
    //             if(e.player.score!=0){
    //                 world.say(e.player.name+"获得了"+e.player.score+"分!")
    //             }
    //         })
    //         await sleep(5000);
    //     gamePlay()
    // }
})


for(let i=-size;i<=size;i++){
    for(let j=-size;j<=size;j++){
        if(Math.random()*mineRate<1){
            voxels.setVoxel(i+p.x,p.y-1,j+p.z,"red_light");
            minecnt++;
        }
    }
}

var size2=size*2+1
world.say("本次棋盘大小为"+size2+"x"+size2+",共喵+minecnt+"颗雷")
world.pr=world.onPress(async({entity,button,raycast:{voxelIndex,hitVoxel}})=>{
    var x=voxelIndex.x;
    var y=voxelIndex.y;
    var z=voxelIndex.z;
    if(button=="action0"&&hitVoxel==voxels.id("stone_pillar_03")){
        entity.player.score+=0.1;
        voxels.setVoxel(x,y,z,isMine(x,y,z,entity));
        if(end()){
                    world.ch.cancel();
        world.pr.cancel();
            world.say("游戏结束!十秒后开始新的一局");
            world.querySelectorAll("player").forEach((e)=>{
                if(e.player.score!=0){
                    world.say(e.player.name+"获得了"+Math.round(e.player.score*10)/10+"分!")
                }
            })
            await sleep(5000);
            gamePlay();
            return;
        }

    }else if(button=="action1"){
        if(hitVoxel==voxels.id("stone_pillar_03")){
            voxels.setVoxel(x,y,z,"green_light");
            world.say("标记成功!")
        }else if(hitVoxel==voxels.id("green_light")){
            voxels.setVoxel(x,y,z,"stone_pillar_03");
            world.say("删除成功!")
        }
    }
})
}
gamePlay()


回复

上一页1 页 / 共 1下一页
IaeaIaea

沙发

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

emotion_编程猫_厉害了

点赞0


评论


IaeaIaea

emotion_编程猫_厉害了

点赞0


评论


指令者指令者

尹子yyds!!!

点赞0


评论


1234578912345789

emotion_编程猫_厉害了

点赞0


评论


神兽喵神兽喵

针不戳*=4

点赞0


评论


JYF_斗罗JYF_斗罗

牛~

点赞0


评论


憨白不憨awa憨白不憨awa

az()

点赞0


评论


治愈绾兮治愈绾兮

这代码太复杂了……我的扫雷代码只要96行

点赞0


评论