Minecraft PI ED ブロックをダイヤに変える


アニメ『魔法使いの嫁』

登場する魔法使いというのは外見は馬か何かのガイコツっぽくて、嫁は人間の女子なので、美女と野獣的な設定なんだろうなあと見始めましたが、野獣だと思ってた魔法使いは、紳士で優しくて声もいい。最初っからこの女子、チセに好印象っぽいです。ガイコツなんだけど、かっこよく感じてしまいますね。これかあ、男は顔じゃないってやつは。

チセが魔法を使うシーンで水晶が大変なことになりましたが、マイクラPIでも水晶の代わりにダイヤを使って、周囲を結晶化(というかダイヤ鉱石なので石化です)したいと思います。要するにまたダイヤです。

スクリプトを段階的に作っていきます。
まずはプレイヤーを中心として円を描くスクリプトです。以前「Minecraft PI EDでプラネタリウム」でやってますので、そのスクリプトの改造になります。

pi@raspberrypi:~/mcpi/api/python/mcpi $ cat yome1.py
import minecraft
import time,math

mc = minecraft.Minecraft.create()
while 1:
  hits = mc.events.pollBlockHits()
  for h in hits:
    if h.face == 1:
      pos = mc.player.getPos()
      r=6
      d=60
      for i in range(0,d+1):
        rad= 2 * math.pi/d * i
        z = pos.z + round(r*math.sin(rad))
        x = pos.x + round(r*math.cos(rad))
        mc.setBlock(x, pos.y-1, z, 56,0)
  time.sleep(0.1)

ここで魔法を使いたいと思います。剣を持って地面を右クリック。

ダイヤの円が描かれました。一部上に土ブロックがあるところだけ欠けてます。

次にY座標にも幅を持たせます。プレイヤーの周囲にダイヤの柱が現れます。

pi@raspberrypi:~/mcpi/api/python/mcpi $ cat yome2.py
import minecraft
import time,math

mc = minecraft.Minecraft.create()
while 1:
  hits = mc.events.pollBlockHits()
  for h in hits:
    if h.face == 1:
      pos = mc.player.getPos()
      r=6
      d=60
      for i in range(0,d+1):
        rad = 2 * math.pi/d * i
        z = pos.z + round(r*math.sin(rad))
        x = pos.x + round(r*math.cos(rad))
        for yy in range(0,6):
          y = pos.y + yy - 2
          mc.setBlock(x, y, z, 56,0)

  time.sleep(0.1)

次は雪の上に描いてみましょう。

実行後。上から見ないとよくわかりませんね。

円の形に柱ができています。

いよいよ内側もダイヤで埋めていきます。
半径をfor文で繰り返せばよいです。

pi@raspberrypi:~/mcpi/api/python/mcpi $ cat yome3.py
import minecraft
import time,math

mc = minecraft.Minecraft.create()
while 1:
  hits = mc.events.pollBlockHits()
  for h in hits:
    if h.face == 1:
      pos = mc.player.getPos()
      for r in range(1,5):
        d=20
        for i in range(0,d+1):
          rad=2 * math.pi/d * i
          z=pos.z + round(r*math.sin(rad))
          x=pos.x + round(r*math.cos(rad))
          for yy in range(0,6):
            y = pos.y + yy -2
            mc.setBlock(x,y,z, 56,0)

  time.sleep(0.1)

また別のさらさらパウダー雪の上に円柱を出現させてみます。

中身の詰まったダイヤ円柱ができました。

最後に、ブロックが存在するかどうか(IDが0以外か)判定してから、ブロックが存在している座標だけダイヤですり替えます。

pi@raspberrypi:~/mcpi/api/python/mcpi $ cat yome4.py
import minecraft
import time,math

mc = minecraft.Minecraft.create()
while 1:
  hits = mc.events.pollBlockHits()
  for h in hits:
    if h.face == 1:
      pos = mc.player.getPos()
      for r in range(1,5):
        d=20
        for i in range(0,d+1):
          rad=2 * math.pi/d * i
          z=pos.z + round(r*math.sin(rad))
          x=pos.x + round(r*math.cos(rad))
          for yy in range(0,6):
            y = pos.y + yy -2
            id=mc.getBlock(x,y,z)
            if not id == 0:
              mc.setBlock(x,y,z, 56,0)

  time.sleep(0.1)

この木にかかるように石化の魔法をかけます。

木が半分だけダイヤ鉱石になってしまいました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA