今まで紹介してきたマインクラフトのPythonプログラムでは、コマンドを実行するとモノが一瞬で自動建築されました。
これはこれで不自由ないのですが、ブロックが建築されてゆく過程もゆっくり見てみたいものですよね。
そんな時に利用できるのが、Pythonプログラムの sleep という命令です。
sleep は指定された秒数だけ処理を一時停止し、指定時間が経過すると続きの処理が開始されるというもので、コマ送りのように自動建築される過程を見ることができます。
プログラムを sleep で一時停止して建築の過程をながめる
今回は、過去の記事で紹介した簡単なプログラム「道を作る」を改造し、ゆっくり自動建築される動きを眺めましょう。
以下にサンプルプログラムを掲載しますので、ご自身の環境で動かしてみたい場合は以下の場所に保存してください。
ファイルパス(Macの場合)
/Users/ユーザ名/Library/Application Support/minecraft/mcpipy/sleep.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# coding: UTF-8 # 上のコードを書くことで、日本語のコメントを有効にします # マインクラフト用のプログラムを読み込みます from mine import * # 一時停止が使えるように、時間を扱うことができる time というプログラムを読み込みます import time # マインクラフト用のプログラムを、すぐに使えるように「mc」として準備します mc = Minecraft() # チャットメッセージを出力します mc.postToChat("sleep.py の処理を開始します") # 1秒間停止します time.sleep(1) # チャットメッセージを出力します mc.postToChat('東に向かって少しずつ道を作ります') # 1秒間停止します time.sleep(1) # チャットメッセージを1秒おきに出力します mc.postToChat('3秒前') time.sleep(1) mc.postToChat('2秒前') time.sleep(1) mc.postToChat('1秒前') time.sleep(1) # ブロックの種類を設定します block_number = 17 # 木の番号を指定 # 自分の位置情報を取得します # 取得してきた位置情報は、それぞれ変数 x, y, z に保存されます x,y,z = mc.player.getPos() # 繰り返し命令を実行します # 繰り返す回数は length_number で指定した数ぶん for i in range(20): # 0.5秒間停止します time.sleep(0.5) # i には何回めの繰り返し回数かが記録されています # i ブロックめの道を作ります mc.setBlocks(x+i, y-1, z, x+i, y-1, z, block_number) # 繰り返し命令はここで終了です # 繰り返し命令から抜け出すと、以下の実行が始まります mc.postToChat("道を" + str(i+1) + "ブロック作りました") # 3秒間停止します time.sleep(3) mc.postToChat("実行終了です") |
こちらに掲載したサンプルを実行するには、チャット入力エリアに以下のコマンドを入力してください。
プレーヤの東側に向かって、0.5秒間隔で道が建築されたと思います。
もしチャットでエラーメッセージが表示されてしまった場合は、エラーメッセージ内に書かれている行番号に記述ミスがあると思いますので、確認してみてくださいね。
一時停止プログラムの解説
このプログラムで注目すべき点は、まずPythonプログラムで時間が扱えるようにするために読み込んでいる部分です。
7 8 |
# 一時停止が使えるように、時間を扱うことができる time というプログラムを読み込みます import time |
これを書いておかないと時間処理をプログラム内で使用できませんので、ご注意ください。
そして、色々な場所で書かれている
16 17 |
# 1秒間停止します time.sleep(1) |
43 44 |
# 0.5秒間停止します time.sleep(0.5) |
などの部分です。
8行めで読み込まれた外部のプログラム「time」の「sleep」という命令を使って、丸括弧の中で指定している秒数だけ処理を一時停止するというものです。
少数や整数で指定することができますので、色々な秒数を指定して実行してみてください。
コマンド実行時にパラメータを指定して、そのパラメータの秒数ぶんプログラム実行を一時停止するように改造してみるのも面白いでしょうね。