Anaconda3 はどこ?ここ?

Anaconda3(ディストリビューション)が入っていなかったのでPython3 のインストールやり直し。
シンボリックリンクを削除。

# rm /usr/local/python/bin/python3
# rm /usr/local/python/bin/pip3.7

パスを削除。

# vi ~/.bash_profile

↓ 行を削除
export PATH=$PATH:/usr/local/python/bin

インストールディレクトリを削除。

# rm -fr /usr/local/python/

https://www.anaconda.com/download からAnaconda 2018.12 for Linux Installer をダウンロード。

インストール方法は、Anaconda で Python 環境をインストールする Qiita – @t2y をご参考下さい。

今回は、/home/gusachan/anaconda3/ にインストールしました。パスを通して

$ export PATH=/home/gusachan/anaconda3/bin:$PATH

バージョン確認。

追記)永続的にパスを通すには、.bash_profile に以下の記述で保存。

# vi ~/.bash_profile

↓ 追記
export PATH=/home/gusachan/anaconda3/bin:$PATH

Python3 をソースからビルド

LinuxにPython3系をインストールする手順 を参考にPython3 をソースからビルド。

まず、yum から必要なパッケージをインストール。

# yum install make gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

Python3.7.2 をwget でダウンロード、保存。

# cd /usr/local/src
# wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

圧縮ファイルを解凍、make && make install

# tar xvzf Python-3.7.2.tgz
# cd Python-3.7.2
# ./configure --prefix=/usr/local/python
# make && make install

ここでlibffi モジュールが見つかりませんのエラー。

ModuleNotFoundError: No module named '_ctypes'
make: *** [install] Error 1

yum でlibffi-devel をインストール、再チャレンジ。成功。

# yum install libffi-devel

./bash_profile にパスを追記。

# vi ~/.bash_profile
 
↓を追記
export PATH=$PATH:/usr/local/python/bin

シンボリックリンクを貼って

# ln -s /usr/local/python/bin/python3 /usr/local/bin/python
# ln -s /usr/local/python/bin/pip3.7 /usr/local/bin/pip

ターミナル再起動。パスを反映させて python –version バージョン確認。

お疲れ様でした。

マイクラ・転落防止柵付き落とし穴

以前、作成した落とし穴mod を懲りずに改良してみました。
今回は、敵性mob に殴られているときに有効な転落防止柵付きマイナー版です。

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

for i in range(2):
    mc.setBlock(pos.x+1,pos.y+i,pos.z,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+i,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x-1,pos.y+i,pos.z,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+i,pos.z+1,DIAMOND_BLOCK)
    
for posX in range(20):
    for posZ in range(20):
        for posY in range(20):
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x+posX+1,pos.y-posY,pos.z-posZ,AIR)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x-posX-1,pos.y-posY,pos.z-posZ,AIR)

for posX in range(21):
    for posZ in range(21):
        for posY in range(21):
            mc.setBlock(pos.x+posX,pos.y-posY-1,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x+posX,pos.y-posY-1,pos.z-posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY-1,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY-1,pos.z-posZ,DIAMOND_BLOCK)
                
for i in range(2):
    mc.setBlock(pos.x+1,pos.y+i,pos.z,AIR)
    mc.setBlock(pos.x,pos.y+i,pos.z-1,AIR)
    mc.setBlock(pos.x-1,pos.y+i,pos.z,AIR)
    mc.setBlock(pos.x,pos.y+i,pos.z+1,AIR)

敵に殴り殺される前までに・・・、「天空の城、ラピュタ」のムスカ大佐よろしく、「死ねぇーーーい!」と言いつつコマンド入力、エンターキーを押すのも一興ですね。 

マイクラ・転落防止柵付き階段 Ver.2

前回からの改良点は踊り場を設けて、高さを関数化した所です。

踊り場付近のコードがごちゃごちゃしてて汚いです。

from mcpi.minecraft import Minecraft
from mcpi.block import *
def loop3(height):
    mc = Minecraft.create()
    pos = mc.player.getTilePos()

    for i in range(height):
