Minecraft から SIM を操作できたらおもしろそうだった
この記事は、SORACOMのSoftware Design誌巻頭特集記念リレーブログ 5/12分の記事です。
今回は、Go と Scratch と仙台がとても大好きな砂金(いさご)が書かせていただきます。
記事の内容は、ソラコム小熊さんが仙台にいらっしゃるということで思いつきで作ったので、SIMの情報を表示する機能しか実装されておりません。
そもそもどんなものかというと、Minecraft から SIM を有効にしたり、無効にしたり、破棄したりできたらおもしろそうだなぁと思い、作り始めたものでした。
このアイディアのベースになっているのは、MinecraftからDocker コンテナを操作するツールの dockercraft です。
詳しくは紹介記事やREADMEがあるので、参考にしていただければと思います。
なお、前提条件として、ご使用になるOSでコンソール(コマンドラインなど)を使って、コマンドを実行してファイルを操作したり、情報を得たりする程度のスキルはあるものとします。
概要
使い方の前に作成したツールの概要から、名前をSlackraft(当初、SlackとDockerを組み合わせるツールとして作成していたため)といいます。
Docker上でCuberiteのサーバーが動作しており、CuberiteのプラグインからSORACOM APIプロキシ経由でSoracomプラットフォームの情報と連携しています。
Cuberite プラグインは、Mincraftが起動したときやステータスが変更されたときにSORACOM APIプロキシにステータス変更の情報を送り、SORACOM API を使ってSIMを操作します。
SORACOM API プロキシは、Dockerコンテナ内でローカルサーバーとして動作しており、データが送られるたびにSoracom API を使って、Soracomプラットフォームをやり取りします。
使い方
- Minecraftをインストールします
- Dockerをインストールします
- GitHubからslackraftのリポジトリを取得します
- Dockerコンテナを起動します
- MinecraftにMultiplayer用のサーバーを追加します
Minecraftのインストール
公式サイト からMinecraftを購入し、インストールしてください。
Dockerのインストール
公式サイトから使用するOSのDockerをダウンロードし、インストールしてください。 詳細なインストール手順は、Get Started with Docker for MacやGet Started with Docker for WIndowsなどを参考におねがいします。
Slackraftリポジトリの取得
Git インストール済みの場合
Git をインストール済みの場合は、以下のコマンドを順に実行することでリポジトリを取得することができます。
$ git clone https://github.com/135yshr/slackcraft.git $ cd slackraft $ git checkout -b sora1.1 refs/tags/sora1.1 $ docker build -t 135yshr/slackraft .
Git をインストールしていない場合
Git がインストールされていない場合は、ここからZIPファイルを取得して任意のディレクトリに展開してください。
- Slackraft の Githubにアクセスします
- Download ZIP ボタンをクリックして、リポジトリをダウンロードします
- ダウンロードしたZipファイルを任意のディレクトリに展開します
Docker コンテナの起動
以下のコマンドを実行して、Slackraft のコンテナを起動します。
SORACOM_EMAIL
とSORACOM_PASSWORD
には、SORACOM ユーザーコンソールで使用するメールアドレスとパスワードを設定してください。
$ docker run -t -i -d -p 25565:25565 \ -e SORACOM_EMAIL=xxxx@example.com \ -e SORACOM_PASSWORD=xxxxx \ 135yshr/slackraft
Multiplayer用サーバーの追加
いよいよ、MinecraftとSlackraftを連携させます。開始前の注意点としては、使用するMinecraft のバージョンを 1.8.x にすることです。1.9 以降のバージョンだとプロトコルが変更になっているため、Slackraft サーバーを見つけることができません。
Minecraftを起動し、Multiplayer を選択してください。
Add server を選択します
Server Address にdocker machine のIPアドレスを入力し、Doneを選択します
docker-machine ip default
で "default" という名前のdocker machine のIPアドレスを調べることができます3.で追加したMultiplayer サーバーを選択します
成功すると…
SIM の数だけ蔵(コンテナ)が表示されます
ただただSIMの情報を見るだけの機能のみなので、おもしろみにかけますが、実際にSIMを破棄できるところまでは、おいおい実装していこうと思います。(お手伝いいただける方がおりましたら、Twitterや、Githubを通してご連絡いただけるとうれしいです。)
他の方々のようにコアな情報は載せていないのですが、お楽しみいただけましたでしょうか? 全く別の宣伝になってしまいますが、今週の土曜日(2016年5月14日)に東北大学のカタールサイエンスキャンパスをお借りして、年に一度の Scratch 祭り Scratch Day 2016 in Sendai を開催します。近くの方がいらっしゃればぜひとも遊びにきてください。Scratch の体験会だけでなく、littleBits や 3Dプリンタ、LEGO MINDSTORMS で遊ぶブースも用意しておきます。
Scratchから〇〇をいじるような拡張機能がありまして...【パート3】
この記事は、Scratch Advent Calendar 2015 7日目の記事です。
6日目は、CoderDojo Sendai/Izumiで一緒にメンターをやっている@quintiaさんの記事でした。
3回目になる今回は、Scratchgoに入っている Example を使って、コンソール(コマンドプロンプト)からScratchにデータを送ってみようと思います。
Scratch 1.4 の準備
@jishihaさんの記事を参考に遠隔センサー接続を有効にするを設定してください。
Sampleの実行
以下のコマンドを実行してください。
Mac か Linuxの場合
cd $GOPATH/src/github.com/135yshr/scratchgo go run sample/main.go
Windowsの場合
cd %GOPATH%/src/github.com/135yshr/scratchgo/sample go run sample/main.go
Sampleの使い方
サンプルが起動すると > が画面に表示されます。
$ go run sample/main.go >
Scratch にデータを送る
">" の後に以下のコマンドを入力して、Enter キーを入力してください。
> send test 456
Scratch に送ったデータを表示する
- 「調べる」カテゴリをクリックします。
- [(スライダーセンサー)の値を調べる]ブロックで(スライダーセンサー)の横にある▼をクリックします
- 一番下にある "test" をクリックします
- [(スライダーセンサー)の値を調べる]ブロックができたので、左側のチェックボックスにチェックを入れます
値を確認する
ステージに "test"の値が表示されたでしょうか?
他にも 123 や abc などの値を入力して、testの値が変わるか試してみましょう。
> send test 123 > send test abc
他の値も作りたいときは?
test の代わりに好きな文字を入力してください。 [(test)センサーの値]の(test)に入力した項目が増えます。 ※英数字(a-z, A-Z, 0-9)を使うことができます。
> send new 123 > send scratch abc
Sample を終了する
quit と入力して、Enterキーを押すとSampleを終了することができます。
> quit
次回は、Scratchにメッセージを送る方法を書きたいと思います。
Scratchから〇〇をいじるような拡張機能がありまして...【パート2】
この記事は、Scratch Advent Calendar 2015 5日目の記事です。
前回は、ScratchにRemote Sensor Protocolという機能があることを書きました。 今回は、Remote Sensor Protocolを使って、実際にScratch 1.4 とやり取りするプログラムを作る準備をしたいと思います。
準備
これから始めるプログラムは、コンソールからScratchに対して、データを送信したり、Scrachにメッセージを送信するプログラムです。
Go言語のインストール
プログラムを作るには、Go言語というプログラミング言語を使います。 サイトからダウンロードして、インストールしてください。
なお、Windowsや、Mac、LinuxなどのOSによって、インストールの方法が違います。 もし、インストールがうまくいかないときは、ブログのコメントにやったことと、失敗することを書いてもらえれば、解決できるように善処します。
インストールの後に
GOPATHという環境変数を忘れずに設定してください。 GOPATHが正しく設定されていないと、この後の操作が上手くいきません。
Scratchgoのセットアップ
Scratchと接続するためのプログラムがGitHubに置いてあります。 Macの場合は、コンソール。Windowsの場合は、コマンドプロンプトを起動して、以下のコマンドを実行してください。
go get github.com/135yshr/scratchgo
セットアップの確認
次のコマンドを使ってフォルダがあるか確認します。
ls $GOPATH/src/github.com/135yshr/scratchgo LICENSE message.go scratch.go README.md message_test.go scratchub.go contributors.txt sample scratchub_test.go
WIndowsの場合
dir %GOPATH%\src\github.com\135yshr\scratchgo LICENSE message.go scratch.go README.md message_test.go scratchub.go contributors.txt sample scratchub_test.go
まだ、長くなるので今日はここまでにしようと思います。 ここまで上手くかなかった方は、お手数ですがコメントをもらえると嬉しいです。
明日、記事を書いてくださる方も募集中です。
scratchから〇〇をいじるような拡張機能がありまして
この記事は、Scratch Advent Calendar 2015 2日目の記事です。
Scratch 1.4には、Remote Sensor Protocol というものがあります。
TCPを使って、Scratchと外部センサーを接続できる仕組みなのですが、詳しくは、@jishihaさんのブログがとても詳しく説明されているので、お読みください。
また、Little Coder MieさんのサイトにScratchと接続できるガジェットの一覧がまとまっていますので、参考に購入を検討してみてはいかがでしょうか?
さて、今回の本題ですが、これから何回かに分けて、Remote Sensor Protocol を使ったプログラムを作ってみるのはどうでしょう?
これから何回かに(Advent Calendarの空きがある日に)分けて記事を書いていこうと思います。
プログラミング言語には、Go言語。Scratchとの連携には、接続用に作ったライブラリScratchgoを使います。 次回は、準備編として、Goを実行する環境とScratchgo
明日は、CoderDojo 西宮と梅田でご活躍されている@tkc49さんです。
CoderDojo Sendai/Izumi 忍者の作品紹介パート1
この記事は、Scratch Advent Calendar 2015 1日目の記事です。
以前は、Bloggerを使って記事を書いておりましたが、この度はてぶに移動してきました。
僕は、毎月ひっそりとCoderDojo Izumi (CoderDojo Sendaiは、なかなか時間の調整ができず、停滞しております。すみません。)を開催しております。
今日は、そんな中でCoderDojo Sendai の0回目から参加してくれているninjaが作った作品の中から、一番のお気に入りの作品を紹介しようと思います。
作品の名前は、RPG。初めて作ったのは、昨年の12月なのです。
見た目は、◯ラク◯I の戦闘シーンみたいになっています。
この作品、見た目とは裏はら?になかなかいい感じのゲーム設定になっておりまして、
何度繰り返しても5レベル程度の敵までしか倒すことができないです。
それではどうやって、もっと強い敵を倒していくのか?
敵を倒す度にG(お金)を落とすのですが、このGを使って強化することができます。
剣のマークをクリックすると攻撃力が上がり、敵に与えるダメージを減らすことができます。
盾のマークをクリックすると防御力が上がり、敵から受けるダメージを減らすことができます。
ダイヤモンドのマークをクリックするとMPの上限が増えます。なお、MPは、敵にフル回復します。
説明が付いていないので、ゲームの始め方が分かりにくくなっているのがマイナスポイントではありますが、コードを見るとどんなことをすればいいかわかるかと思います。
最後に作った本人にどこを頑張ったのか聞いたところ、敵から受けるダメージや、敵に与えるダメージのバランスをレベルに合わせて変更するところだそうです。
確かに頑張って設定している様子が伺えるコードになっているので、そういったところも見てもらえると幸いです。
これからも細々と地元宮城で CoderDojoを開催していきたいと思いますので、興味がある方はいつでもご参加ください。
参加の方法は、Facebookからメッセージを送るだけでOKです!
明日は、とりあえず決まっていないので、どなたか投稿者を募集です。