2020年11月30日月曜日

Ubuntu20.04で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の場合は、以下のコードを保存後、緑色の再生ボタンをクリックして実行してください。終了するときはCtrl+Cを押してください。
import mcpi.minecraft as minecraft
import mcpi.block as block
import time

patterns = [
    [
        [   7,   7, 169, 169, 169, 169,   7,   7],
        [   7, 169,   7,   7,   7,   7, 169,   7],
        [ 169,   7,   7,   7,   7,   7,   7, 169],
        [ 169,   7,   7,   7,   7,   7,   7, 169],
        [ 169,   7,   7,   7,   7,   7,   7, 169],
        [ 169,   7,   7,   7,   7,   7,   7, 169],
        [   7, 169,   7,   7,   7,   7, 169,   7],
        [   7,   7, 169, 169, 169, 169,   7,   7]
    ],
    [
        [ 169,   7,   7,   7,   7,   7,   7, 169],
        [   7, 169,   7,   7,   7,   7, 169,   7],
        [   7,   7, 169,   7,   7, 169,   7,   7],
        [   7,   7,   7, 169, 169,   7,   7,   7],
        [   7,   7,   7, 169, 169,   7,   7,   7],
        [   7,   7, 169,   7,   7, 169,   7,   7],
        [   7, 169,   7,   7,   7,   7, 169,   7],
        [ 169,   7,   7,   7,   7,   7,   7, 169]
    ]
]

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

# 指定されたパターンを交互に表示
try:
    while True:
        for frame in range(len(patterns)):
            for row in range(len(patterns[frame])):
                for column in range(len(patterns[frame][row])):
                    mc.setBlock( pos.x+column, pos.y+row, pos.z, patterns[frame][row][column])
            time.sleep(3)
except KeyboardInterrupt:
    # クリーンアップ
    for row in range(len(patterns[0])):
        for column in range(len(patterns[frame][row])):
            mc.setBlock( pos.x+column, pos.y+row, pos.z, block.AIR)

関連情報

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

0 件のコメント:

コメントを投稿