用户:
YDS尹子查看:7 回复:13 评论:7 创建时间:2021-02-09T11:25:53
------------------------------------------------------------------
(最开始生成出来的地形是土色的,不用怕,因为后面会上色)
只是便于代码去识别地形
服务器的内存可能会炸,不行的话多试几次,再不行可以回复我)
var waterLevel = 10;/*水平面 */
async function summon(times) {/*由于尹子比较懒就直接把曾经做的手绘这种地形的代码改了一下放在了这儿 */
world.say("放置中...");
for (let iiii = 0; iiii < times; iiii++) {
var pos = new Box3Vector3(Math.round(Math.random() * 256), Math.round(Math.random() * 50), Math.round(Math.random() * 256));
var r = 8;
var voxel = "board10";
for (let i = pos.x - r; i <= pos.x + r; i++) {
for (let j = pos.z - r; j <= pos.z + r; j++) {
for (let k = pos.y; k <= pos.y + r; k++) {
if (new Box3Vector3(i, k, j).distance(pos) <= r && voxels.getVoxel(i, k, j) == 0) {
for (let x = k - 1; x >= 0; x--) {
if (voxels.getVoxel(i, x, j) != 0) {
voxels.setVoxel(i, x + 1, j, voxel);
break;
}
}
}
}
}
}
if (iiii % 10 == 0) await sleep(10);
}
world.say("放置中...");
for (let iiii = 0; iiii < times; iiii++) {
var pos = new Box3Vector3(Math.round(Math.random() * 256), Math.round(Math.random() * 50), Math.round(Math.random() * 256));
var r = 15;
var voxel = "board10";
for (let i = pos.x - r; i <= pos.x + r; i++) {
for (let j = pos.z - r; j <= pos.z + r; j++) {
if (new Box3Vector3(i, pos.y, j).distance(pos) <= r && voxels.getVoxel(i, pos.y, j) == 0) {
for (let x = pos.y - 1; x >= 0; x--) {
if (voxels.getVoxel(i, x, j) != 0) {
voxels.setVoxel(i, x + 1, j, voxel);
break;
}
}
}
}
}
if (iiii % 10 == 0) await sleep(10);
}
};
async function noiseDestroy(num) {
world.say("消噪初始化...");
for (let kkkk = 0; kkkk < num; kkkk++) {
var voxelReadyBreak = [];
var d = [/*四个方向 */
[1, 0, 0],
[0, 0, 1],
[-1, 0, 0],
[0, 0, -1]
];
for (let i = 0; i < 257; i++) {
for (let j = 0; j < 257; j++) {
for (let k = 0; k < 60; k++) {
if (voxels.getVoxel(i, k, j) == 0) {/*找出空气方块周围有>=3块都是实体方块并填充 */
var cnt = 0;
for (let s = 0; s < d.length; s++) {
if ([127, 125].includes(voxels.getVoxel(i + d[s][0], k + d[s][1], j + d[s][2]))) {
cnt++;
}
}
if (cnt >= 3) {
if (k < waterLevel) {
voxelReadyBreak.push([i, k, j, "dirt"]);
} else if (k == waterLevel) {
voxelReadyBreak.push([i, k, j, "sand"]);
} else {
voxelReadyBreak.push([i, k, j, "grass"]);
}
}
} else if ([127, 125].includes(voxels.getVoxel(i, k, j))) {/*找出实体方块周围有>=3块都是液体或者空气的并清除 */
var cnt = 0;
for (let s = 0; s < d.length; s++) {
if ([0, 3喵].includes(voxels.getVoxel(i + d[s][0], k + d[s][1], j + d[s][2]))) {
cnt++;
}
}
var voxel = 0;
if (k < waterLevel) voxel = 3喵;
if (k == waterLevel) voxel = 135;
if (cnt >= 3) voxelReadyBreak.push([i, k, j, voxel]);
}
}
}
}
for (let i = 0; i < voxelReadyBreak.length; i++) {/*最后一起放置,以避免误差 */
voxels.setVoxel(voxelReadyBreak[i][0], voxelReadyBreak[i][1], voxelReadyBreak[i][2], voxelReadyBreak[i][3])
}
world.say("消噪中...进度" + kkkk + "/"+num);
await sleep(100);
}
world.say("地形正常化...");/*把消噪的时候出问题的方块还原 */
for (let i = 0; i < 257; i++) { for (let j = 0; j < 257; j++)for (let k = 0; k <= waterLevel; k++) { if (voxels.getVoxel(i, k, j) == 0) { voxels.setVoxel(i, k, j, "water") } } }
for (let i = 0; i < 257; i++) { for (let j = 0; j < 257; j++)for (let k = 0; k < 60; k++) { if (voxels.getVoxel(i, k, j) == voxels.id("dirt") && voxels.getVoxel(i, k + 1, j) == 0) { voxels.setVoxel(i, k, j, "grass") } } };
for (let i = 0; i < 257; i++) { for (let j = 0; j < 257; j++)for (let k = 0; k < 60; k++) { if (voxels.getVoxel(i, k, j) == voxels.id("grass") && voxels.getVoxel(i, k + 1, j) != 0) { voxels.setVoxel(i, k, j, "dirt") } } }
world.say("完毕");
};
async function color(){
for (let i = 0; i < 257; i++) {
for (let j = 0; j < 257; j++) {
for (let k = 0; k < 60; k++) {
if (voxels.getVoxel(i, k, j) == 453) {
if (voxels.getVoxel(i, k + 1, j) == 0) {
if (k > waterLevel) {
voxels.setVoxel(i, k, j, "grass");
continue;
} else if (k == waterLevel) {
voxels.setVoxel(i, k, j, "sand");
continue;
} else {
voxels.setVoxel(i, k, j, "dirt");
}
} else {
voxels.setVoxel(i, k, j, "dirt");
continue;
}
}
}
}
await sleep(10);
}
};
(async function () {
/*生成一堆球 */
await summon(700);
/*生成一堆圆柱 */
world.say("上色中...");
await color();
await sleep(100);
await noiseDestroy(7);/*消除噪点 */
})();

该账号已被封禁▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅▆▇█▇▆▅▄▃▂▁
点赞0
评论
MrAss尹子能不能来我的地图? https://box3.codemao.cn/e/238f455444d9bc08af74?p=iyqdecC26ovcKrx6JMvvlBIg1c75RIvE5CuvJ09UrOA62exHC7LwVndWVzdA%3D%3D
点赞0
评论
MrAss顶
要顶
必须顶
不得不顶
用尽全力顶
再加上千斤顶
总之把它顶到顶
接着使出葵花宝顶
就算顶到史前也要顶
老子看了会用道德经顶
孔子亲自拜你为师天天顶
秦始皇站在阿房宫上使劲顶
汉高祖挥师杀向东罗马为你顶
吕布抛弃了貂禅而选择了帮你顶
汉高祖挥师杀向东罗马为你顶
秦始皇站在阿房宫上使劲顶
孔子亲自拜你为师天天顶
老子看了会用道德经顶
就算顶到史前也要顶
接着使出葵花宝顶
总之把它顶到顶
再加上千斤顶
用尽全力顶
不得不顶
必须顶
要顶
顶
点赞1
评论