[Minecraft] マイクラで巨大迷路を作る

Minecraft

Minescript modを使って、マイクラで巨大迷路を作ります。
迷路のロジックさえ入手できれば、あとはマイクラでブロックを配置していくだけです。
サンプルのコードも載せていますので、コピペだけでも比較的簡単に作れると思います。

実際に巨大迷路を作ってプレイヤーを操作してみると、周りが壁だらけになっているために方向感覚が失われ、難易度が相当高くなります。

りお
りお

クリア不可能なくらい巨大な迷路も作れます。
途中で心が折れるレベルです。

巨大迷路を作る準備

まずは巨大迷路を作るための準備をします。

マイクラでMinescriptを使えるようにする

マイクラでMinescript modを使えるようにしましょう。
このmodは、マイクラ内でPythonスクリプトを実行するためのmodです。
使えるようにする方法は、こちらの記事にまとめていますので、参考にしてみてください。

迷路アルゴリズムを手に入れる

迷路を作るアルゴリズムはたくさん存在します。
ChatGPTに聞いてもいいですし、Webで検索してみてもいいですし、自分の好みのアルゴリズムを手にいれましょう。
この記事では、以前にまとめたこちらのアルゴリズムを利用しています。

Pythonスクリプト(maze.py)を準備する

こちらのコードをmaze.pyというファイル名で保存します。
このmaze.pyをMinescriptフォルダ(%appdata%\.minecraft\minescript フォルダ)に移動しておきます。

import minescript
import random

WIDTH, HEIGHT = 41, 41
maze = [[1] * WIDTH for _ in range(HEIGHT)]
sets = {(x, y): (x, y) for x in range(1, WIDTH, 2) for y in range(1, HEIGHT, 2)}

def find(cell):
    if sets[cell] != cell:
        sets[cell] = find(sets[cell])
    return sets[cell]

def union(cell1, cell2):
    root1, root2 = find(cell1), find(cell2)
    if root1 != root2:
        sets[root2] = root1
        return True
    return False

if __name__ == '__main__':
    (px, py, pz) = minescript.player_position()
    blockpacker = minescript.BlockPacker()

    for i in range(WIDTH):
        vx = int(px - WIDTH / 2 + i)
        for j in range(HEIGHT):
            vz = int(pz - HEIGHT / 2 + j)
            blockpacker.setblock((vx, int(py - 1), vz), "white_concrete")
    blockpacker.pack().write_world()

    edges = []
    for x in range(1, WIDTH, 2):
        for y in range(1, HEIGHT, 2):
            if x + 2 < WIDTH:
                edges.append(((x, y), (x + 2, y)))
            if y + 2 < HEIGHT:
                edges.append(((x, y), (x, y + 2)))
    random.shuffle(edges)
    for (x1, y1), (x2, y2) in edges:
        if union((x1, y1), (x2, y2)):
            maze[y1][x1] = 0
            maze[y2][x2] = 0
            maze[(y1 + y2) // 2][(x1 + x2) // 2] = 0

    for i in range(WIDTH):
        vx = int(px - WIDTH / 2 + i)
        for j in range(HEIGHT):
            vz = int(pz - HEIGHT / 2 + j)
            if maze[i][j]:
                blockpacker.setblock((vx, int(py), vz), "yellow_concrete")
                blockpacker.setblock((vx, int(py+1), vz), "yellow_concrete")
    blockpacker.pack().write_world()

WIDTHやHEIGHTの値を41から大きな値に変更することで、さらに巨大な迷路を作ることができます。
ただし、値は奇数にしてください。
アルゴリズムの解説についてはこちらの記事を参照ください。

床面は白色のコンクリートブロックで、壁は2ブロック分の黄色いコンクリートブロックで生成します。
ブロックも色々変えてみると面白いかもしれません。

巨大迷路を作る

準備ができましたので、マイクラのワールドにログインして「\maze」を実行します。

縦x横が40×40の巨大迷路が自動的に作成されます。
このアルゴリズムでは、どの場所からもすべての場所に行くことができます(空間が閉じてしまうことがない)ので、左上を入口にして、右下をゴール地点にしたり、中心をゴール地点にしたりすることができます。

さらに発展させて迷路ダンジョンも作れます。
こちらもサンプルコードを載せていますので試してみてもらえたらと思います。

まとめ

マイクラで巨大迷路を作ってみました。
今回は壁の高さを2ブロックとしていますが、実際にマイクラの世界で探索してみると、相当難易度が高いことが分かりました。
複数プレイヤーに挑戦してもらうのも楽しそうですね!

コメント

タイトルとURLをコピーしました