猫史档案馆


[每周一氵]如何建造小课堂~

用户:文件是只屑13374101文件是只屑13374101查看:0 回复:3 评论:0 创建时间:2023-02-13T17:45:18


啊对对对

文件的小课堂在这!

center_image

今天我们来讲如何建造教室~

众所周知,有一个作品叫恒光学院,我不会将那种讲出来

1.首先把yizi的代码搬过来(我没有版权,版权给yizi)

var 喵ooth=2.5;/*平滑程度,数字越小山越高 */
var waterLevel=12;/*水面高度 */
var size=256;/*地图边长 */
var Tree=true;/*自动生成树 */
var ImprovedNoise = function () {

	var p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,
		 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,
		 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,
		 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,
		 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 1喵, 100, 109, 198, 173, 186, 3, 喵, 52, 217, 226, 250, 124, 123, 5,
		 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,
		 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,
		 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,
		 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,
		 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];

	for ( var i = 0; i < 256; i ++ ) {

		p[ 256 + i ] = p[ i ];

	}

	function fade( t ) {

		return t * t * t * ( t * ( t * 6 - 15 ) + 10 );

	}

	function lerp( t, a, b ) {

		return a + t * ( b - a );

	}

	function grad( hash, x, y, z ) {

		var h = hash & 15;
		var u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;
		return ( ( h & 1 ) == 0 ? u : - u ) + ( ( h & 2 ) == 0 ? v : - v );

	}

	return {

		noise: function ( x, y, z ) {

			var floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );

			var X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;

			x -= floorX;
			y -= floorY;
			z -= floorZ;

			var xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;

			var u = fade( x ), v = fade( y ), w = fade( z );

			var A = p[ X ] + Y, AA = p[ A ] + Z, AB = p[ A + 1 ] + Z, B = p[ X + 1 ] + Y, BA = p[ B ] + Z, BB = p[ B + 1 ] + Z;

			return lerp( w, lerp( v, lerp( u, grad( p[ AA ], x, y, z ),
				grad( p[ BA ], xMinus1, y, z ) ),
			lerp( u, grad( p[ AB ], x, yMinus1, z ),
				grad( p[ BB ], xMinus1, yMinus1, z ) ) ),
			lerp( v, lerp( u, grad( p[ AA + 1 ], x, y, zMinus1 ),
				grad( p[ BA + 1 ], xMinus1, y, zMinus1 ) ),
			lerp( u, grad( p[ AB + 1 ], x, yMinus1, zMinus1 ),
				grad( p[ BB + 1 ], xMinus1, yMinus1, zMinus1 ) ) ) );

		}
	};

};



function generateHeight(width, height) {

    const size = width * height, data = new Uint8Array(size),
        perlin = new ImprovedNoise(), z = Math.random() * 100;

    let quality = 1;

    for (let j = 0; j < 4; j++) {

        for (let i = 0; i < size; i++) {

            const x = i % width, y = ~ ~(i / width);
            data[i] += Math.abs(perlin.noise(x / quality, y / quality, z) * quality * 1.75);

        }

        quality *= 5;

    }

    return data;

}
(async function(){
    function tree(x,y,z){
        if(voxels.getVoxel(x,y,z)!=voxels.id("water")){var rand=1;
        for(let i=y+rand;i<y+4+rand;i++){voxels.setVoxel(x,i,z,"acacia");}
        for(let i=3+rand;i<5+rand;i++){for(let j=-2;j<3;j++){for(let k=-2;k<3;k++){voxels.setVoxel(x+j,y+i,z+k,"green_leaf");}}}
        for(let j=-1;j<2;j++){for(let k=-1;k<2;k++){voxels.setVoxel(x+j,y+5+rand,z+k,"green_leaf");}}
        voxels.setVoxel(x-1,y+6+rand,z,"green_leaf");voxels.setVoxel(x,y+6+rand,z,"green_leaf");voxels.setVoxel(x+1,y+6+rand,z,"green_leaf");voxels.setVoxel(x,y+6+rand,z-1,"green_leaf");voxels.setVoxel(x,y+6+rand,z+1,"green_leaf");
        } 
    };
    async function spawnTree(){
    for(let i=0;i<257;i++){
    for(let j=0;j<257;j++){for(let k=0;k<50;k++){if(voxels.getVoxel(i,k,j)==voxels.id("grass")){if(Math.random()*150<=1){
        tree(i,k,j);
    }}}}
    await sleep(10);
}
}
    console.log("start");
    var dat=generateHeight(size,size);
    for(let i=0;i<=dat.length;i+=size){
        for(let j=i;j<=i+size;j++){
            var x=i/size,y=Math.round(dat[j]/喵ooth+2),z=j-i;
            if(y>waterLevel)voxels.setVoxel(x,y,z,"grass");
            else if(y==waterLevel)voxels.setVoxel(x,y,z,"sand");
            else{voxels.setVoxel(x,y,z,"dirt");for(let s=y+1;s<=waterLevel;s++)voxels.setVoxel(x,s,z,"water");}
            for(let s=1;s<y;s++)voxels.setVoxel(x,s,z,"dirt");
            if(Math.random()<0.1)await sleep(2);
        }
        
    }
    if(Tree){
        spawnTree();
    }
    console.log("生成完毕")
})()

这样:

center_image

 

然后打一个架子

center_image

然后建墙!

然后装饰

OK!


回复

上一页1 页 / 共 1下一页
文件是只屑13374101文件是只屑13374101

图呢!

点赞0


评论


Mecat⁧~喵呜⁧Mecat⁧~喵呜⁧

     

点赞0


评论


锦衣侠客锦衣侠客

ddd

点赞0


评论