マインクラフトの広大な世界で、場所を正確に知るために「座標」は欠かせません。
例えば、冒険に出かけたときに家の座標を覚えておけば、遠くに行っても迷子になる心配はありません。座標を知っていれば、重要な場所へかんたんに行くことができます。
この記事では、Pythonというプログラミング言語を使って、自分の位置を確認したり、指定した場所にブロックを置いたりする方法を紹介します。
座標を使いこなして、もっと便利にマイクラの世界を楽しみましょう!
プログラミング初心者でも安心して進められるよう、ステップごとにていねいに説明します。
マインクラフトとPythonの連携について
マインクラフトをPythonで操作するには、特定の環境を整える必要があります。
くわしいセットアップ方法は、前回の記事で説明していますので、まだ準備ができていない方はそちらをチェックしてみてください。
マイクラでは座標を使って場所を指定する
まず、座標の基本的な仕組みを解説します。
座標とは、ある位置を特定するための数字の組み合わせです。
マイクラではx,y,z、3つの座標軸があり、原点(xyzすべてが0の場所)からどれだけ離れているか表しています。
- x軸 … 東西の方向(東がプラス、西がマイナス)
- y軸 … 上下の方向(上がプラス、下がマイナス)
- z軸 … 南北の方向(南がプラス、北がマイナス)
座標を表示してみよう
今自分がいる座標を表示するプログラムを作ってみましょう。
import mcpi.minecraft as minecraft
mc = minecraft.Minecraft.create()
# プレイヤーの座標を取得し、変数x,y,zに代入
x, y, z = mc.player.getTilePos()
# 座標をチャット欄に表示
mc.postToChat(f"X: {x}, Y: {y}, Z: {z}")
mc.player.getTilePos()でプレイヤーの座標を取得し、mc.postToChat()でチャット欄に取得した座標の値を表示しています。
- mc.player.getTilePos():プレイヤーの座標(ブロック単位)を取得する。
- mc.postToChat():マイクラのチャット欄にメッセージを表示する。
また、「#」からその行の終わりまではコメントです。実行してもコメントは無視されるので、プログラムの動きには関係ありません。どのような処理をしているのかメモしておくと便利です。
上のプログラムを入力したら、「mcpipy」フォルダに保存しましょう。ファイル名は「position.py」にしました。
マイクラのワールドに入り、チャット欄に以下のコマンドを入力して実行しましょう。
実行した結果、今自分がいる座標が表示されます。
ブロックを置いてみよう
新しくファイルを作成し、以下のプログラムを入力しましょう。
import mcpi.minecraft as minecraft
mc = minecraft.Minecraft.create()
# 原点にダイヤブロック(ブロック番号:57)を置く
mc.setBlock(0, 0, 0, 57)
mc.setBlock(x, y, z, block_id)は、指定した場所にブロックを設置する命令です。
x, y, zの部分にブロックを設置する座標を指定します。具体的な数字でもいいですし、変数でもOKです。
block_idの部分には、設置するブロックの種類を指定します。各ブロックには番号が割り当てられていて、1は石、2は草ブロック、3は土などがあります。
ブロックの番号の一覧は、下のサイトなどで調べられます。
今回は原点(x=0,y=0,z=0)にダイヤブロック(ブロック番号57)を置くプログラムを作成しました。
プログラムができたらファイル名をつけて保存し、実行してみましょう。
あたりを見わたしてみると、ダイアブロックが置かれています。ここが原点です。
東西南北にブロックを置く
プレイヤーを中心に東西南北にブロックを置くプログラムをつくりましょう。
新しくファイルを作成し、以下のプログラムを入力します。
import mcpi.minecraft as minecraft
mc = minecraft.Minecraft.create()
# プレイヤーの座標を取得し、変数xyzに代入
x, y, z = mc.player.getPos()
# 南に青い羊毛(ブロック番号:35 データ番号:11)を置く
mc.setBlock(x, y + 3, z + 1, 35, 11)
# 北に赤い羊毛(ブロック番号:35 データ番号:14)を置く
mc.setBlock(x, y + 3, z - 1, 35, 14)
# 東に灰色の羊毛(ブロック番号:35 データ番号:7)を置く
mc.setBlock(x + 1, y + 3, z, 35, 7)
# 西に灰色の羊毛(ブロック番号:35 データ番号:7)を置く
mc.setBlock(x - 1, y + 3, z, 35, 7)
プレイヤーの座標を取得し 変数xyzに代入する
下はプレイヤーの座標を取得し、その値を変数に記憶させる命令です。
プレイヤーの座標を取得する
「mc.player.getPos()」は、座標を表示してみようで使った「mc.player.getTilePos()」と同じプレイヤーの座標を取得する命令ですが、ちがいがあります。
- mc.player.getTilePos();プレイヤーの座標(ブロック単位、整数)を取得する
- mc.player.getPos():プレイヤーの座標(小数点以下の値)を取得する
細かい位置を知りたいときは「mc.player.getPos()」を使って、ブロックの位置だけを知りたいときは「mc.player.getTilePos()」を使うなど使い分けてみましょう。
=(イコール)で変数に値を代入する
Pythonでは「=(イコール)」は「等しい」という意味ではなく、「右側の値を左側の変数に代入する」という意味です。
たとえば、「x = 10」と書いた場合、「xが10と等しい」という意味ではなく、「xという変数に10を入れる」という意味になります。
- x = 10 :xに10を入れる
- y = x :yにxの値を入れる
- z = y + 1:yの値に1足した結果をzに入れる
つまり、「x, y, z = mc.player.getPos()」では、mc.player.getPos()でプレイヤーの座標を取得し、それぞれ x にx座標、y にy座標、z にz座標が保存されます。
Scratchでいうところの
- 変数xをプレイヤーのx座標にする
- 変数yをプレイヤーのy座標にする
- 変数zをプレイヤーのz座標にする
と同じ意味です(Scratchにz座標はありませんが)。一行でまとめて代入できるなんて、Pythonはとても便利ですね!
この変数に保存した座標を基準に、ブロックを置いていきます。
南に青い羊毛を置く
下はさっき保存したプレイヤーの座標に石ブロックを置く命令です。
座標の指定に変数を使っています。
では、この座標の1ブロック南に青い羊毛を置いてみましょう。
z軸の値が増える方向が南なので、zは「z + 1」にします。
また、ブロックをプレイヤーの頭上に置くためにyは「y + 3」にしました。足元にブロックを置きたい場合は「y – 1」にするとよいでしょう。
羊毛のブロック番号は35。その後ろの11はデータ番号です。
データ番号で色や材質を細かく指定することができます。羊毛ブロックの場合、11は青色のデータ番号になります。
北に赤い羊毛を置く
次に、1ブロック北に赤い羊毛を置いてみましょう。
南の逆(z軸の値が減る方向)なので、zは「z – 1」にします。
赤い羊毛ブロックのデータ番号は14です。
東西に灰色の羊毛を置く
同じやり方で東と西にもブロックを置きましょう。
x軸の増える方向が東で、減る方向が西です。
灰色の羊毛ブロックのデータ番号は7です。
実行してみよう!
プログラムできたら「compass.py」とファイル名をつけて保存し、実行してみましょう。
上を見上げると、羊毛が十字に置かれているはずです。
上からみるとこんな感じです。
まとめ
今回の記事では、座標を使って自分の位置を確認したり、指定した場所にブロックを置いたりする方法を学びました。
プログラミングで座標を活用することで、大きな建物を正確に配置したり、複雑な作業を自動化できるようになります。
今回作ったプログラムを参考に、いろいろな場所にブロックを置いてみてくださいね!
最後に、今回使用した命令とPythonの構文をおさらいしておきましょう。
今回使用した命令
- mc.player.getTilePos():プレイヤーの座標(ブロック単位、整数)を取得する。
- mc.player.getPos():プレイヤーの座標(小数点以下の値)を取得する。
- mc.postToChat():マイクラのチャット欄にメッセージを表示する。
- mc.setBlock(x, y, z, block_id):指定した座標に任意の種類のブロックを設置する。
x, y, z:ブロックを置く位置の座標
block_id:設置するブロックの種類(ブロック番号とデータ番号)
Pythonの構文
- #:コメント。「#」からその行の終わりまで無視される。
- 変数名 = 式 :右側の値を左側の変数に代入する。