マインクラフトのMCPI関係を調べる

Minecraft Raspberry Pi Edition

Raspberry Piには、無料のマインクラフトのRespberry Pi Editionがプリインストールされていてすぐに遊ぶことができます。また、Pythonから操作もできます。

https://www.raspberrypi.org/learning/getting-started-with-minecraft-pi/worksheet/

http://www.stuffaboutcode.com/p/minecraft-api-reference.html

Raspberry Juice Mod

https://github.com/zhuowei/RaspberryJuice

PC版のマインクラフトで、Respberry Pi版と同じようにするには、サーバー(Bukkit)を立てる必要がありました。

Raspberry Jam Mod

サーバー構築などをせず、通常のマインクラフトで、WindowsやMacからPythonで操作できるようにしたのが、Raspberry Jam Modです。これは通常のModと同じでJarファイルを配置して、あとはPythonスクリプトでクライアントライブラリーが用意されているので、これを使ってコーディングするだけです。

mcpi

Pythonはスクリプト言語なので、Raspberry Jam Modについているクライアントライブラリーを見ると、mcpiディレクトリーにモジュール一式があり、ソースコードを含めていろいろなことが分かります。

ここのテキストファイルなどを見るとmcpi_protocolの存在が分かります。何かPythonに依存している実装ではなく、FTPやHTTPのように簡単なプロトコルが用意されていて、それでソケット通信を行っています。

使いたいプログラミング言語でこのライブラリーを実装すれば、マインクラフトと通信できます。

Raspberry Piの場合は、Java用ライブラリーもバンドルされているようです。

http://www.stuffaboutcode.com/2013/01/raspberry-pi-minecraft-api-basics.html

Github

Githubを見ると関係がありそうなレポジトリーがいくつか見つかったので、ここに情報を残しておきます。

https://github.com/brooksc/mcpipy

https://github.com/salimfadhley/dojo-minecraft/tree/master/mcpi/api/java

https://github.com/kbsriram/mcpiapi – マインクラフト1.7.10向けのRaspberry Jam Modと同様のライブラリーです。

https://github.com/bleroy/minecraft.client – Raspberry Jm ModのC#クライアントライブラリー

 

 

 

マインクラフトのDラッチの回路図を書く

マインクラフトは、リピーターをロックさせる仕組みで簡単にDフリップフロップ回路が作成できますが、今回はより理解を深めるため、マインクラフトの回路図から、実世界のDラッチの回路図を書いて確認します。

マインクラフトの回路の信号方向 でも書きましたが、以下のようなマインクラフトの回路図は、レッドストーントーチにより信号の方向性が生まれるので注意する必要があります。

上部がDラッチ

https://www26.atwiki.jp/minecraft/pages/26.html 引用

 

 

真理値表

C D Q ~Q
 0  0  0
 0  1  1
 1  0  保持
 1  1  保持

www.falstad.comで書いたDラッチの回路図

http://tinyurl.com/j46pcvm

Logisimで書いたDラッチの回路図

まとめ

真理値表通りに動くのでたぶんこの回路図であっていると思います。マインクラフトの回路図から、実世界で使われる回路図にしてみました。ポイントとしては、レッドストーントーチが指向性を持つので、その先のワイヤーが交差する箇所で、単純に分配しているのか、OR回路になって1つのワイヤーになるのかをしっかり確認することです。

 

 


マインクラフトの回路の信号方向

マインクラフトではレッドストーントーチとブロックを組み合わせてNOT回路が作成できます。またこのような回路の場合、信号の流れが特定方向に固定されます。

https://www26.atwiki.jp/minecraft/pages/1037.html

Aから~Q側へ信号が流れそうですが、黄色いブロックについているレッドストーントーチがあるため、Aから~Q側には流れません。回路図で書くと以下になります。

真理値表

A B Q ~Q
 0  0  1  0
 0  1  0  1
 1  0  1  0
 1  1  1  1

 

Dフリップフロップ回路を作成するときに、このような構造が出てきます。

 


マインクラフトでDラッチ

Dフリップフロップ回路はデータを保存できるので、複数並べるとレジスターになります。最新のマインクラフトではレッドストーン回路のリピーターで信号を止めることができるため、これで先ずはDラッチ回路を作ってみます。

 

2bitのレジスター

参考資料

https://www26.atwiki.jp/minecraft/pages/26.html#id_c8183ecb

 

Dラッチ回路

画像のようにリピーターを交差するような感じで配置します。

リピーターをこのように並べると、以下Gif画像のように信号が伝わらないように遮断棒がでてきます。

右上のリピーターに、棒が表示される

左側のリピーターのように棒が横たわると、リピーター上を信号が伝わらなくなります。

遮断棒が下りているので、スイッチを押しても信号が伝わらない。

もう一度、リピーターを見てみましょう。リピーターは、レッドストーントーチで出来ています。遮断機が下りて、左のスイッチからの信号が伝わらなくなります。ですが、リピーターのレッドストーントーチは、以前の状態を保持しているので、出力も以前の状態になります。現在のスイッチの変更は関係なくなります。これは遮断機が下りた時の状態を保持している事になります。

つまり、これを並べるとメモリーやレジスターになります。

リピーター上のレッドストーントーチが遮断機が下りても、前の状態を保持

黄色いブロックにレッドストーントーチを横につけてNOT回路を作っていますが、これは、クロックを表す側のリピーターがONになったときに、(=Highになったとき)に、状態を保持するためです。これをハイレベルエッジと言います。

マインクラフトではまだわかりませんが、現実世界のハードウェアでは、このレベルエッジを適宜切り替えて使っているそうです。

 

まとめ

マインクラフトでDラッチ回路を作成しました。次回はDフリップフロップ回路を作って、クロック入力の立ち上がり時のみ入力状態が反映され、それ以外では保持されるようにしてみます。

 

マインクラフトのレッドストーン回路でマルチプレクサー

今回は、マインクラフトで組み合わせ回路のマルチプレクサーを作りました。2bitの信号を切り替えるだけですが、マインクラフトでは単純に回路図をレッドストーン回路で実現すると、1つ1つのブロックが多いため最適化する必要があるのが分かりました。

logisimで作ったマルチプレクサーの回路図
マインクラフトでマルチプレクサーを実装

画面キャプチャーのように、2ビットの切り替えだけでも何も考えずにブロックを配置するとこの大きさです。マインクラフトは、レッドストーンは15個分の信号しか伝わらないため、大きくすればするほどリピーターで調整する必要があります。

16ビットのマルチプレクサーを作るとなると、ブロックの並べ方をしっかり学ばないといけないようです。

 

マインクラフトのレッドストーンでXOR回路

マインクラフトのレッドーストーンで排他的論理和のXOR回路を作成しました。

 

http://minecraft.gamepedia.com/File:StandardLogicGates.png

 

今回作成した排他的論理和XOR回路

マインクラフトでは、レッドストーンとブロックを繋げてさらにレッドストーントーチを置くことでNOT回路になります。そして高低差をうまく使うことで小さなサイズで、XOR回路を作る事が可能です。

一度Logisimで、回路図を書いてみました。レッドストーン回路はどこが接続されているのかわかりづらいですが、以下のような回路図にしてしまうと分かりやすいです。また、XOR回路の出力にNOT回路を付けるとXNOR回路になります。