今回は
3Dカラープリンターの時に作った巨大なブタさんを動かしてみます。
ブロックを動かすには、
minecraftstuff.pyというものを使います。Martin O'Hanlonさんというイギリスの方が作成して、こちらで
紹介されています。
minecraftstuff.pyを手に入れて、mcpiフォルダの中に入れておいてください。まずはブロックの動かし方です。2×2×2の赤いサイコロを作って動かします。
[python]
import mcpi.minecraft as minecraft
import mcpi.minecraftstuff as stuff
import mcpi.block as block
import time
from mcpi.vec3 import Vec3
mc = minecraft.Minecraft()
pos = mc.player.getTilePos()
cubelocks = [
stuff.ShapeBlock(0,0,0,block.REDSTONE_BLOCK),
stuff.ShapeBlock(1,0,0,block.REDSTONE_BLOCK),
stuff.ShapeBlock(0,1,0,block.REDSTONE_BLOCK),
stuff.ShapeBlock(0,0,1,block.REDSTONE_BLOCK),
stuff.ShapeBlock(1,1,0,block.REDSTONE_BLOCK),
stuff.ShapeBlock(0,1,1,block.REDSTONE_BLOCK),
stuff.ShapeBlock(1,0,1,block.REDSTONE_BLOCK),
stuff.ShapeBlock(1,1,1,block.REDSTONE_BLOCK)
]
cubeShape = stuff.MinecraftShape(mc, pos + Vec3(5,5,5), cubelocks)
for i in range(0, 20):
time.sleep(0.5)
cubeShape.moveBy(1,0,0)
cubeShape.clear()
[/python]
こんな赤いサイコロが
まで進んでいきます。
さて、いよいよブタさんを動かします。コードはこんな感じです。
[python]
import mcpi.minecraft as minecraft
import mcpi.minecraftstuff as stuff
import mcpi.block as block
import time
import csv
from mcpi.vec3 import Vec3
mc = minecraft.Minecraft()
pos = mc.player.getTilePos()
def shape3D(start, data, inc):
shape = []
for y in range(0,len(data)):
for z in range(0,len(data[y])):
for x in range(0,len(data[y][z])):
if data[y][z][x] != 0:
shape.append(stuff.ShapeBlock(x,y,z,inc[data[y][z][x]]))
return shape;
inc_pig = {1:block.WOOL_PINK, 2:block.WOOL_BROWN, 3:block.WOOL_BLACK, 4:block.WOOL_WHITE, 5:block.WOOL_RED}
data =[]
with open('pig.csv', 'r') as f:
file = csv.reader(f)
plane = []
for line in file:
if len(line) == 0:
data.append(plane)
plane = []
else:
plane.append(line)
data.append(plane)
data_conved = [[[int(elm) for elm in l] for l in p] for p in data]
pigBlocks = shape3D(mc.player.getPos() + Vec3(1,0,1), data_conved, inc_pig)
pigShape = stuff.MinecraftShape(mc, pos + Vec3(-10,0,5), pigBlocks)
for i in range(0, 100):
time.sleep(0.2)
pigShape.moveBy(-1,0,0)
pigShape.clear
[/python]
shapeを作るところは、カラープリンターの時のprint3Dとほとんど同じです。
では、
おおー、本当にブタさんが進んでいきます。ブタさんのぶつかった所はブロックが無くなってしまうみたいです。