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

関連サイトと資料

繰り返し文の基礎

loop1.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
        
mc = Minecraft.create()
pos = mc.player.getTilePos()
      
#x座標を基準に石ブロックを5つ並べるための繰り返し
for i in range(5):
    mc.setBlock(pos.x+i,pos.y,pos.z,STONE)  
    

階段や立方体を作成しよう

loop2.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
  
mc = Minecraft.create()
pos = mc.player.getTilePos()
        
#5段の階段を作るための繰り返し
for i in range(5):
    mc.setBlock(pos.x+i,pos.y+i,pos.z,STONE)
    

loop3.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
         
mc = Minecraft.create()
pos = mc.player.getTilePos()
        
#5*5*5の立方体の作成
for i in range(5):
    mc.setBlocks(pos.x,pos.y+i,pos.z,pos.x+4,pos.y+i,pos.z+4,STONE)
    

loop4.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
         
mc = Minecraft.create()
pos = mc.player.getTilePos()
        
#xを基準にして繰り返し毎にブロックの配置数を小さくする(5段の階段を作成) 
for i in range(5):
    mc.setBlocks(pos.x+i,pos.y+i,pos.z,pos.x+4,pos.y+i,pos.z+4,STONE)      
    

ピラミッドを作成しよう

pyramid1.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
           
mc = Minecraft.create()
pos = mc.player.getTilePos()
mc.setBlocks(pos.x,pos.y,pos.z,pos.x+8,pos.y,pos.z+8,STONE) #1段目
mc.setBlocks(pos.x+1,pos.y+1,pos.z+1,pos.x+7,pos.y+1,pos.z+7,STONE) #2段目
mc.setBlocks(pos.x+2,pos.y+2,pos.z+2,pos.x+6,pos.y+2,pos.z+6,STONE) #3段目
mc.setBlocks(pos.x+3,pos.y+3,pos.z+3,pos.x+5,pos.y+3,pos.z+5,STONE) #4段目
mc.setBlocks(pos.x+4,pos.y+4,pos.z+4,pos.x+4,pos.y+4,pos.z+4,STONE) #5段目      
    

pyramid2.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
         
mc = Minecraft.create()
pos = mc.player.getTilePos()
        
height = 3 #高さ
A = ((height*2)-1) #最底辺のブロック数
        
# 繰り返しによる三角形の作成
for i in range(height):
    mc.setBlocks(pos.x+i,pos.y+i,pos.z,pos.x+(A-(i+1)),pos.y+i,pos.z,STONE)       
    

pyramid3.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)      
    

条件分岐の基本

mc-if1.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
        
mc = Minecraft.create()
pos = mc.player.getTilePos()
        
#プレイヤーの真下にあるブロックを取得
blockType = mc.getBlock(pos.x,pos.y - 1,pos.z)
        
# 草ブロック(Block IDは2)
if blockType == 2:
         
    #真下にダイアモンドブロック(Block ID は41)を設置
    mc.setBlock(pos.x,pos.y - 1,pos.z,41)      
    

地形を変更する

mc-if2.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
  
mc = Minecraft.create()
pos = mc.player.getTilePos()
  
for posX in range(30):
    for posZ in range(30):
        #プレイヤーの真下にあるブロックを取得
        blockType = mc.getBlock(pos.x+posX,pos.y - 1,pos.z+posZ)
        # 水ブロック(ブロックIDは8、止まっている水は9)
        if blockType == 8 or blockType == 9:
        #真下に氷ブロック(ブロック名はICE、ブロックIDは41)を設置
            mc.setBlock(pos.x+posX,pos.y - 1,pos.z+posZ,ICE)
    

mc-if3.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
pos = mc.player.getTilePos()
   
for posX in range(20):
    for posZ in range(20):
        for posY in range(100):
            #プレイヤーと同じ高さ以上にあるブロックを取得
            blockType = mc.getBlock(pos.x+posX,pos.y+posY,pos.z+posZ)
            #原木の判定(ブロックIDは17)
            if blockType == 17:
                mc.setBlock(pos.x+posX,pos.y+posY,pos.z+posZ,WOOD_PLANKS)
            #葉の判定(ブロックIDは18)
            elif blockType == 18:
                mc.setBlock(pos.x+posX,pos.y+posY,pos.z+posZ,AIR)
    

コマンドによるプログラムの実行

mc-if4.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
  
mc.events.clearAll() #イベントの消去
while True:
    pos = mc.player.getTilePos()
    for i in mc.events.pollChatPosts():
        if i.message == "&exit": #プログラム終了命令
            exit()    
    

mc-if5.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
mc.events.clearAll() #すべてのイベント消去
   
while True:
    pos = mc.player.getTilePos() #現在いる座標の取得
    #チャットイベントの取得と処理
    for i in mc.events.pollChatPosts():
        #exitがチャットに入力されたらプログラム終了
        if i.message == "&exit":
            mc.postToChat("stop")
            exit() # プログラム終了命令     
        #&woodがチャットに入力された自身のいる座標に木材を置く
        elif i.message == "&wood":
            mc.setBlock(pos.x,pos.y,pos.z,WOOD_PLANKS)
    

剣でたたいた場所をダイヤモンドブロックに変更する

mc-if6.py
from mcpi.minecraft import Minecraft
from mcpi.block import *
   
mc = Minecraft.create()
pos = mc.player.getTilePos()
mc.events.clearAll() #すべてのイベント消去
   
while True:
    blockHits = mc.events.pollBlockHits() #たたいた情報を格納する
    #たたかれたこを確認
    if blockHits:
        #blockHitsの情報をblockHitに個別に格納
        for blockHit in blockHits:
            mc.setBlock(blockHit.pos.x,blockHit.pos.y, blockHit.pos.z,DIAMOND_BLOCK)