用户:
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()