MakeCodeプログラミングで自動で迷路を作るやり方
マイクラ:自動で迷路を作るやり方

クリエティブモード、世界のタイプはフラットでワールドを作る。

パソコンのキーボードのCキー(タブレットの場合はエイジェントアイコン)を押して、メイクコード(MakeCode)を立ち上げ、「読み込み」ボタンをクリックする。
注意)メイクコード(MakeCode)for minecraftは教育版マインクラフトでのみ利用が可能です(2023年8月時点での情報)。

「URLから読み込む」ボタンをクリックし、自動迷路作成のコードのURL(https://minecraft.makecode.com/_bKqc0HVdkPfp)をコピーしてペーストする。

自動迷路作成のメイクコード(MakeCode)プロジェクトが立ち上がったら、画面右下の実行ボタンをクリックする。

自動迷路作成用のコードが実行され、「迷路自動生成!」というタイトル文、「コマンドmazeMake -> 鉄シャベル -> リンゴ(リセットは鉄延べ棒)というサブタイトルが画面に表示される。

パソコンのTキーを押してチャットウィンドウが開いたら、MakeCodeで作ったコマンド「mazeMake」を入力して実行する。
注意)MakeCodeで作ったコマンドでは、コマンドの先頭に「/(スラッシュ)」は入力しないでください。「/(スラッシュ)」は、mainecaraftが提供されているコマンドを実行するときに必要です。
MakeCodeで作ったコマンド「mazeMake」を実行すると、迷路の土台が作成される。

鉄のシャベルを持って右クリック(タブレットの場合は長押し)すると、Agentが迷路を作る際のスタート地点にテレポートする。
りんごのシャベルを持って右クリック(タブレットの場合は長押し)すると、Agentが「穴掘り法」という迷路作成のアルゴリズムで迷路を自動作成する。

Agentが穴掘り法により迷路を自動作成するが、Agentがこれ以上迷路を作れない状態になったら、Agentを移動させたい場所に移動してから鉄のシャベルを右クリック(タブレットの場合は長押し)する。その場所にAgentがテレポートされるので、リンゴをを右クリック(タブレットの場合は長押し)して迷路を作成を再開させる。

STEP11を何度か繰り返すと迷路が完成する。

