2020年度卒研セミナー(2020/06/11)

関連サイトと資料

関数を使ったプログラム

pyramid3x.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()
   
height = 51
A = ((height*2)-1)
for i in range(height):
    mc.setBlocks(pos.x+i,pos.y+i,pos.z+i,pos.x+(A-(i+1)),pos.y+i,pos.z+(A-(i+1)),STONE)
    

func1.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
def pyramid(height):
    mc = Minecraft.create()
    pos = mc.player.getTilePos()
    A = ((height*2)-1)
    for i in range(height):
        mc.setBlocks(pos.x+i,pos.y+i,pos.z+i,pos.x+(A-(i+1)),pos.y+i,pos.z+(A-(i+1)),STONE)
  
pyramid(5) #好きな数字を入れてみよう
    

クラスを使ったプログラム

class1.py
class ThreePutBolock:
    #初期化(コンストラクタ)
    def __init__(self, mc,blockName,pos):
        self.blockName = blockName
        self.pos = pos
        self.mc = mc
  
    #x座標方向にブロックを配置
    def verticalXPlacement(self):
        self.mc.setBlocks(self.pos.x,self.pos.y,self.pos.z,self.pos.x+2,self.pos.y,self.pos.z,self.blockName)
  
    #z座標方向にブロックを配置
    def verticalZPlacement(self):
        self.mc.setBlocks(self.pos.x,self.pos.y,self.pos.z,self.pos.x,self.pos.y,self.pos.z+2,self.blockName)
   
    #y座標方向にブロックを配置
    def horizontalPlacement(self):
        self.mc.setBlocks(self.pos.x,self.pos.y,self.pos.z,self.pos.x,self.pos.y+2,self.pos.z,self.blockName)
    

class2.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
#ブロックを各方向に3つ配置するクラス
class ThreePutBolock:
   
    #初期化(コンストラクタ)
    def __init__(self, mc, blockName, pos):
        self.blockName = blockName
        self.pos = pos
        self.mc = mc
      
    #x座標方向にブロックを配置
    def verticalXPlacement(self):
        self.mc.setBlocks(self.pos.x,self.pos.y,self.pos.z,self.pos.x+2,self.pos.y,self.pos.z,self.blockName)
  
    #z座標方向にブロックを配置
    def verticalZPlacement(self):
        self.mc.setBlocks(self.pos.x,self.pos.y,self.pos.z,self.pos.x,self.pos.y,self.pos.z+2,self.blockName)
  
    #y座標方向にブロックを配置
    def horizontalPlacement(self):
        self.mc.setBlocks(self.pos.x,self.pos.y,self.pos.z,self.pos.x,self.pos.y+2,self.pos.z,self.blockName)
  
mc = Minecraft.create()
pos = mc.player.getTilePos()
  
#クラスのテスト
test = ThreePutBolock(mc,STONE,pos)
test.verticalXPlacement()
test.verticalZPlacement()
test.horizontalPlacement()
    

Pythonで豆腐建築を作る

Tohu1.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
  
mc = Minecraft.create()
pos = mc.player.getTilePos()
   
#5×5×5の四角形を作成
mc.setBlocks(pos.x,pos.y,pos.z,pos.x+4,pos.y+4,pos.z+4,STONE)
#3×3×3の四角をAIRブロックで上書き
mc.setBlocks(pos.x+1,pos.y+1,pos.z+1,pos.x+3,pos.y+3,pos.z+3,AIR)
    

関数を利用して形を変える

Tohu2.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
pos = mc.player.getTilePos()
  
#豆腐を作るための関数。引数は幅、高さ、奥行き。戻り値なし
def tofu(Width, Height, Depth):
    
    X2 = Width - 1    #x座標の終点位置
    Y2 = Height - 1   #y座標の終点位置
    Z2 = Depth - 1    #z座標の終点位置
    
    AIR_X2 = X2 - 1   #空気の描画用のx座標の終点
    AIR_Y2 = Y2 - 1   #空気の描画用のy座標の終点
    AIR_Z2 = Z2 - 1   #空気の描画用のz座標の終点
    
    #ブロックの配置とくり抜き
    mc.setBlocks(pos.x,pos.y,pos.z,pos.x+X2,pos.y+Y2,pos.z+Z2,STONE)
    mc.setBlocks(pos.x+1,pos.y+1,pos.z+1,pos.x+AIR_X2,pos.y+AIR_Y2,pos.z+AIR_Z2,AIR)
    
tofu(5,5,5)
    

Tohu3.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
pos = mc.player.getTilePos()
   
#豆腐を作るための関数。引数は幅、高さ、奥行き。戻り値なし
def tofu(Width, High, Depth):
    
    X2 = Width - 1   #x座標の終点位置
    Y2 = High - 2    #y座標の終点位置
    Z2 = Depth - 1   #z座標の終点位置
    
    AIR_X2 = X2 - 1   #空気の描画用のx座標の終点
    AIR_Y2 = Y2 - 1   #空気の描画用のy座標の終点
    AIR_Z2 = Z2 - 1   #空気の描画用のz座標の終点
       
    #ブロックの配置とくり抜き
    mc.setBlocks(pos.x,pos.y-1,pos.z,pos.x+X2,pos.y+Y2,pos.z+Z2,STONE)
    mc.setBlocks(pos.x+1,pos.y,pos.z+1,pos.x+AIR_X2,pos.y+AIR_Y2,pos.z+AIR_Z2,AIR)
      
tofu(5,5,5)
    

豆腐建築に扉を設置する

Tohu4.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
pos = mc.player.getTilePos()
   
#豆腐を作るための関数。引数は幅、高さ、奥行き。戻り値なし
def tofu(Width, High, Depth):
      
    X2 = Width - 1   #x座標の終点位置
    Y2 = High - 2    #y座標の終点位置
    Z2 = Depth - 1   #z座標の終点位置
      
    AIR_X2 = X2 - 1   #空気の描画用のx座標の終点
    AIR_Y2 = Y2 - 1   #空気の描画用のy座標の終点
    AIR_Z2 = Z2 - 1   #空気の描画用のz座標の終点
      
    #ブロックの配置とくり抜き
    mc.setBlocks(pos.x,pos.y-1,pos.z,pos.x+X2,pos.y+Y2,pos.z+Z2,STONE)
    mc.setBlocks(pos.x+1,pos.y,pos.z+1,pos.x+AIR_X2,pos.y+AIR_Y2,pos.z+AIR_Z2,AIR)
      
    #扉の作成
    mc.setBlock(pos.x+2,pos.y,pos.z,DOOR_WOOD.id,1)
    mc.setBlock(pos.x+2,pos.y+1,pos.z,DOOR_WOOD.id,8)
    mc.setBlock(pos.x+1,pos.y,pos.z,DOOR_WOOD.id,1)
    mc.setBlock(pos.x+1,pos.y+1,pos.z,DOOR_WOOD.id,9)
      
tofu(5,5,5)