DesignSpark Electrical Logolinkedin
Menu 検索
フォーラムで質問

Raspberry PiでMinecraft! プログラミング基礎編

Raspberry PiでMinecraft!の続きとなります。

前回の記事では、Minecraftのセットアップを紹介しましたが、今回は「Minecraft Pi Edition」の特徴とも言えるプログラミングでの操作をご紹介します。使用できる言語はいくつかあるのですが、ここではやはりRaspberry Piの専用言語である"Python"を使用してみましょう。

Minecraftを起動した状態で以下のコマンドを入力してください。(ファイルの場所を変更している場合はご注意ください)
cd mcpi/api/python/mcpi
python

これでpythonの入力画面になります。まず初めに、Minecraftのライブラリをインポートしましょう。以下のコマンドを入力してください。
import minecraft

続いて、pythonとMinecraftを接続し、pythonからMinecraftを操作できるようにします。以下のコードを入力してください。
mc=minecraft.Minecraft.create()

これでpythonからMinecraftを操作できるようになりました。試しに"Hello World"を行ってみましょう。以下のコードを入力してください。
mc.postToChat("Hello Minecraft World!")

title

他のメッセージも当然表示させることができますので、色々試してみてください。

さて、Minecraftの本題とも言える"ブロック"を置く作業をpythonから実行してみましょう。まず、原点付近にワープしてください。以下のコードの()の中の数字を弄ることでどんな場所にもワープできます。
mc.player.setTilePos(0,0,0)

blockデータをimportし試しにひとつ置いてみます。
import block
mc.setBlock(0, 10, 0, block.STONE)

如何でしょうか?原点付近に石ブロックが現れたはずです。ブロック設置コマンドは、mc.setblock("X座標"、"Y座標"、"Z座標",block."ブロック名")  のように使用します。もし原点付近が山などの場合は、場所を移動し、画面左上に表示されている座標を参考にしながら()の中の座標を変更してください。ブロックの種類についてはこちらのwiki(英語)を参考にしてください。

正直一つ置くだけであれば普通に置いたほうがはやいです。pythonから操作する上での利点は複雑な構造体をプログラミングを書くことで簡単に作成できる点です。まずは横に並べてみましょう。
for x in xrange(0, 10):
 mc.setBlock(x, 10, 0, block.STONE)

いわゆる繰り返し構文と呼ばれるものです。繰り返し構文を使う際の注意として、インテンドの挿入を忘れないようにしてください。エラーがでます。xの値を0~10へ一つずつ増やしていき、そのたびにブロックを配置していくというものです。10個程度ならば手動のほうがはやいかもしれませんが、100個200個でも数値を変えるだけで簡単に配置することができます。

次は壁をつくってみましょう。以下のコードを入力してください。
for x in xrange(0, 10):
 for y in xrange(0, 10):
  mc.setBlock(x, y, 0, block.STONE)

単純に先ほどの横に並べるプログラムに縦の概念を加えただけです。2重ループと呼ばれるものです。簡単にどういった操作をするか説明すると以下のようになります。
xの値に0をセットする
yの値に0をセットする
0,0,0の座標に石ブロックを配置する
yの値に1を加え1をセットする
(0,1,0)の座標に石ブロックを配置する~~
(0,10,0)の座標ひ石ブロックを配置する
xの値に1を加え1をセットする
yの値に0をセットする
(1,0,0)に~

という具合にまず2行目のループを実行し、yの値が10になったらxの値に1を加え再び2行目のループを実行するという動作をxの値が10になるまで繰り返します。

続いてキューブを作成してみましょう。以下のコードを入力してください。
for x in xrange(0, 10):
 for y in xrange(0, 10):
  for z in xrange(0, 10):
 

title

もう説明しなくてもおわかりいただけるかと思います。壁作成プログラムにz座標の概念を追加しただけです。3重ループというやつですね。ここまで来ると手動でやるのは少しばかり手間がかかります。次に穴のあいたキューブを配置してみましょう。
for x in xrange(0, 10):
 for y in xrange(0, 10):
  for z in xrange(0, 10):
   if(x==0 or x==9 or y==0 or y==9 or z==0 or z==9):
    mc.setBlock(x, y, z, block.STONE)

if構文と呼ばれるものを使用しています。もしも、xの値が0か9、yの値が0か9、zの値が0か9の場合、ブロックを配置するというものです。

最後に球体を作成してみましょう。以下のコードを入力してください。
for x in range(-10, 10):
 for y in xrange(-10,10):
  for z in xrange(-10, 10):
   if(x**2 + y**2 + z**2 < 10**2):
    mc.setBlock(x,y,z,block.STONE)

title

ここまで理解できた方であれば、このプログラムも簡単に理解できるかと思います。xの2乗+yの2乗+zの2乗が10の2乗以下であればブロックを配置するというプログラムです。

以上です。今回ご紹介したコードを組み合わせたり変更することで、複雑な建造物を簡単に作成することができます。ぜひ色々と試し、もし面白いものが出来た場合は投稿していただければと思います。

Raspberry PiでMinecraft! プログラミング応用編

DesignSparkの日本語サイト公式アカウントです。DesignSparkシリーズのソフト、PCB Part library、技術記事などサイト上の全サービスの管理を行っています。

15 Dec 2014, 0:13