マイクラでCentOS7上のサーバーが見つからない時

それはファイアウォールが効いているのかもしれません。

設定確認は、

# firewall-cmd –list-all –zone=public

サーバーで設定したポートが含まれない場合、次のコマンドでポートを開けます。

# firewall-cmd –add-port=25565/tcp –zone=public –permanent

次のコマンドで設定を反映させます。

# firewall-cmd –reload

マイクラを再起動させると、見えた!

マイクラでプログラミング(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から実行するだけだ。