# +x 方向の階段と転落防止柵
        mc.setBlock(pos.x+i+1,pos.y+i,pos.z,DIAMOND_BLOCK)
        mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z-1,DIAMOND_BLOCK)
    for i in range(1,height):
        mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z+1,DIAMOND_BLOCK)
# -x 方向の階段と転落防止柵
        mc.setBlock(pos.x-i+height,pos.y+i+height-1,pos.z+1,DIAMOND_BLOCK)
        mc.setBlock(pos.x-i+height,pos.y+i+height,pos.z+2,DIAMOND_BLOCK)
# -x 方向の内側の転落防止柵
    for i in range(height-2):
        mc.setBlock(pos.x-i+height-2,pos.y+i+height+2,pos.z,DIAMOND_BLOCK)
# ループでできた不要なブロック削除        
    mc.setBlock(pos.x+height,pos.y+height,pos.z+1,AIR)    
# z 踊り場の転落防止柵
    mc.setBlock(pos.x+height+1,pos.y+height,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x+height+1,pos.y+height,pos.z+2,DIAMOND_BLOCK)
# 踊り場の床とz 方向の転落防止柵
    for i in range(4):
        mc.setBlock(pos.x+height+2,pos.y+height,pos.z+i-1,DIAMOND_BLOCK)
        mc.setBlock(pos.x+height+1,pos.y+height-1,pos.z+i-1,DIAMOND_BLOCK)
# 2階の踊り場とz 方向の転落防止柵
    for i in range(4):
        mc.setBlock(pos.x-2,pos.y+height*2,pos.z+i-1,DIAMOND_BLOCK)
        mc.setBlock(pos.x-1,pos.y+height*2-1,pos.z+i-1,DIAMOND_BLOCK)
        mc.setBlock(pos.x,pos.y+height*2-1,pos.z+i-1,DIAMOND_BLOCK)
# 2階の踊り場と転落防止柵
    mc.setBlock(pos.x-1,pos.y+height*2,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+height*2,pos.z-1,DIAMOND_BLOCK)
    mc.setBlock(pos.x-1,pos.y+height*2,pos.z+2,DIAMOND_BLOCK)
    mc.setBlock(pos.x,pos.y+height*2,pos.z+2,DIAMOND_BLOCK)
    mc.setBlock(pos.x+1,pos.y+height*2,pos.z+2,DIAMOND_BLOCK)

# 関数化した引数付きの階段を作成
loop3(10)

需要があるかと言われれば、疑問?

訂正)関数定義の位置を正しい場所に移しました。

マイクラ・転落防止柵付き階段

マイクラの階段mod に転落防止柵を付けたマイナーヴァージョン。

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

for i in range(20):
    mc.setBlock(pos.x+i+1,pos.y+i,pos.z,DIAMOND_BLOCK)
    mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z+1,DIAMOND_BLOCK) ← New!
    mc.setBlock(pos.x+i+1,pos.y+i+1,pos.z-1,DIAMOND_BLOCK) ← New!


そろそろ、自分の家が欲しいですね。

 

マイクラで落とし穴

Python で自分の立ち位置の周りを空気ブロックに変えて敵を落としてダイアモンドブロックに変えるプログラムを作ってみた。

pitfall.py

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

for posX in range(20):
    for posZ in range(20):
        for posY in range(20):
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x+posX+1,pos.y-posY,pos.z-posZ,AIR)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z+posZ+1,AIR)
            mc.setBlock(pos.x-posX-1,pos.y-posY,pos.z-posZ,AIR)
for posX in range(20):
    for posZ in range(20):
        for posY in range(20):
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x+posX,pos.y-posY,pos.z-posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z+posZ,DIAMOND_BLOCK)
            mc.setBlock(pos.x-posX,pos.y-posY,pos.z-posZ,DIAMOND_BLOCK)
                

敵に攻撃されているときに使っても敵は落ちない、というバグがあります。近寄られる前に打つべし。