2021年6月号 特設 マインクラフトでPythonレッスン9

ライブラリを使って迷路を生成する

レッスン8

 

●準備

このサンプルでは,mazelibライブラリを使用します.次のコマンドでインストールできます.

▲Python3の場合

$ sudo pip3 install mazelib

▲Python2の場合

$ sudo pip install mazelib

 

現在,Python3.7.3ではmazelibの依存するライブラリに問題があるようでエラーが出るようです.

Thonny Python IDE はPython3系で実行されているので,そのままでは以下のサンプルを実行できません.

Python2系のインタプリタを使えば実行できます.

以下のコマンドで,コマンドラインから実行してください.

$ python <Pythonソースコード・ファイル>

 

(mazelibをソースコードからビルドし直せば,Python3系でも実行できるようです.)

 

●Minecraftの画面

図1:フェンスで作った迷路

 

●ソースコード

#############################
# 迷路を生成
#############################
# mazelibライブラリの読み込み
from mazelib import Maze
from mazelib.generate.Prims import Prims

# 迷路の通路数(x軸、z軸)
w = 10
d = 10

# 迷路の生成
m = Maze()
m.generator = Prims(w, d)
m.generate()

# 迷路データをリストに変換
maze_list = list(str(m).replace(‘\n’,”))

#############################
# マインクラフトに迷路を作る
#############################
from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()

mc.player.setPos(-50, 10, -50)
Pos = mc.player.getTilePos()

mc.setBlocks(Pos.x – 200, 0, Pos.z – 200, Pos.x + 200, 100, Pos.z + 200, AIR)
mc.setBlocks(Pos.x – 200, -1, Pos.z – 200, Pos.x + 200, -1, Pos.z + 200, 98, 1)

# 変数に値を代入
num = 0 # 迷路の幅をカウント
d = 0 # 奥行きをカウント
cut_size = w * 2 + 1 # 迷路のサイズ

# ブロックで迷路を作る
for i in maze_list:
# 迷路の端のときに変数を更新
if (num % cut_size) == 0:
d = d + 1 # 奥行きのカウントアップ
num = 0 # 迷路の端なので0に初期化

# 要素が#のときにブロックを配置
if i == ‘#’:
# 壁を作る
mc.setBlock(Pos.x + num, 0, Pos.z + d, 85)

num = num + 1 # 値を加算し、次の要素へ