今回は3Dカラープリンターの時に作った巨大なブタさんを動かしてみます。
ブロックを動かすには、minecraftstuff.pyというものを使います。Martin O’Hanlonさんというイギリスの方が作成して、こちらで
minecraftstuff.pyを手に入れて、mcpiフォルダの中に入れておいてください。まずはブロックの動かし方です。2×2×2の赤いサイコロを作って動かします。
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()
こんな赤いサイコロが
まで進んでいきます。
さて、いよいよブタさんを動かします。コードはこんな感じです。
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
shapeを作るところは、カラープリンターの時のprint3Dとほとんど同じです。
では、
おおー、本当にブタさんが進んでいきます。ブタさんのぶつかった所はブロックが無くなってしまうみたいです。