【作り方解説】教育版マイクラのメイクコード(MakeCode)で「リアル倉庫番ゲーム」作ってみた!

教育版マイクラのメイクコード(MakeCode)で「リアル倉庫番ゲーム」を作ってみました。
メイクコード(MakeCode)を使うと、コマンドブロックを使った場合よりも簡単にやりたいことを実現できるケースもあります。Pythonのコードについても本ページに記載しました。

MakeCodeプログラミングで「倉庫番ゲーム」を作るやり方

メイクコード(MakeCode)のソース

マイクラ:倉庫番ゲームのやり方

STEP.1
クリエイティブモード

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

STEP.2
メイクコードを立上げ

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

STEP.3
「読み込む」ボタン押下

メイクコード(MakeCode)のホーム画面が立ち上がったら、右上の「読み込む」ボタンをクリックする。

STEP.4
「URLから読み込む」ボタン押下

URLから読み込む」ボタンをクリックする。

STEP.5
URLを貼付け

倉庫番ゲーム用のコードのURL(https://minecraft.makecode.com/_bKqc0HVdkPfp)をコピーしてペーストする。

STEP.6
MakeCodeプロジェクトが開く

倉庫番ゲームのメイクコード(MakeCode)プロジェクトが立ち上がる。

STEP.7
実行ボタンを押下


メイクコード(MakeCode)プロジェクトの右下にある実行ボタンをクリックする。

STEP.8
ゲームクリア用のブロックとアイテム

「倉庫番ゲーム」というタイトル文がワールドに表示され、ゲームクリア時に花火を打ち上げるためのディスペンサー(発射装置)とクロック回路が生成される。また、ホットバーにゲームで使用する「骨」「りんご」、ゲームモードをクリエティブモードに変更する「鉄のスコップ」、「花火」のアイテムが装備される。

STEP.9
発射装置に花火を入れる


2つのディスペンサー(発射装置)に、花火を入れる。
※この処理だけは、手動でお願いします。

STEP.10
骨を使うとスタート

 

ホットバーに装備した「骨」を持ってから右クリック(タブレットの場合は長押し)すると倉庫番ゲームが開始される。

STEP.11
倉庫番ゲーム用ブロック

倉庫番ゲームの外枠、ゴール地点のダイヤモンドブロック、荷物であるガラスブロックが生成され、プレイヤーもスタート地点にスポーンされる。

STEP.12
りんごを使って荷物を動かす

1マス先に空間があれば、りんごを持って右クリック(タブレットの場合は長押し)すれば荷物であるガラスを動かす事ができる。

STEP.13
3D倉庫番ゲームを楽しむ

荷物である2つのガラスブロックを、ダイヤモンドブロックの上まで動かせばゲームクリア。
注意)結構難しいので、ゲームが詰んでしまったら、「骨」アイテムを持って右クリックしてゲームをリセットしてください。

STEP.14
3D倉庫番ゲームのクリア

倉庫番ゲームをクリアすると、STEP.8で説明したクロック回路に動力が加わり(レッドストーントーチが設置される)、花火が連射される。

STEP.15


ゲームクリア画面上から

プロジェクトを実行した後に実行されるコード

 

プログラムスタート後に実行されるコード
  1. 関数「ゴール花火の設置」を呼び出す。
  2. 関数「アイテムを与える」を呼び出す。
  3. プレイヤーをワールド座標(2, -60, -18)にテレポートさせる。
  4. プレイ画面に「倉庫番ゲーム」というタイトルと「ガラスを押して、ダイヤモンドの床まで動かしてね」というサブタイトルを表示する。
  5. 「1. ディスペンサーに花火を入れて」というサブタイトルを表示する。
  6. 「2. 骨を持って右クリックでスタート!」というサブタイトルを表示する。

関数「ゴール花火の設置」のコード
  1. ビルダーをワールド座標(6, -60, -19)にテレポートさせ、西向きにする。
  2. ビルダーの真下にレッドストーンを置き、1歩前に進んでから真下に減算モードのコンパレーターを置く。
  3. 右に1ブロック移動してから、真下に遅延2のリピーターを南向きに置く。
  4. 右に1ブロック移動してから、印をつける。
  5. 1ブロック前に進み、2ブロック左に移動し、1ブロック前に進む。
  6. 処理4で印を付けた場所から、処理5でビルダーが移動した軌跡にレッドストーンを置く。
  7. ディスペンサー(発射装置)を上向きにして、ワールド座標(1, -60, -19)と(2, -60, -19)に設置する。
    ※「dispenser 1」は上向きのディスペンサー(発射装置)となる。

