パイクラおじさんの日記

MinecraftでPythonを勉強するおじさんの日記です。

木を生やす(2)

leaves.pyを外はそのままで内部を間引くようにしてみた。

# coding: utf-8

import mcpi.minecraft as minecraft
import mcpi.block as block
import math
import random
import sys

# ここからスタート

mc = minecraft.Minecraft()

if len(sys.argv) < 6:
    sys.exit("Usage: leaves x y z radius density")

x = float(sys.argv[1])
y = float(sys.argv[2])
z = float(sys.argv[3])
r = float(sys.argv[4])
d = float(sys.argv[5])

min_x = int(x - r)
max_x = int(x + r)
min_y = int(y - r)
max_y = int(y + r)
min_z = int(z - r)
max_z = int(z + r)

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 <= r:
                block_id = mc.getBlock(dx, dy, dz)
                if block_id == block.AIR:
                    if sq < r - 0.5:
                        if random.random() < d:
                            mc.setBlock(dx, dy, dz, block.LEAVES)
                    else:
                        mc.setBlock(dx, dy, dz, block.LEAVES)

いい気になって、こんなパラメータで実行してみた。

/python leaves 0 100 0 90 0.3

こんなにデカいのね…

f:id:pycra:20171007105840p:plain

ブロックが葉で透過処理が入るからか、近寄るとCPUファンがガンガン回る。

f:id:pycra:20171007230349p:plain

で、当然、葉っぱだけなので枯れて崩壊する。