パイクラおじさんの日記

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

池の水面データを参照しながらブロックを設置する(2)

loadnpy3.pyを先に池を作ってから、水を設置するように変更した。

さらに、x軸のループではsleepを入れないようにした。

これは問題はあるけど、水の処理をあまり走らせたくないので。

# coding: utf-8

import mcpi.minecraft as minecraft
import mcpi.block as block
import numpy as np
import pycra.npydata as nd
import sys
from time import sleep

LOG_FMT = "Z step ({}/{})"

# ここからスタート

mc = minecraft.Minecraft()

if len(sys.argv) < 3:
    print("loadnpy3.py npyfilename lakesurface")
    exit(-1)

array = np.load(nd.NPY_DIR+"/"+sys.argv[1])
lksurf = np.load(nd.NPY_DIR+"/"+sys.argv[2])

mc.postToChat("Loadnpy3.py Start!")

(zshape, xshape) = array.shape

for z in range(zshape):
    for x in range(xshape):
        ls = lksurf[z][x]
        hval = array[z][x]
        if ls > hval:
            mc.setBlocks(x, hval, z, x, hval-7, z, block.DIRT)
            #mc.setBlocks(x, ls, z, x, hval+1, z, block.WATER)
        else:
            mc.setBlocks(x, hval-1, z, x, hval-7, z, block.DIRT)
            mc.setBlock(x, hval, z, block.GRASS)
        #sleep(0.01)
    mc.postToChat(LOG_FMT.format(z, zshape))
    sleep(0.1)

mc.postToChat("Loadnpy3.py Water start!")

for z in range(zshape):
    for x in range(xshape):
        ls = lksurf[z][x]
        hval = array[z][x]
        if ls > hval:
            #mc.setBlocks(x, hval, z, x, hval-7, z, block.DIRT)
            mc.setBlocks(x, ls, z, x, hval+1, z, block.WATER)
        #sleep(0.01)
    mc.postToChat(LOG_FMT.format(z, zshape))
    sleep(0.1)

mc.postToChat("Loadnpy3.py Finish!!!")

実行結果

f:id:pycra:20170929004428p:plain

f:id:pycra:20170929004445p:plain

f:id:pycra:20170929004501p:plain

f:id:pycra:20170929004545p:plain

f:id:pycra:20170929004721p:plain

盛り上がっているところを空のバケツで汲み取って、水面のデコボコをきれいにした。