135yshr’s blog

仙台でプログラマーとてご飯を食べながら、CoderDojoを開催しております。

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プラットフォームをやり取りします。

使い方

  1. Minecraftをインストールします
  2. Dockerをインストールします
  3. GitHubからslackraftのリポジトリを取得します
  4. Dockerコンテナを起動します
  5. MinecraftにMultiplayer用のサーバーを追加します

Minecraftのインストール

公式サイト からMinecraftを購入し、インストールしてください。

Dockerのインストール

公式サイトから使用するOSのDockerをダウンロードし、インストールしてください。 詳細なインストール手順は、Get Started with Docker for MacGet 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ファイルを取得して任意のディレクトリに展開してください。

  1. Slackraft の Githubにアクセスします
  2. Download ZIP ボタンをクリックして、リポジトリをダウンロードします
  3. ダウンロードしたZipファイルを任意のディレクトリに展開します

Docker コンテナの起動

以下のコマンドを実行して、Slackraft のコンテナを起動します。 SORACOM_EMAILSORACOM_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 サーバーを見つけることができません。

  1. Minecraftを起動し、Multiplayer を選択してください。 f:id:yshr135:20160511174800p:plain

  2. Add server を選択します f:id:yshr135:20160511175208p:plain

  3. Server Address にdocker machine のIPアドレスを入力し、Doneを選択します

    docker-machine ip defaultで "default" という名前のdocker machine のIPアドレスを調べることができます f:id:yshr135:20160511175315p:plain

  4. 3.で追加したMultiplayer サーバーを選択します f:id:yshr135:20160511175923p:plain

成功すると…

SIM の数だけ蔵(コンテナ)が表示されます f:id:yshr135:20160511184918p:plain

ただただSIMの情報を見るだけの機能のみなので、おもしろみにかけますが、実際にSIMを破棄できるところまでは、おいおい実装していこうと思います。(お手伝いいただける方がおりましたら、Twitterや、Githubを通してご連絡いただけるとうれしいです。)

他の方々のようにコアな情報は載せていないのですが、お楽しみいただけましたでしょうか? 全く別の宣伝になってしまいますが、今週の土曜日(2016年5月14日)に東北大学カタールサイエンスキャンパスをお借りして、年に一度の Scratch 祭り Scratch Day 2016 in Sendai を開催します。近くの方がいらっしゃればぜひとも遊びにきてください。Scratch の体験会だけでなく、littleBits や 3DプリンタLEGO MINDSTORMS で遊ぶブースも用意しておきます。

f:id:yshr135:20160511192251j:plain

Scratchから〇〇をいじるような拡張機能がありまして...【パート3】

この記事は、Scratch Advent Calendar 2015 7日目の記事です。

6日目は、CoderDojo Sendai/Izumiで一緒にメンターをやっている@quintiaさんの記事でした。

3回目になる今回は、Scratchgoに入っている Example を使って、コンソール(コマンドプロンプト)からScratchにデータを送ってみようと思います。

Scratch 1.4 の準備

@jishihaさんの記事を参考に遠隔センサー接続を有効にするを設定してください。

Sampleの実行

以下のコマンドを実行してください。

MacLinuxの場合

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 に送ったデータを表示する

  1. 「調べる」カテゴリをクリックします。
  2. [(スライダーセンサー)の値を調べる]ブロックで(スライダーセンサー)の横にある▼をクリックします
    f:id:yshr135:20151208000241p:plain
  3. 一番下にある "test" をクリックします
    f:id:yshr135:20151208000249p:plain
  4. [(スライダーセンサー)の値を調べる]ブロックができたので、左側のチェックボックスにチェックを入れます
    f:id:yshr135:20151208000256p:plain

値を確認する

ステージに "test"の値が表示されたでしょうか? f:id:yshr135:20151208000817p:plain

他にも 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や、MacLinuxなどのOSによって、インストールの方法が違います。 もし、インストールがうまくいかないときは、ブログのコメントにやったことと、失敗することを書いてもらえれば、解決できるように善処します。

インストールの後に

GOPATHという環境変数を忘れずに設定してください。 GOPATHが正しく設定されていないと、この後の操作が上手くいきません。

Scratchgoのセットアップ

Scratchと接続するためのプログラムがGitHubに置いてあります。 Macの場合は、コンソール。Windowsの場合は、コマンドプロンプトを起動して、以下のコマンドを実行してください。

go get github.com/135yshr/scratchgo

セットアップの確認

次のコマンドを使ってフォルダがあるか確認します。

MacLinuxの場合

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は、敵にフル回復します。

 

説明が付いていないので、ゲームの始め方が分かりにくくなっているのがマイナスポイントではありますが、コードを見るとどんなことをすればいいかわかるかと思います。

 

最後に作った本人にどこを頑張ったのか聞いたところ、敵から受けるダメージや、敵に与えるダメージのバランスをレベルに合わせて変更するところだそうです。

確かに頑張って設定している様子が伺えるコードになっているので、そういったところも見てもらえると幸いです。

 

scratch.mit.edu

 

これからも細々と地元宮城で CoderDojoを開催していきたいと思いますので、興味がある方はいつでもご参加ください。

 

参加の方法は、Facebookからメッセージを送るだけでOKです!

明日は、とりあえず決まっていないので、どなたか投稿者を募集です。