ケーキを持って右クリック(タブレットの場合は長押し)すれば、Agentが左手の法則というアルゴリズムに従い迷路を抜けるので、プレイヤーとどちらが早くゴールに到着するか競争するゲームも出来る。
メイクコード(MakeCode)のソース
- プログラムスタート後に実行される。
- 「迷路自動生成!」というタイトル文とサブタイトルを表示。
- 迷路の土台を生成する際に必要な変数「始点」と変数「終点」に、ワールド座標(10, -60, 10)とワールド座標(30, -59, 30)を代入する。
※迷路土台の縦横のブロック数はともに奇数個にする必要がある。穴掘り法では、奇数個にしないと迷路が作れないので注意。 - チャット欄で実行したコマンドのフィードバック(ログ)が画面に表示さなくなる。
- 迷路自動生成で必要となる、鉄のシャベル、鉄の延べ棒、りんごをプレイヤーに与える。
- プレイヤーをワールド座標(0, -60, 0)にテレポートさせる。
※処理3で生成する迷路の土台の近くにプレイヤーもテレポートさせている。
- チャットコマンド「mazemake」を入力されると実行される。
マイクラのコマンドを入力するときは「/(スラッシュ)」をコマンドの最初に入力する必要があるが、メイクコード(MakeCode)で作ったコマンドを入力するときは「/(スラッシュ)」は必要ない。 - 初期設定で保存した変数「始点」のワールド座標から変数「終点」のワールド座標までをクォーツのブロックで設置。
- 鉄のシャベルを持って右クリックすると実行する。
- 迷路の土台の端から東南に1ブロックの地点(今回のプログラムでは11, -58, 11)にエージェントをテレポートさせる。
- エージェントの下のブロック2つを破壊し、地面と同じ高さに移動する。
注意)穴掘り法で迷路を作る際には、迷路の土台となるブロックの数は奇数個でなければならない。また、土台の端を1番目とカウントしたとき、迷路を作り始めるスタート地点は偶数番目にしなければ迷路を生成することが出来ない。
- リンゴを持って右クリックで実行する。
※以下の処理は穴掘り法のアルゴリズムをベースとしている。穴掘り法のアルゴリズムについては、「穴掘り法 アルゴリズム」でWeb検索すると多くの情報を参照することができる。 - 変数「作成終了」を0にリセットする。
- 変数「作成終了」が0の間、下記処理4~10を実行し続ける。
- リスト変数「チェックする向き」に「-1」「0」「1」をランダムに並び替えて代入する。
※後に説明する関数「リストをランダム化」により、リストの値をランダムに並び替えている。 - 処理6~10を3回まで繰り返す。
- エージェントの向きを、前、左、右のいずれかにする。
※後に説明する関数「向きを変える」により、リスト変数「チェックする向き」に保存されている値を引数としてエージェントの向きを変える。もしも、リスト変数「チェックする向き」が「0」「-1」「1」の並びで保存されていれば、1回目のループではエージェントは向きを変えず、2回目のループでは左を向き、3回目のループでは右を向く。 - エージェントの2ブロック前にブロックがあるか確認するために1ブロック前に進む。
※エージェントは接している面のブロックしか存在確認できないので、後に説明する関数「2ブロック前確認」により、エージェントを1ブロック前に進ませる。 - 処理7により1歩前に進んだエージェントの前(つまり処理6の時点でのエージェントの2ブロック前)にクオーツのブロックがあれば、一旦1ブロック下がって処理6の時点での位置に戻ってから、2ブロック先までブロックを破壊して道を作る。道を作った後は、繰り返しループを抜ける。
- もしも、処理7により1歩前に進んだエージェントの前(つまり処理6の時点でのエージェントの2ブロック前)が空気ブロックなら、一旦1ブロック下がって処理6の時点での位置に戻ってから、エージェントの向きを処理6の時点の向きに戻す。
※ここ呼び出す「向きを変える」関数の引数は、処理6の時点で向きを変えたときの引数の符号を反転させている。関数「向きを変える」では引数が「-1」のときは左、「1」のときは右を向くので、符号を反転すれば処理6で左を向いた後は処理9により右を向いて元の向きに戻り、処理6で右を向いた後は処理9で左を向いて元の向きに戻るようになる。 - 2ブロック前が空気ブロックだったときに、ループカウンターの値が2であれば、左、前、右の2ブロック先がすべてが空気ブロックだったことになるので、変数「作成終了」の値を1にして、処理3の繰り返しを終了する。
- リストtempを初期化する。
- 引数として受け取ったリストlistの0から2番目のいずれかのインデックスの値を、リストtempの0番目に代入する。代入した値はリストlistから削除する。
- リストlistの0から1番目のいずれかのインデックスの値を、リストtempの1番目に代入する。代入した値はリストlistから削除する。
- リストlistの0番目の値を、リストtempの2番目に代入する。代入した値はリストlistから削除する。
- リストtempを返す。
- 引数として受け取った変数「向き」の値が1ならエージェントは左に向きを変える。
- 変数「向き」の値が-1ならエージェントは右に向きを変える。
- エージェントの1つ前にブロックがあるときは、そのブロックを破壊して1ブロック前に進み、「2ブロックチェック壊した」というフラグ用変数を1にする。
※エージェントの2ブロック先を確認するために、エージェントを1つ前に移動させる必要がある。ここでのブロック破壊は、2ブロック前をチェックするための破壊なので、破壊したブロックを元に戻す必要がある。後に説明する関数「戻る」において、「2ブロックチェック壊した」というフラグ用変数が1ならブロックを元に戻すことになる。 - もしも1ブロック前にブロックがなければ、1ブロック進む。
- 「2ブロックチェック壊した」というフラグ用変数が1のときは、2ブロック先の確認のために1つ前のブロックを削除しているので、1ブロック後ろに戻った後にブロックを置いてを元に戻す。
- 「2ブロックチェック壊した」というフラグ用変数が0のときは、1ブロック後ろに戻る。
- 「2ブロックチェック壊した」の値を0に戻す。
- 鉄の延べ棒(鉄のインゴット)を持って右クリックすると実行する。
- エージェントがプレイヤーの位置にてレポートして、左を向く。
※りんごを使った穴掘り法により、エージェントが穴を掘れない状態になった場合に、穴を掘れる場所にプレイヤーが移動して鉄の延べ棒を使いエージェントの場所を変える。エージェントの向きを変えたければ、同じ魔書で鉄の延べ棒を使い、エージャントを左に90度ずつ向きを変えることが出来る。穴掘り法を開始出来る場所にエージェントを移動できたら、りんごを使って穴掘り法を再開しよう。
- ケーキを持って、右クリックすると実行。
- エージェントとプレイヤーをワールド座標11, -60, 10にテレポートする。
- 「迷路ゲームスタート!」「エージェントより早くゴールせよ!」といタイトルを表示する。
- エージェントは左手の法則によりゴールの金ブロックまで移動する。エージェントはゴールの金ブロックまで1ブロック前に移動し続ける。その間、もしも左に道があれば(空気ブロックがあれば)、左に向きを変えて進む、目の前が壁なら(クオーツのブロックなら)右に向きを変えて進む。これが左手の法則である。
※ゴールの金ブロックは手動で設置。スタート地点としたワールド座標「11, -60, 10」からもっとも離れた場所に設置するとよい。
メイクコード(MakeCode)のソース:Python
Microsoftが提供する、無料のプログラミング学習用プラットフォーム。MakeCodeエディターでは、ブロックを使ったビジュアルコーディング、PythonとJavaScriptによるテキストコーディングが可能。アプリやソフトウェアをインストールする必要はなく、https://makecode.microbit.org/にアクセスするだけで利用できる。
コンピューターボードmicro:bitを使ったプログラミングや、ゲームプログラミングなどが出来る。教育版マインクラフト、または、統合版マインクラフトにCode Connection for Minecraftをインストールすれば、MaCodeエディターでプログラミングもできる。