読者です 読者をやめる 読者になる 読者になる

Raspberry Π

Raspberry Piでいろんなことをやってみようというブログです。

mincraft

第4回 マインクラフト内にプログラムから某有名建造物を作ってみる

このラズパイ ✕ マイクラシリーズですが


今回で一旦、休止となります。
理由についてはこの記事の最後に記載します。


第3回ではプログラムから自動でブロックを置けるようにしました。
マイクラの本当の醍醐味は建造物ですので、今回は少し大きめの建造物を製作したいと思います。


f:id:taka230035:20161027233742j:plain:w300



建造物製作プログラム

前回までで、ブロックをいくつか置けるようになったので、今回はそれを応用するだけとなります。 前回第3回の記事については以下となります。

rasp0035.hatenablog.com


今回のファイル名は適切に
mine03.py
としました。
そしてプログラムについては以下となります。
※全角空白や記号を使っているのでコピーの際は気をつけてください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-# 文字コード
from mcpi import minecraft #①
from mcpi import block #②

def setBlock(): #建造物用関数
  pos = mc.player.getTilePos() #③

#④
  mc.setBlocks(pos.x + 5+30, pos.y + 1, pos.z + 5, pos.x - 5+30, pos.y + 1, pos.z - 5, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 6+30, pos.y + 2, pos.z + 6, pos.x - 6+30, pos.y + 2, pos.z - 6, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 5+30, pos.y + 3, pos.z + 5, pos.x - 5+30, pos.y + 3, pos.z - 5, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 4+30, pos.y + 4, pos.z + 4, pos.x - 4+30, pos.y + 4, pos.z - 4, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 3+30, pos.y + 5, pos.z + 3, pos.x - 3+30, pos.y + 5, pos.z - 3, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 2+30, pos.y + 6, pos.z + 2, pos.x - 2+30, pos.y + 6, pos.z - 2, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 1+30, pos.y + 7, pos.z + 1, pos.x - 1+30, pos.y + 7, pos.z - 1, block.LAPIS_LAZULI_BLOCK.id)
  mc.setBlocks(pos.x + 0+30, pos.y + 8, pos.z + 0, pos.x - 0+30, pos.y + 8, pos.z - 0, block.LAPIS_LAZULI_BLOCK.id)

#⑤
  mc.setBlocks(pos.x - 4+30, pos.y + 4, pos.z + 2, pos.x - 4+30, pos.y + 5, pos.z + 3, block.WOOL.id)
  mc.setBlocks(pos.x - 4+30, pos.y + 4, pos.z + 2, pos.x - 4+30, pos.y + 4, pos.z + 2, block.BRICK_BLOCK.id)

#⑥
  mc.setBlocks(pos.x - 4+30, pos.y + 4, pos.z - 2, pos.x - 4+30, pos.y + 5, pos.z - 3, block.WOOL.id)
  mc.setBlocks(pos.x - 4+30, pos.y + 4, pos.z - 2, pos.x - 4+30, pos.y + 4, pos.z - 2, block.BRICK_BLOCK.id)

#⑦
  mc.setBlocks(pos.x - 6+30, pos.y + 2, pos.z + 3, pos.x - 6+30, pos.y + 2, pos.z - 3, block.GLOWING_OBSIDIAN.id)


def main():# 初期設定
global mc
mc = minecraft.Minecraft.create() #⑧
mc.postToChat("call clearBlock()") #特に必要ありませんが、記載
setBlock()#建造物用関数に遷移

if __name__ == "__main__":# この辺はおまじない
main()





プログラムの実行

今回もマインクラフトは実行している状態として、
ラズパイのターミナルより

python mine03.py

と実行します。

そうすると、目の前に建造物が置かれます。
f:id:taka230035:20161027233958j:plain:w200
   ↓
f:id:taka230035:20161110234548j:plain:w200
簡略化されていますが、某有名RPGの代表的ザコモンスターとなります。
分かりますかね!?

場所を移動して、
python mine03.py
を再度実行すると、目の前に設置されます。
f:id:taka230035:20161110234617j:plain:w200
プログラムを実行するだけで、同じ建造物を瞬時に複数設置でき、
本家マインクラフトでは出来ない遊びが可能です!
本家だと同じ建造物でも1から製作するので、面倒と感じる時もあります。

最終的にこんな感じに。
f:id:taka230035:20161027234225j:plain:w200 f:id:taka230035:20161027234240j:plain:w200

上から見た図と正面のアップとなります。
f:id:taka230035:20161027234354j:plain:w200 f:id:taka230035:20161027234357j:plain:w200



解説

コードの解説をしたいと思います。
作成したmine03.pyのコードの
①については
minecraftプログラムを読み込むものとなります。

②については
minecraftブロックプログラム読み込みとなります。

③については
マインクラフト内のプレイヤーの位置を取得するプログラムです。

④移行の8行について、ここからが今回のメインですが、
建造物(キャラクター)のカラダの青い部分となります。四角錐のようなものを作ってみました。

⑤と⑥の2行ずつについて
キャラクターの目の部分となります。⑤で片方の目玉の黒と白い部分を作り、
⑥も同じく、もう片方の目を作っています。

⑦について
キャラクターの口の部分となります。

⑧については
ラズパイ上で実行しているマインクラフトを認識するプログラムです。


ブロックの種類と対応するid(block.LAPIS_LAZULI_BLOCK.id等のこと)が掲載されたサイトがなく、
自分で手当たり次第変えてみた結果、なんとかそれっぽく見えるブロックを選びました。


今回の建造物メモは以上となります。



これからについて

最初に述べましたが
このラズパイ ✕ マイクラシリーズは今回で休止としたいと思います。

理由についてですが、
第1回で書いたとおり、マイクラを楽しむにはHDMI出力モニタが必要となりますが、
自分が使っているモニタのHDMI切り替えの部分が故障してしまいました。
物理ボタンが効かなくなってしまいHDMIモードに切り替えられなくなりました。
理由はこれだけです。

色々試みたのですが、難しいようなので休止となります。
モニタを変える機会ありましたら、また再開したいと思います。


応援してくださった方々、本当にありがとうございます!!
あ、もちろん、ブログ自体はまだ続けます!!!

以上です。