マイクラのPythonプログラムは、基本的にはプログラムファイルの中に書かれた命令のとおりにしか実行しません。
- 決められた時に、
- 決められた場所に、
- 決められたブロックの種類を、
- 決められた個数だけ配置する。
という事を、今までのマイクラPythonプログラム紹介記事でお伝えしてきました。
しかし今回は、実行する時のあなたの気分によって、ブロックの個数を簡単に変えられるプログラムを紹介します。
このプログラムを応用すれば、気分によってブロックの種類だって簡単に変えられるよう改造することもできますので、マインクラフトのPythonプログラムの面白みがぐっと広がってきますよ!
プログラムに数字や文字を与えて実行する
今まで紹介してきた記事では、マインクラフトのチャット入力エリアに
などを入力すると、Pythonプログラムが実行されてマインクラフトの世界に自動で建築することができました。
しかし、もう少し踏み込んだPythonプログラムの使い方をすると、
のように、ファイル名の後ろに半角スペースを加えて、さらに好きな値(数字や文字)を付け足すことで、プログラムにこの値を与えて実行させることができます。
この、プログラムに値を与えるものを、プログラマは「パラメータ」とか「引数(ひきすう)」と呼びます。
今回解説するマイクラPythonプログラムでは、road.py というプログラムにパラメータを指定して実行し、好きな長さの道を作るようにしてみましょう。
繰り返し命令を使って好きな長さの道を作る
以前の記事では、繰り返し命令の for というプログラムを使って、長い階段を作る方法を解説しました。
その結果、雲を突き抜ける高さの階段を簡単に建築することができましたよね。
しかしこのプログラムの欠点は、階段の長さを変えるためにはプログラムファイルを開いて、Pythonプログラムの中身ををいちいち修正しなければならなかったこと。
今回解説するプログラムでは、この欠点を解消してゆきます。
まずはプログラムの内容を見てゆきましょう。
ご自身の環境で動かしてみたい場合は、以下の場所に保存してください。
ファイルパス(Macの場合)
/Users/ユーザ名/Library/Application Support/minecraft/mcpipy/road.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 |
# coding: UTF-8 # 上のコードを書くことで、日本語のコメントを有効にします # マインクラフト用のプログラムを読み込みます from mine import * # 指定された値を受け取るために、sysというプログラムを読み込みます import sys # マインクラフト用のプログラムを、すぐに使えるように「mc」として準備します mc = Minecraft() # チャットメッセージを出力します mc.postToChat("road.py の処理を開始します") # パラメータ(プログラムを実行するときに与えられた値)を取得し、params に入れておきます params = sys.argv # 道のブロック数を、パラメータの値に設定します length_number = params[1] # チャットメッセージを出力します mc.postToChat(length_number + 'ブロックの道を作ります’) # パラメータは文字データとして認識されてしまうので、int()という命令を使って数字データに変換します length_number = int(length_number) # ブロックの種類を設定します block_number = 45 # レンガのブロック番号を指定 # 道の幅を設定します road_width = 5 # 道の幅が1個多く作られてしまうので、ここで調整 road_width = road_width - 1 # 自分の位置情報を取得します # 取得してきた位置情報は、それぞれ変数 x, y, z に保存されます x,y,z = mc.player.getPos() # 繰り返し命令を実行します # 繰り返す回数は length_number で指定した数ぶん for i in range(length_number): # i には何回めの繰り返し回数かが記録されています # ただし i はゼロから開始されるので、チャットメッセージには i+1 の値を出力します mc.postToChat(str(i+1) + "ブロックめの道を作ります") # i ブロックめの道を作ります mc.setBlocks(x+i, y-1, z, x+i, y-1, z+road_width, block_number) # 繰り返し命令はここで終了です # 繰り返し命令から抜け出すと、以下の実行が始まります mc.postToChat("道を" + str(i+1) + "ブロック作りました") mc.postToChat("実行終了です”) |
プログラムに値を与えて実行する方法
このプログラムを実行するためには、以下のようなコマンドをマイクラのチャットメッセージに記入します。
- road.py プログラムに数字の10を与えて実行し、
- プログラム側がこの値(パラメータ)を受け取り、
- このパラメータをプログラム実行時に活用して建築をおこないます。
結果から言うと、10ブロックぶんの道が東に向かって自動で建築されます。
で実行すると、20ブロックぶんの道が東に向かって自動で建築されます。
プログラムで値を受け取る方法
コマンドで指定された値(パラメータ)をPythonプログラムで受け取る方法として、3段階の作業が必要になります。
- 値(パラメータ)を受け取る準備をする
- 値(パラメータ)を受け取る
- 受け取った値(パラメータ)を開いて整理する
以降、プログラム実行時に与えられた値のことを「パラメータ」と表現しますね。
上記のプログラムで見てみると、
パラメータを受け取る準備をする箇所は
7 8 |
# 指定された値を受け取るために、sysというプログラムを読み込みます import sys |
のコードで、sys というプログラムを読み込んでおくことで、パラメータを受け取るプログラム命令が実行できるようになります。
次に、パラメータを受け取る箇所は
16 17 |
# プログラムを実行するときに指定された値を取得し、params に入れておきます params = sys.argv |
のコードで、sys というプログラムの中にあるargv の命令を使って、プログラム実行時に与えられたパラメータを受け取って params に入れています。
また次に、受け取ったパラメータを開いて整理する箇所は
19 20 |
# 道のブロック数を、プログラム実行時に指定された値に設定します length_number = params[1] |
のコードです。
受け取ったパラメータには複数の値が入っているのですが、コマンド
で実行したときの 10 の部分を見るためには params[1] というように角カッコ[]で番号を指定する必要があります。
パラメータの中身を確認する方法
パラメータの角括弧[]の番号はゼロから始まるのですが、
params[0]
の中には実行中のプログラムのファイル名が入っています。
params[1]
にはプログラム実行時に与えられたパラメータが入っています。
params[2]
には何が入るかというと、今は何も入っていませんので、開こうとするとエラーになるはずです。
チャット表示エリアの[ERR]となっている部分がエラーメッセージです。
試しに road.py に以下のコードを追加して実行してみると、params の中に何が入っているかを確認することができます。
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# プログラムを実行するときに指定された値を取得し、params に入れておきます params = sys.argv # params の中には何が入っているのかを見てみる mc.postToChat(params[0]) # 0個めのパラメータの中身を確認 mc.postToChat(params[1]) # 1個めのパラメータの中身を確認 mc.postToChat(params[2]) # 2個めのパラメータの中身を確認 # パラメータのテストだけをしたいので、ここでプログラムを強制終了する exit() # 道のブロック数を、パラメータの値に設定します length_number = params[1] … |
もし2個めのパラメータをプログラム実行時に与えたい場合は、チャット入力エリアに
のように、1個めのパラメータに続いて半角スペースを置き、数字や文字を記入して実行してみるとプログラムに送る事ができます。
15 16 |
# パラメータのテストだけをしたいので、ここでプログラムを強制終了する exit() |
exit()
この命令を使うと、ここでプログラムの実行を強制的に終了し、以降に書かれているプログラムは実行しないという命令です。
動作の確認をしたり、エラーを探したりするときによく利用する命令ですので、うまく活用してゆきましょう。