2021年1月17日日曜日

Ubuntu20.04でPycraft mod for MinetestとPythonを使用して2階建ての家を作成する

Pycraft mod for MinetestとPythonを使用して2階建ての家を作成するには、以下の手順を実行します。

〇Pycraft mod for MinetestとPythonで作成した2階建ての家

作成方法

1. Pycraft mod for Minetestのインストール
Pycraft mod for Minetestをインストールしていない場合は、以下の記事を参考にしてインストールしてください。
Ubuntu20.04でPycraft mod for MinetestとPythonを使用して指定されたブロックの床を作成する

2. プログラミング
以下のコードで、2階建ての家を作成します。Thonnyの場合は、以下のコードを保存後、緑色の再生ボタンをクリックして実行してください。
import mcpi.minecraft as minecraft
import mcpi.block as block

# 家の幅(内径)
house_xs = 6
# 家の高さ1F(内径)
house_ys = 5
# 家の奥行き(内径)
house_zs = 10

def two_storied_house(px, py, pz):

    # 床1F
    for dx in range(house_xs+2):
        for dz in range(house_zs+2):
          mc.setBlock( px+dx, py, pz+dz, block.BRICK_BLOCK)

    # 壁1F
    for dx in range(house_xs+2):
        for dz in range(house_zs+2):
            for dy in range(house_ys):
                if dx == 0 or dz == 0 or dx == house_xs+1 or dz == house_zs+1:
                    mc.setBlock( px+dx, py+dy+1, pz+dz, block.BRICK_BLOCK )
                else:
                    mc.setBlock( px+dx, py+dy+1, pz+dz, block.AIR )

    # 床2F
    for dx in range(house_xs+2):
        for dz in range(house_zs+2):
          mc.setBlock( px+dx, py+house_ys, pz+dz, block.BRICK_BLOCK)

    # 壁2F
    for dx in range(house_xs+2):
        for dz in range(house_zs+2):
            for dy in range(house_ys):
                if dx == 0 or dz == 0 or dx == house_xs+1 or dz == house_zs+1:
                    mc.setBlock( px+dx, py+dy+1+house_ys, pz+dz, block.BRICK_BLOCK )
                else:
                    mc.setBlock( px+dx, py+dy+1+house_ys, pz+dz, block.AIR )

    # ドアの穴
    for dx in range(2):
        for dy in range(house_ys-1):
            mc.setBlock( px+dx+2, py+dy+1, pz, block.AIR )

    # 1F窓
    mc.setBlock( px, py+2, pz+3, block.GLASS )
    mc.setBlock( px, py+3, pz+3, block.GLASS )
    mc.setBlock( px, py+2, pz+4, block.GLASS )
    mc.setBlock( px, py+3, pz+4, block.GLASS )
    mc.setBlock( px, py+2, pz+5, block.GLASS )
    mc.setBlock( px, py+3, pz+5, block.GLASS )

    # 1F窓2
    mc.setBlock( px+house_xs+1, py+2, pz+3, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3, pz+3, block.GLASS )
    mc.setBlock( px+house_xs+1, py+2, pz+4, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3, pz+4, block.GLASS )
    mc.setBlock( px+house_xs+1, py+2, pz+5, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3, pz+5, block.GLASS )

    # 階段
    mc.setBlock( px+house_xs, py+1, pz+6, block.STAIRS_WOOD.id,2 )
    mc.setBlock( px+house_xs, py+2, pz+7, block.STAIRS_WOOD.id,2 )
    mc.setBlock( px+house_xs, py+3, pz+8, block.STAIRS_WOOD.id,2 )
    mc.setBlock( px+house_xs, py+4, pz+9, block.STAIRS_WOOD.id,2 )
    mc.setBlock( px+house_xs, py+5, pz+10, block.STAIRS_WOOD.id,2 )
    mc.setBlock( px+house_xs, py+5, pz+9, block.AIR )
    mc.setBlock( px+house_xs, py+5, pz+8, block.AIR )
    mc.setBlock( px+house_xs, py+5, pz+7, block.AIR )

    # 2F窓
    mc.setBlock( px, py+2+house_ys, pz+2, block.GLASS )
    mc.setBlock( px, py+3+house_ys, pz+2, block.GLASS )
    mc.setBlock( px, py+2+house_ys, pz+3, block.GLASS )
    mc.setBlock( px, py+3+house_ys, pz+3, block.GLASS )
    mc.setBlock( px, py+2+house_ys, pz+7, block.GLASS )
    mc.setBlock( px, py+3+house_ys, pz+7, block.GLASS )
    mc.setBlock( px, py+2+house_ys, pz+8, block.GLASS )
    mc.setBlock( px, py+3+house_ys, pz+8, block.GLASS )

    # 2F窓2
    mc.setBlock( px+house_xs+1, py+2+house_ys, pz+2, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3+house_ys, pz+2, block.GLASS )
    mc.setBlock( px+house_xs+1, py+2+house_ys, pz+3, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3+house_ys, pz+3, block.GLASS )
    mc.setBlock( px+house_xs+1, py+2+house_ys, pz+7, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3+house_ys, pz+7, block.GLASS )
    mc.setBlock( px+house_xs+1, py+2+house_ys, pz+8, block.GLASS )
    mc.setBlock( px+house_xs+1, py+3+house_ys, pz+8, block.GLASS )

    # 屋根
    for dy in range(3):
        for dx in range(house_xs+2-dy*2):
            for dz in range(house_zs+2-dy*2):
                mc.setBlock( px+dx+dy, py+dy+house_ys*2, pz+dz+dy, block.REDSTONE_BLOCK)

    # 本棚
    mc.setBlock( px+1, py+1, pz+house_zs, block.BOOKSHELF)
    mc.setBlock( px+1, py+2, pz+house_zs, block.BOOKSHELF)

    # 明かり
    mc.setBlock( px+3, py+1, pz+house_zs, block.SEA_LANTERN)
    mc.setBlock( px+3, py+1+house_ys, pz+house_zs, block.SEA_LANTERN)

# ローカルサーバに接続
mc = minecraft.Minecraft.create("127.0.0.1")
# プレイヤーの位置を取得
pos = mc.player.getPos()
print(pos)
two_storied_house(pos.x, pos.y, pos.z+5)

関連情報

・Minetestに関する情報はこちらを参照してください。

0 件のコメント:

コメントを投稿