カテゴリー: 未分類

  • マイクラでプログラミング(Scratch成功編)

    Scrach2.0とマイクラが連携できたので、1.4でも再挑戦してみる。

    結論から言うと、Python3系で挑戦していたため、色々とややこしい話になっていたようだ。でも今回は、そのややこしい問題を解決したので、説明しながら進めていこう。

    まず、次のページから1.4をインストール。

    https://scratch.mit.edu/scratch_1.4/

    インストールしたら起動して次からダウンロードしたサンプルプロジェクトをダウンロードして開いてみる。

    「遠隔センサーが有効になりました。」と表示されればScratch側の準備はOKでしょう。

    ただ、Windowsのファイヤウォールが何か聞いてくるかもしれません。

    続いてScratch2MCPIをインストールする。

    http://scratch2mcpi.github.io/

    ここではcurlという仕組みを使ってインストールする方法が書かれている。が、Windowsなので、今回は手動で入れていく。

    まずはscratch2mcpiのzipファイルをダウンロード。

    https://github.com/scratch2mcpi/scratch2mcpi/archive/master.zip

    解凍してできたscratch2mcpi-masterフォルダを、scratch2mcpiに改名。

    このフォルダ内に、色々入れていきますが、このフォルダ自体はどこにあってもOK。そして、フォルダには色々入っているが、必要なのscratch2mcpi.pyだけなので、その他は削除しちゃう。

    そして、Python3でも動くように、scratch2mcpi.pyに以下の変更を加える。

    print _”~” → print(“~”)

    次のフォルダをscratch2mcpiフォルダ内にコピー。

    D:\Users\[ユーザ名]\AppData\Roaming\.minecraft\mcpipy\mcpi

    次にMinecraft Graphics Turtleをインストール。

    次のzipファイルをダウンロード。

    https://github.com/scratch2mcpi/minecraft-turtle/archive/master.zip

    解凍してできたminecraft-turtle-masterフォルダを、mcturtleに改名。

    mcturtleフォルダを先ほどのscratch2mcpiフォルダ内にコピー。

    Python3に対応させるために、minecraftturtle.pyのprint文も同じく修正。

    次にMinecraft Stuffをインストール。

    次のzipファイルをダウンロード。

    https://github.com/scratch2mcpi/minecraft-stuff/archive/master.zip

    解凍してできたminecraft-stuff-masterフォルダを、mcstuffに改名。

    mcstuffフォルダを同じくscratch2mcpiフォルダ内にコピー。

    次のzipファイルをダウンロード。

    https://github.com/pilliq/scratchpy/archive/master.zip

    解凍してできたscratchpy-master/scratchフォルダ内のscratch.pyを、同じくscratch2mcpiフォルダ内にコピー。

    さて、このscratch.pyにも細工が必要。byte列とstring型の扱いがPython2とPython3で異なるため、考えながら修正。

    例外のエラー番号、文字列なども仕様が変わっている。

    で、最終的に次のファイルになった。

    scratch.py

    著作権的に良いのか?ダメなら連絡して下さい。

    では、Scratch1.4とMinecraftをscratch2mcpi.pyを使って連携してみましょう。

    コマンドプロンプトから、

    >scratch2mcpi.py
    Traceback (most recent call last):
    File “D:\scratch2mcpi\scratch2mcpi.py”, line 8, in <module>
    import mcturtle.minecraftturtle as turtle
    File “D:\scratch2mcpi\mcturtle\minecraftturtle.py”, line 5, in <module>
    import minecraft
    ModuleNotFoundError: No module named ‘minecraft’

    はい。エラーです。

    mcturtleパケージ内のminecraftturtle.pyから、同じフォルダ内のminecraft.pyが読み込めない。

    なぜだ?

    すんなり諦めて、minecraftturtle.pyのimport部分をmcpiフォルダ内のファイルを読み込むように変更。

    import mcpi.minecraft as minecraft
    import mcpi.block as block

    どうすればスマートになるのか?誰か教えてください。

    とにかく、再度コマンドプロンプトから、

    >scratch2mcpi.py
    =================
    Sratch2MCPI 2.0.1
    =================

    Connected to Scratch
    Received: (‘sensor-update’, {‘blockTypeId’: 1, ‘mcpiX’: 10, ‘mcpiY’: 40, ‘mcpiZ’: 10})

    起動していたMinecraftを見ると、何やらブロックが1つ置かれています。

    では、Scratch1.4でmcpi_sphere.sbを開いて、緑旗をクリック!

    コマンドプロンプトにずらずらと文字列が流れていきます。

    見た目は何も変わりません。でも何かが起きているはず。

    では、ちょっと上を見てみましょう。

    球が出来てきているはずです。

    連携が確認出来たことを喜びましょう。

    そして私は寝ます。

  • Hello World!な請求書

    某電力会社の請求書をホームページからPDFでダウンロードした。

    そしてEvernoteに保存。

    と、タイトルが「Hello world (PHP)!」となった。

    なぜ?

    調べてみると、PHPのサンプルコードそのままらしい。

    著者もサンプルのまま「Rainer Schaaf」となっている

    各電力会社の関係者の方。あなたの会社かもしれませんよ~。

  • マイクラでプログラミング(Scratch2.0編)後編

    Scratch2とPythonが接続できた

    後は、実際にScratchからMinecraftをいじってみる。

    では、サンプルからコピペしながら、Hello worldサンプルを作ってみよう。

    で、出来ましたのが以下のコードです。

    # coding=utf-8
    from __future__ import unicode_literals

    import time

    import mcpi.minecraft as minecraft
    import mcpi.block as block

    import server
    import sys

    from blockext import *
    class HelloMinecraft:

    def _problem(self):
    if time.time() % 8 > 4:
    return “The Scratch Sensor board is not connected. Minecraft.”

    def _on_reset(self):
    print(“””
    Reset! The red stop button has been clicked.
    “””)

    @command(“Say Hello %s”)
    def say_hello(self, text=”Minecraft”):
    mc.postToChat(“Hello %s!” % (text))
    playerPos = mc.player.getPos()
    mc.setBlock(playerPos.x,playerPos.y-1,playerPos.z,block.DIAMOND_ORE)
    extension = Extension(HelloMinecraft, descriptor)

    mc = minecraft.Minecraft()

    if __name__ == “__main__”:
    extension.run_forever(debug=True)

    上のコードをHelloMinecraft.pyとしてファイルで保存。

    マイクラで適当な世界を開いておいて、HelloMinecraft.pyを実行。

    Webブラウザでlocalhost:1234を開いて、Scratch Minecraft Test English.s2eをダウンロード。

    Scratch2.0を実行して、[Shift]キーを押しながらメニューの「File」を開いて、「Import Experimental Extension」を選択。
    今、ダウンロードしたs2eファイルを開く。

    「More Blocks」からブロックを追加して、ブロックにMinecraftと入力。

    そして、実行!

    マイクラの画面に、「Hello Minecraft!」と表示されて、足元にダイヤモンド鉱石ができているはず。

    さてさて、子供にプログラムに興味をもたせるための準備はできた。

    だが、ここまでやると、俺の熱が冷めてきた。。。そんなんじゃダメだ!

  • マイクラでプログラミング(Scratch2.0編)前編

    Windows上で、Pythonからマイクラの制御はできている前提。

    そして、Scratch2.0をインストールしておく。

    次のページから「Adobe AIR」と「Scratch Offline Editor」をインストール。

    https://scratch.mit.edu/scratch2download/

    Scratchのwikiで、Pythonに関するページを参照。

    blockextというPythonのライブラリを使えば、Scratch2.0のブロックを作って連携できるみたい。

    次のzipファイルをダウンロードして解凍。

    https://github.com/blockext/blockext/archive/master.zip

    blockext-masterフォルダにカレントディレクトリを移して、「setup.py install」と実行し、ライブラリをインストール。

    blockext-master>setup.py install

    エラーメッセージっぽい物が出なけりゃ大丈夫。

    でも、一応確かめる。「python」と入力して、Pythonのインタプリタを起動し、「import blockext」と入力。

    blockext-master>python
    Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
    Type “help”, “copyright”, “credits” or “license” for more information.
    >>> import blockext
    >>>

    何も表示されないってことは、大丈夫ってこと。

    「exit()」か[Ctrl]+[z]を入力してReturnキーで、終了。

    Use exit() or Ctrl-Z plus Return to exit
    >>> ^Z

    では、サンプルを使ってスクラッチ用の拡張ブロックを作ってみよう。

    解凍したblockext-masterフォルダ内のexample.pyを実行。

    blockext-master>example.py
    Listening on localhost:1234

    すると、localhost:1234と、ポートが開かれたとのメッセージが表示される。

    webブラウザから、localhost:1234を開く。

    リンクが2つ表示される。今回はScratch2用の拡張ファイルがほしいので、上側のリンクを開いて、「Scratch Fancy Spaceship English.s2e」をダウンロード。

    コマンドラインには、以下の様なログが表示されている。

    127.0.0.1 – – [07/Jun/2017 19:13:58] “GET / HTTP/1.1” 200 –
    127.0.0.1 – – [07/Jun/2017 19:14:15] “GET /_generate_blocks/scratch HTTP/1.1” 302 –
    127.0.0.1 – – [07/Jun/2017 19:14:15] “GET /_generate_blocks/scratch/en/Scratch%20Fancy%20Spaceship%20English.s2e HTTP/1.1” 200 –

    では、続いてScratch2.0を起動して、[Shift]キーを押しながらメニューの「File」を開いて、「Import Experimental Extension」を選択。
    今、ダウンロードしたs2eファイルを開く。

    「More Blocks」を選択すると、拡張ブロックが表示されているはず。

    だが、この画像では「Fancy Spaceship」の右に赤丸が表示されている。

    これはPythonのライブラリと接続されていないということ。

    何故か?それは、[Ctrl]+[c]キーでプログラムを停止してしまっていたから。

    プログラムは停止させないで、Scratch2で簡単なプログラムを作って実行してみる。

    変数fooに文字列「ABC」を入れて、5秒間Say!

    127.0.0.1 – – [07/Jun/2017 20:33:31] “GET /reset_all HTTP/1.1” 200 –
    127.0.0.1 – – [07/Jun/2017 20:33:31] “GET /set_foo/ABC HTTP/1.1” 200 –
    ABC
    127.0.0.1 – – [07/Jun/2017 20:33:36] “GET /say_for_secs/19/ABC/5 HTTP/1.1” 200 –

    よし。動いた。

    ここまで行けば、後はマイクラを制御するためのブロックを作ってScratchから実行するだけだ。

  • マイクラでプログラミング(Scratch失敗編)

    いきなりですが、次のページからAdobe AIRとScratchをインストール。

    と、書いてから作業を進めていったのですが、どうも最新の2.0ではMinecraftとの連携ができない。

    https://scratch.mit.edu/scratch2download/

    なので、次のページから1.4をインストール。

    https://scratch.mit.edu/scratch_1.4/

    ※と、書いてましたが、Scratch2.0でもマイクラと連携できるよ。

    インストールしたら起動して次からダウンロードしたサンプルプロジェクトをダウンロードして開いてみる。

    「遠隔センサーが有効になりました。」と表示されればScratch側の準備はOKでしょう。

    ただ、Windowsのファイヤウォールが何か聞いてくるかもしれません。

    続いてScratch2MCPIをインストールする。

    http://scratch2mcpi.github.io/

    ここではcurlという仕組みを使ってインストールする方法が書かれている。が、Windowsなので、今回は手動で入れていく。

    まずはscratch2mcpiのzipファイルをダウンロード。解凍してできたscratch2mcpi-masterフォルダを、scratch2mcpiに改名。

    https://github.com/scratch2mcpi/scratch2mcpi/archive/master.zip

    scratch2mcpiフォルダを次のmodsフォルダ内にコピー。

    D:\Users\[ユーザ名]\AppData\Roaming\.minecraft\mods

    次のフォルダをscratch2mcpiフォルダ内にコピー。

    D:\Users\[ユーザ名]\AppData\Roaming\.minecraft\mcpipy\mcpi

    次にMinecraft Graphics Turtleをインストール。

    次のzipファイルをダウンロード。解凍してできたminecraft-turtle-masterフォルダを、mcturtleに改名。

    https://github.com/scratch2mcpi/minecraft-turtle/archive/master.zip

    mcturtleフォルダを先ほどのscratch2mcpiフォルダ内にコピー。

    次にMinecraft Stuffをインストール。

    次のzipファイルをダウンロード。解凍してできたminecraft-stuff-masterフォルダを、mcstuffに改名。

    https://github.com/scratch2mcpi/minecraft-stuff/archive/master.zip

    mcstuffフォルダを同じくscratch2mcpiフォルダ内にコピー。

    次のzipファイルをダウンロード。解凍してできたscratchpy-masterフォルダを、scratchpyに改名。

    https://github.com/pilliq/scratchpy/archive/master.zip

    scratchpy/scratchフォルダ内のscratch.pyを、同じくscratch2mcpiフォルダ内にコピー。

    と書きながら試したが、最終的に動かず。諦める。