僕は発展途上技術者

Scratch で Minecraft を動かす(その2) - Scrath と Minecraft をつなげよう

Scratch で Minecraft を動かす方法を何回かに分けて解説していきます。

前回のエントリーは、

» Scratch で Minecraft を動かす(その1) - Raspberry Pi なしで Minecraft API を使ってプログラミング

です。

[2016/2/21 追記] 現在 CraftBukkit はメンテナンスされなくなっており、下記リンク先からはダウンロードはできないのですが、アーカイブなどを保存しているサイトが他にあります。あくまで自己責任でこれらからダウンロードして利用する方法を含め、他の手順についても詳しく次の YouTube 動画で紹介されていますので良かったら参考にしてください。 → 6歳からのプログラミング #1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice

scratch2minecraft をダウンロード



Scratch と Minecraft をつなぐブリッジプログラム scratch2minecraft を書いたので、それをダウンロードします。

作業フォルダ(~/python)以下で


git clone git@github.com:champierre/scratch2minecraft.git


と実行してソースコードをダウンロードしてください。

git が使えない方は https://github.com/champierre/scratch2minecraft の右下の Download ZIP ボタンを押してダウンロードできる scratch2minecraft-master.zip を解凍してください。

なお scratch2minecraft はまだ絶賛開発中です。いまのところマインクラフト内のプレイヤーを任意の位置に移動させるのと、任意の位置にブロックを作ったり消したりしかできないですが、順次できることを増やしていくつもりです。

minecraft api のフォルダ mcpi をコピーする



前回のエントリーで用意した mcpi フォルダを scratch2minecraft フォルダ以下にコピーします。

mcpi は ~/python/minecraft 以下にあると思うので、ターミナルより


cp -r ~/python/minecraft/mcpi ~/python/scratch2minecraft/


と実行することで、コピーできます。

Scratch から Minecraft へ Hello World



いよいよ Scratch と Minecraft とをつなげてみます。

起動していなかったら、CraftBukkit サーバーを起動し、Minecraft を CraftBukkit に接続します。(前回のエントリー参照)

Scratch を起動し、遠隔センサー接続を有効にします。



scratch2minecraft のフォルダに移動し、


python main.py


を実行して、 scratch2minecraft を起動します。

このとき、Scratra -> Connected と表示されれば Scratch との接続成功ですが、Scratch で遠隔センサー接続を有効にし忘れたり、あるいは Scratch を起動する前に scratch2minecraft の方を先に起動してしまったりすると接続に失敗して無反応となってしまいます。

その場合は Ctrl + Z で suspend させてから、


ps auwx | grep main.py


で main.py のプロセス番号を調べて、そのプロセス番号を kill してからやり直してください。

接続が成功していれば、Scratch から Minecraft にメッセージを送ることができます。

Scratch で「hi を送る」ブロックを作り、クリックしてみましょう。



Minecraft のチャットウィンドウに hi minecraft と表示されれば成功です。



Scratch からの命令でブロックを積み上げる



次に Scratch からの命令でブロックを一つ置いてみます。

「setBlock を送る」ブロックを作り、クリックしてみましょう。



すると、プレーヤーが立っていた場所にブロックが一つ置かれます。

今度は、塔の形になるようブロックを縦に積み上げてみましょう。

その前に Minecraft の世界の座標系について簡単に説明しておきます。Minecraft の世界では平面上の位置はx軸とz軸との座標で表され、高さはy軸の値で表されます。たとえば、x=0 y=0 z=0 の位置にブロックが置いてあったとして、そのすぐ上にブロックを置きたければ x=0 y=1 z=0 の位置にブロックを置きます。そのすぐ真上に置きたれば x=0 y=2 z=0 という具合です。

つまり、縦にブロックを積み上げたければ、y の値をどんどん大きくしていきながらブロックを置き続ければいいのです。

さきほど Scratch からブロックを置くときには、「setBlock を送る」をおこなっただけでしたが、その前に Scratch の変数の x、y、z に値をいれれば、指定された値の座標にブロックを置くことができます。

座標を指定しながらブロックを積み上げるとして、まずはプレーヤーが今いる場所の座標を知っておく必要があります。

「getPos を送る」とプレーヤーの現在位置の座標がチャットウィンドウに表示されます。





x=24 y=8 z=13 ということなので、その場所にブロック100個分の高さの塔をつくるには、以下の通り Scratch でプログラムを組みます。

ここで少し注意が必要なのですが、「setBlock を送る」の後に少しの時間待つようにしないとうまく命令を送ることができません。ここでは「0.1秒待つ」のブロックを置いています。



実行してみましょう。

一瞬のうちに塔が。。



あまりに高いので少し遠くから眺めます。



手作業で積み上げるよりもずっと楽です。

ここまでの一連の作業を動画で記録しました。



次のエントリーではもう少し複雑なプログラムを作ってみます。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