関数「アイテムを与える」のコード
  1. プレイヤーにアイテム「花火」を256個与える。
  2. プレイヤーにアイテム「骨」を与える。
  3. プレイヤーにアイテム「りんご」を与える。
  4. プレイヤーにアイテム「鉄のシャベル」を与える。

アイテム「骨」を使ったときに実行されるコード

ゲームリセット用のコード
  1. アイテム「骨」を持って右クリックしたとき、
  2. 関数「初期化」を呼び出す。
    ※アイテム「骨」を持って右クリックすれば、ゲームを開始、再開出来るようにした。

関数「初期化」のコード
  1. プレイヤーをワールド座標(6, -60, -12)にテレポートさせる。
  2. 関数「ガラスとたいまつをリセット」を呼び出す。
  3. 関数「外枠レンガの設置」を呼び出す。
  4. 関数「ガラスとゴールの設置」を呼び出す。
  5. プレイ画面に「スタート」というタイトルと「3. りんごを持って右クリックでガラスを押す!」というサブタイトルを表示する。
  6. プレイヤー自身のゲームモードを「アドベンチャー」モードにする。
    ※本関数「初期化」を実行すると、ゲームを開始、再開出来る。

関数「ガラスとたいまつリセット」のコード
  1. 倉庫内のガラスブロックだけを空気ブロックに変える。
    ※一旦、倉庫内のガラスブロックを消すイメージ。
  2. ゴールすると花火の入った発射装置に動力が加わる場所にレッドストーントーチが置かれるので、その場所を空気に置き換えて、花火をストップする。
    ※ゲームクリア後に、もう一度ゲームを再開したいときなどに必要となる処理。

関数「外枠レンガの設置」のコード
  1. ワールド座標(6, -60, -12)にてレポートしたプレイヤーから東に1ブロックの位置に、北向きにしてビルダーをテレポートさせる。
  2. ビルダーは、処理1の位置で印をつける。
  3. ビルダーは前に2マス進み、左に1ブロック移動して前に1ブロック進む処理を3回繰り返し、左に4ブロック移動し後ろに3ブロック移動し、右に1ブロック移動して後ろに1ブロック移動する処理を3回繰り返し、右に4ブロック移動する。
  4. 処理2で印を付けた場所から、処理3でビルダーが移動した軌跡に2 ブロックの高さのレンガの壁を設置する。
    ※本関数「外枠レンガの設置」を実行すると、倉庫番ゲームの外枠のレンガが生成される。

関数「ガラスとゴールの設置」のコード
  1. ワールド座標(4, -60, -13)から(5, -59, -13)にガラスブロックを設置する。
    ※本処理で設置する4つのガラスブロックを荷物として、処理2で設置するダイヤモンドの床まで移動させるゲームが倉庫番である。
  2. ワールド座標(1, -61, -16)と(2, -61, -1)にダイヤモンドブロックを設置する。
    ※本処理で設置するダイヤモンドの床が、荷物を移動させるべきゴール地点である。

アイテム「りんご」を使ったときに実行されるコード

倉庫番ゲーム用のコード
  1. アイテム「リンゴ」も持って右クリックしたとき、
  2. 関数「ガラスを動かす」を呼び出す。
  3. 関数「ゴール判定」を呼び出す。
    ※アイテム「リンゴ」も持って右クリックすると、荷物であるガラスを動かしたり(動かせない場合もある)、ゴール判定が実施されたりする。

 

関数「ガラスを動かす」のコード
  1. プレイヤーの1つ前がガラスブロックで、2つ前が空気ブロックだったときに、
  2. 目の前のガラスブロック(2段分)を2つ前に移動させる。
    ※リンゴを使ったときに、ガラスブロックの2ブロック先にスペースが有れば、ガラスを前に押すことが出来る。

関数「ゴール判定」のコード
  1. 2箇所の地点(下がダイヤモンドブロック:ワールド座標(1, -60, -16)と(2, -60, -1))にガラスブロックがあったら、
  2. 発射装置が連続で花火を発射する動力起動部分にレッドストーントーチを置く。
    ※ゴール地点にガラスブロックを移動できれば花火が打ち上がる。

アイテム「鉄のシャベル」を使ったときに実行されるコード

クリエイティブモードにするコード
  1. アイテム「鉄のシャベル」を持って右クリックしたとき、
  2. 自分自身のゲームモードを「クリエイティブ」モードに変える。
    ※アイテム「骨」を持って右クリックすると、ゲームモードが「アドベンチャー」モードに変わる。何らかの理由により、ゲームモードを「クリエイティブ」モードに変えたいときに、簡単にモードを変えられるようにした。
