# ブロックを設置してみよう

前の章(チャットで遊んでみよう)


# 石のブロックを設置してみよう

mcpipyフォルダの中に、「block.py」というファイルを作りましょう。

既に同じ名前のファイルがあるなら、名前を変えても構いません。「block2.py」など、英数字を使って、最後の部分(「拡張子(かくちょうし)」といいます)が「.py」で終わっていれば大丈夫です。

まずは、pythonファイルでマインクラフトを使えるようにします。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

ブロックを設置するためには、まずプレイヤーの位置情報を手に入れます。

x, y, z = mc.player.getPos()

プレイヤーの位置のそばに、ブロックを置いてみましょう。

mc.setBlock(x + 1, y, z + 1, 1)

プログラムを実行すると、プレイヤーのそばに、石のブロックが作られます。

それでは、どのようにしてブロックが設置されていくのか、詳しく見ていきましょう。

# プレイヤーの位置と座標

将棋やチェスのコマの位置を、「縦2番め、横4番め」と表せるのと同じように、マインクラフトのプレイヤーや、ブロックなどの位置は、「座標(ざひょう)」という形で表されます。

マインクラフトで、「F3」キーを押すと、たくさんの情報が出てきますね。

その中で、このような表示があります。

プレイヤーの座標を見る

この、

XYZ: 452.000 / 4.00000 / -707.000

と書かれている部分が、プレイヤーの座標と呼ばれるものです。

座標とは、「どこにいるのか」を、誰からでもわかるように伝えるための数値や、その組み合わせのことを言います。

この場合は、

x座標(エックスざひょう)が452、y座標(ワイざひょう)が4、z座標(ゼットざひょう)が-707の場所に立っているよ

という意味になります。

下の図は、マインクラフトのx、y、z、それぞれの方向です。日ごろ、北方向・東方向という言葉を使うように、マインクラフトでは、方向をx方向、y方向、z方向の3つを使って表すことができます。

三次元のXYZ座標系

マインクラフトのワールドには、原点(げんてん)という、ワールドの中心地点があり、

  • x座標は原点からの東西の距離
  • z座標は原点からの南北の距離
  • y座標は原点からの高さ

を表します。

つまり、中心である 原点の座標は(0 / 0 / 0) となります。x、y、zの全てが0、ということです。

こうした座標は、 (0, 0, 0) という形で表すこともあります。

「x座標が452」というのは、「0の位置(中心)からx方向に452だけ進んだところにいる」、ということです。

「z方向に-707だけ進む」というのは、「z方向の逆方向に707だけ進む」と読み替えましょう。

つまり、「XYZ: 452.000 / 4.00000 / -707.000」というのは、

原点(ワールドの中心)から、

  • x方向に452だけ進み、
  • z方向の逆方向に707だけ進み、
  • 高さが4

の地点を表す座標ということになります。

また、

Block: 452 4 -707

というのは、プレイヤーが立っているブロックの座標です。 左から、それぞれx座標、y座標、z座標を表しています。

この例では、プレイヤーはブロックのちょうど真ん中に立っていますので、プレイヤーとブロックの座標は同じになります。

ブロックを設置するためには、設置する場所を、この座標を使って決めていきます。

Pythonであつかう座標について

「F3」キーで見ることのできる、つまりゲーム内での座標と、Pythonで調べたときに分かる座標は、実は少し意味が違います。

ゲーム内での座標が、ワールドの原点からの距離を表しているのに対して、Pythonで調べられる座標は、プレイヤーが最初にスポーンした地点のそばからの距離を表しています。

なので、Pythonで調べた座標と「F3」キーで確認した座標が合わないことが多いのですが、このテキストでは、紛らわしいので、両方とも同じものとして説明していきたいと思います。

# 好きな場所にブロックを設置しよう

先ほどのコードを見てみましょう。

x, y, z = mc.player.getPos()

mc.player.getPos()は、プレイヤーの座標を調べるメソッド(命令)です。

調べた結果は、左側の3つの変数に記録されます。

  • x座標の値は変数xに
  • y座標の値は変数yに
  • z座標の値は変数zに

それぞれ代入されます。

先ほどの例の場合は、

  • 変数xに452
  • 変数yに4
  • 変数zに-707

が入ります。

mc.setBlock(x + 1, y, z + 1, 1)

mc.setBlockメソッドは、実際にブロックを設置します。 ( )の中身は、,(コンマ)で区切られていて、全部で4つあります。 一つ一つ見ていきましょう。

# 1つ目: x + 1

最初の中身は、ブロックを設置する場所のx座標を決めます。

xは、ただの文字ではなく、先ほど調べたプレイヤーのx座標が入っているのでした。

x + 1というのは、プレイヤーの位置から、x方向に1だけ進んだ位置を表します。

先ほどの例の場合では、xの中身は数字の452でした。 つまり、x + 1の本当の値は、453になります。

# 2つ目: y

2番めの中身は、ブロックを設置する場所のy座標を決めます。

yには、プレイヤーのy座標が入っています。

ここでは、yに何も加えていないので、このまま、プレイヤーが立っている高さを表します。

先ほどの例の場合では、yの中身は4でしたね。

# 3つ目: z + 1

3番めの中身は、ブロックを設置する場所のz座標を決めます。

これまでと同じように、z座標には、プレイヤーのz座標が入っています。

x + 1のときと同じように、z + 1は、プレイヤーの位置から、z方向に1だけ進んだ位置を表します。

先ほどの例の場合では、zの中身は-707でした。 これは「z方向の逆方向に707だけ進んだ位置」だったので、z + 1は、「z方向の逆方向に706だけ進んだ位置」ということになります。

# 4つ目: 1

4つ目の中身は、設置するブロックの種類を表しています。

マインクラフトには様々なブロックがありますが、一種類ごとに番号が割り振られています。 今回は、「1番目」のブロックで、これは石のブロック(STONE)の番号です。

付録:ブロックの番号表

これら4つの値を、mc.setBlockメソッドの「引数(ひきすう)」といいます。

4つの引数を上手く調節して、好きな場所に好きなブロックを設置することができます。

# おわりに

Prosenseではマインクラフトを使ったプログラミングの個別指導もおこなっております。

マンツーマンでレッスンを受けながらマインクラフトでプログラミングを学びたい方はいますぐProsenseのLINE公式アカウントに登録ください。

ProsenseのLINE公式アカウントと友達になる


練習問題