鉱石吸い出しの術

,,,
前回は地面スケスケの術を使って、主人公の足元の貴重な鉱石を見えるようにしました。今回はもっと簡単に鉱石が手に入るプログラムを作っていきます。鉱石吸い出しの術です。巨大なブタさんを動かした時に使ったMinecraftShapeを使います。コードはこんな感じです。 [python] import mcpi.minecraft as minecraft import mcpi.minecraftstuff as stuff import mcpi.block as block from mcpi.vec3 import Vec3 mc = minecraft.Minecraft() pos = mc.player.getTilePos() def vacuumeMetal(start, dist, target): metalBlocks = [] for y in range(0, dist.y): for x in range(0, dist.x): for z in range(0, dist.z): blk = mc.getBlock(start.x + x, start.y + y, start.z + z) if blk in target: metalBlocks.append(stuff.ShapeBlock(x, y, z, blk)) mc.setBlock(start.x + x, start.y + y, start.z + z, block.AIR) metalShape = stuff.MinecraftShape(mc, pos + Vec3(-dist.x/2, 0, -dist.z/2), metalBlocks) target = [ block.IRON_ORE.id, block.GOLD_ORE.id, block.DIAMOND_ORE.id, block.REDSTONE_ORE.id, block.EMERALD_ORE.id, block.LAPIS_LAZULI_ORE.id] vacuumeMetal(pos + Vec3(-10, -64, -10), Vec3(20, 64, 20), target) [/python] 早速実行してみますが、その前にスケスケの術を使ってどこに鉱石があるのか確認してみます。 見えますね。かなりの量の鉄があることが分かります。では、今回の吸い出しの術を実行してみます。 どうでしょう。鉱石がきれいサッパリと無くなっているのが分かります。では鉱石はどこにいってしまったのでしょうか。主人公の頭上を見てみると、 おぉー!たくさんの鉱石が!それにダイヤもあったんですね。これらの鉱石はもう堀り放題です。

地面スケスケの術

,,,
前回は金属探知機ということで、主人公の足元に鉱石があるかをチャットするプログラムを作りました。今回は、もっと簡単に鉱石を発見できるプログラムを作ってみます。その名も地面スケスケの術。一言でいうと、地面の土や石ブロックを一瞬でガラスに変えてしまいます。 [python] import mcpi.minecraft as minecraft import mcpi.block as block import time from mcpi.vec3 import Vec3 mc = minecraft.Minecraft() def makeDirt2Glass(start, dist): for y in range(0, dist.y): for x in range(0, dist.x): for z in range(0, dist.z): blk = mc.getBlock(start.x + x, start.y + y, start.z + z) if blk in [block.GRASS.id, block.DIRT.id, block.STONE.id, block.GRAVEL.id]: mc.setBlock(start.x + x, start.y + y, start.z + z, block.GLASS) pos = mc.player.getTilePos() makeDirt2Glass(pos + Vec3(-10, -64, -10), Vec3(20, 64, 20)) [/python] 実行してみると、こんな感じになります。 ガラスを壊して進んでいきます。今回はなんと廃坑も発見できました。鉱石探し以外にも効率がアップできそうです。 深いところに進むと鉱石の種類が増えてきます。見渡すだけでも
  • 石炭
  • レッドストーン
  • エメラルド
  • ダイヤモンド
が見つけられます。 ここまででも十分にゲームバランスがおかしいですが、次回はさらに効率化してみます。

なんでも金属探知機

,,,
マインクラフトのサバイバルモードでは、素材集めが大切です。特に鉄や金、ダイヤなどの貴重なブロックはとても重要です。でも数が少ないので探すのが大変。ということで、今回は、プログラミングの力で、あっという間に貴重なブロックを探せるようにしてみます。 [python] import mcpi.minecraft as minecraft import mcpi.block as block import time from mcpi.vec3 import Vec3 mc = minecraft.Minecraft() def scanIron(depth): for y in range(0, depth): pos = mc.player.getTilePos() blk = mc.getBlock(pos.x, pos.y - y, pos.z) if blk == block.IRON_ORE.id: mc.postToChat("Iron! y=" + str(-y)) while True: scanIron(64) time.sleep(1) [/python] 主人公の足元のブロックを深さ128まで、鉄鉱石のブロックIDがあるか探して、見つかったらチャットするというプログラムを書きました。それをwhile True:で繰り返し続けています。while True:の無限ループから抜けてプログラムを終了するにはctrlキーとcキーを一緒に押してください。さて実行しながら歩いてみましょうか。見つかるでしょうか。 おおっ!?あります。今足元に鉄鉱石があるはずです。 主人公からの深さチャットしているので、掘り進むと数字が小さくなります。 そして、ついに・・・ 出たー!! 続けて、プログラムをちょっと改良して、鉄鉱石以外にも、金鉱石、ダイヤモンド鉱石にも反応するようにしてみました。 [python] def scanTarget(depth, target): for y in range(0, depth): pos = mc.player.getTilePos() blk = mc.getBlock(pos.x, pos.y - y, pos.z) if blk in target: mc.postToChat(target[blk] + "! " + str(-y)) while True: scanTarget(128, target) time.sleep(1) [/python] さてどうでしょうか。 こんなに簡単にダイヤモンドを見つけることができてしまいます。 普通のマインクラフトのサバイバルでは、ダイヤモンドを探すのにブランチマイニングなどをして、ずーっと石を掘り続けないといけないですが、こんな簡単に見つけることができます。次回はもっと簡単に貴重なブロックを「見える」ようにしてみます。