メイクコード(MakeCode)での座標について

 

:ワールド座標(絶対座標)

ワールドの原点(0, 0, 0)からの各方向への距離を表す。

 

:カメラ座標(プレイヤー座標)

メイクコード(MakeCode)にしかない座標表記。プレイヤーの足元を起点として、プレイヤーが向いている方向への相対距離を表す。ローカル座標と異なり、プレイヤーが下方向を見ていても、地面を示すことはない。

  • right ::プレイヤーの右側はプラス、左側はマイナス
  • above:プレイヤーの真上はプラス、真下はマイナス
  • in front:プレイヤーの向いている方向はプラス、後ろはマイナス

 

:相対座標

プレイヤーの足元を起点として、各方角への相対距離を表す。

  • x:東西方向、東はプラス、西はマイナス
  • y:上下方向、上はプラス、下はマイナス
  • z:南北方向、南はプラス、北はマイナス

 

:ローカル座標

プレイヤーの見ている方向への相対距離を表す。カメラ座標に似ているが、下方向を見ている場合は、地面の場所を示す。地面に対して水平方向を見ていれば、カメラ座標と同じ場所を示す(ただし、左右はカメラ座標とプラスとマイナスが逆)。

  • x:プレイヤーが見ている方向から左右、左はプラス、右はマイナス
  • y:プレイヤーが見ている方向から上下、上はプラス、下はマイナス
  • z:プレイヤーが見ている方向から前後、前はプラス、後はマイナス

メイクコード(MakeCode)のソース:Python

# 骨を使うと関数:初期化()が呼び出される。
def on_item_interacted_bone():
    初期化()
player.on_item_interacted(BONE, on_item_interacted_bone)
# リンゴを使うと関数:ガラスを動かす()、ゴール判定()が呼び出される。
def on_item_interacted_apple():
    ガラスを動かす()
    ゴール判定()
player.on_item_interacted(APPLE, on_item_interacted_apple)
def 初期化():
    # 倉庫内のガラスブロックを空気ブロックに変える。一旦、倉庫内のガラスブロックを消すイメージ。
    blocks.replace(AIR, GLASS, world(7, -60, -12), world(0, -59, -16))
    # ガラスブロックをスタート位置に置く
    blocks.fill(GLASS,
        world(4, -60, -13),
        world(5, -59, -13),
        FillOperation.REPLACE)
    # ゴールすると花火の入った発射装置が起動する場所にレッドストーントーチが置かれるので、その場所を空気に置き換えて、花火をストップする。
    # ゲームクリア後に、もう一度ゲームを再開したいときなどに必要となる処理。
    blocks.place(AIR, world(7, -60, -19))
    # プレイヤーがスタート地点に移動
    player.teleport(world(6, -60, -12))
    player.say(“スタート!”)
# 2箇所の地点(下がダイヤモンドブロック)にガラスブロックを移動させることが出来たら、発射装置が連続で花火を発射する動力起動部分にレッドストーントーチを置く。ゴールすると花火が打ち上がる。
def ゴール判定():
    if blocks.test_for_block(GLASS, world(1, -60, -16)) and blocks.test_for_block(GLASS, world(2, -60, -16)):
        blocks.place(REDSTONE_TORCH, world(7, -60, -19))
# 1つ前がガラスブロックで、2つ前が空気ブロックだったら、目の前のガラスブロック(2段分)を2つ前に移動させる。
# リンゴを使ったときに、ガラスブロックの先にスペースが有れば、ガラスを前に押すイメージ。
def ガラスを動かす():
    if blocks.test_for_block(GLASS, pos_camera(0, 0, 1)) and blocks.test_for_block(AIR, pos_camera(0, 0, 2)):
        blocks.clone(pos_camera(0, 0, 1),
            pos_camera(0, 1, 1),
            pos_camera(0, 0, 2),
            CloneMask.REPLACE,
            CloneMode.MOVE)
# ゲームモードをアドベンチャーモードにして、初期化()を呼び出す。
gameplay.set_game_mode(ADVENTURE, mobs.target(NEAREST_PLAYER))
初期化()
教育版マインクラフト(Minecraft: Education Edition)とは?

教育版マインクラフトは、教育のために特別に設計されたMinecraftのバージョンです。学生たちにクリエイティブな問題解決やコラボレーション、コミュニケーションのスキルを身につけさせることを目的としています。さらに、MakeCodeやPythonなどのプログラミングも学べることが特徴です。教師向けのツールや教材、教育コンテンツが追加されており、学習環境に適した機能が提供されています。

また、2021年6月より個人利用も可能になりました。