2020年11月19日木曜日

Ubuntu20.04でPycraft mod for MinetestとPythonを使用して螺旋階段付きの塔を作成する

Pycraft mod for MinetestとPythonを使用して螺旋階段付きの塔を作成するには、以下の手順を実行します。

〇Pycraft mod for MinetestとPythonで作成した螺旋階段付きの塔(昼間)

〇Pycraft mod for MinetestとPythonで作成した螺旋階段付きの塔(夜間)

作成方法

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

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

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

# 塔の高さ
tower_ys=48
# 塔の幅
tower_xs=7
# 塔の奥行き
tower_zs=7

# 塔の外壁
for dx in range(tower_xs):
    for dz in range(tower_zs):
        for dy in range(tower_ys):
            if dx == 0 or dz == 0 or dx == tower_xs-1 or dz == tower_zs-1:
                mc.setBlock( pos.x+dx, pos.y+dy, pos.z+dz, block.STONE_BRICK )
            else:
                mc.setBlock( pos.x+dx, pos.y+dy, pos.z+dz, block.AIR )

# 入り口
mc.setBlock( pos.x+int(tower_xs/2), pos.y, pos.z, block.AIR )
mc.setBlock( pos.x+int(tower_xs/2), pos.y+1, pos.z, block.AIR )

# 明かり
for dy in range(4):
    mc.setBlock( pos.x, pos.y+dy*12, pos.z+int(tower_zs/2), block.SEA_LANTERN )
    mc.setBlock( pos.x+tower_xs-1, pos.y+dy*12, pos.z+int(tower_zs/2), block.SEA_LANTERN )

# 螺旋階段
pos2 = Vec3.Vec3(pos.x + 1, pos.y, pos.z + 2)
# 4週分
for stair_loop in range(4):
    for zs in range(tower_zs-4):
        mc.setBlock( pos2.x, pos2.y, pos2.z, block.STAIRS_COBBLESTONE.id,2 )
        pos2.y += 1
        pos2.z += 1
    pos2.y -= 1
    mc.setBlock( pos2.x, pos2.y, pos2.z, block.STONE_BRICK.id )
    pos2.x += 1
    pos2.y += 1
    for xs in range(tower_xs-4):
        mc.setBlock( pos2.x, pos2.y, pos2.z, block.STAIRS_COBBLESTONE.id,0 )
        pos2.y += 1
        pos2.x += 1
    pos2.y -= 1
    mc.setBlock( pos2.x, pos2.y, pos2.z, block.STONE_BRICK.id )
    pos2.z -= 1
    pos2.y += 1
    for zs in range(tower_zs-4):
        mc.setBlock( pos2.x, pos2.y, pos2.z, block.STAIRS_COBBLESTONE.id,3 )
        pos2.y += 1
        pos2.z -= 1
    pos2.y -= 1
    mc.setBlock( pos2.x, pos2.y, pos2.z, block.STONE_BRICK.id )
    pos2.x -= 1
    pos2.y += 1
    for xs in range(tower_xs-4):
        mc.setBlock( pos2.x, pos2.y, pos2.z, block.STAIRS_COBBLESTONE.id,1 )
        pos2.y += 1
        pos2.x -= 1
    pos2.y -= 1
    mc.setBlock( pos2.x, pos2.y, pos2.z, block.STONE_BRICK.id )
    pos2.z += 1
    pos2.y += 1


# 最上階
for dx in range(tower_xs):
    for dz in range(tower_zs-2):
        mc.setBlock( pos.x+dx, pos.y+tower_ys-1, pos.z+dz+2, block.STONE_BRICK )
for dx in range(tower_xs):
    for dz in range(tower_zs):
        if dx == 0 or dz == 0 or dx == tower_xs-1 or dz == tower_zs-1:
            if (dx+dz)%2 == 0:
                mc.setBlock( pos.x+dx, pos.y+tower_ys, pos.z+dz, block.STONE_BRICK )

関連情報

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

0 件のコメント:

コメントを投稿