木を生やす(3)
コマンド1つで幹も生やして葉っぱも生成したい。
leaves.pyを関数にして、木(幹)の位置と高さを指定して、それに合わせて葉っぱを生成する。
wood.pyとして、こんな感じに実装。
# coding: utf-8 import mcpi.minecraft as minecraft import mcpi.block as block import math import random import sys def leaves(mc, x, y, z, radius, density): min_x = int(x - radius) max_x = int(x + radius) min_y = int(y - radius) max_y = int(y + radius) min_z = int(z - radius) max_z = int(z + radius) for dy in range(min_y, max_y+1): for dx in range(min_x, max_x+1): for dz in range(min_z, max_z+1): xx = dx - x yy = dy - y zz = dz - z s = xx * xx + yy * yy + zz * zz sq = math.sqrt(s) if sq <= radius: block_id = mc.getBlock(dx, dy, dz) if block_id == block.AIR: if sq < radius - 0.5: if random.random() < density: mc.setBlock(dx, dy, dz, block.LEAVES) else: mc.setBlock(dx, dy, dz, block.LEAVES) def wood(mc, x, y, z): height = 4 + int(random.random() * 5) mc.setBlocks(x, y, z, x, y + height, z, block.WOOD) offset = height * 0.25 leaves(mc, x, y + height - offset, z, height * 0.5, 0.5) # ここからスタート mc = minecraft.Minecraft() if len(sys.argv) < 4: sys.exit("Usage: wood x y z") x = float(sys.argv[1]) y = float(sys.argv[2]) z = float(sys.argv[3]) wood(mc, x, y, z)
こんな感じに4本生成してみた。
/python wood 0 0 0 /python wood 5 0 0 /python wood 5 0 5 /python wood 0 0 5
配置が単純すぎた。