# 階段をつくろう
# くりかえしの操作を応用しよう
前回は、同じ操作をくりかえすfor
文の使い方を勉強し、ブロックを設置し続ける方法を勉強しました。
今回も、for
文を使った操作を勉強していきます。前回までは、全く同じ操作をくりかえすことしかできませんでしたが、今回は少し応用して、ちょっとずつちがう操作を繰り返していきましょう。
# 数を数えていくプログラムをつくる
早速プログラムを作っていきます。mcpipyフォルダに、「count.py」というファイルを作りましょう。
英単語
「count」とは、英語で「数える」という意味です。
ファイルの中身は、下のように書きましょう。
import mcpi.minecraft as minecraft
mc = minecraft.Minecraft.create()
for i in range(10):
mc.postToChat(i)
これを実行すると、下のように、チャットウィンドウに、0
から9
までの数字が並ぶはずです。
mc.postToChat()
の引数には、i
という変数が入っています。このi
は、前の行のfor i in range(10):
のところで出てきていますね。
for
文は、range()
の引数の数字の回数だけ、同じ操作をくりかえすはたらきがありました。そして、for i in range(10):
のi
には、繰り返されるたびに、「それが何回目の操作か」を表す数字が代入されます。
例えば1回めの操作ならば、i
には0
が代入されるので、mc.postToChat(i)
メソッドは、0
をウィンドウに表示します。2回目は、i
に1
が代入され直されるので、ウィンドウには1
が表示されます。
Pythonの数え上げ方
Pythonでは、数を数え上げるときは、1
ではなく0
からスタートします。
これは多くのプログラミング言語で共通しています.
「10回くりかえす」ので、0
、1
、…と続いて、最後はi
に9
が代入され、mc.postToChat(i)
がウィンドウに9
を表示して、このfor
文は終了します。
i
には単なる数値が入っているだけなので、足し算や引き算なども普通にできます。例えば、mc.postTcChat(i + 1)
としてあげると、先ほどの結果に全て1
が加えられます。
# 石のブロックで階段をつくる
数を数えるだけではあまりおもしろくないので、このfor
文のしくみを利用して、ものづくりをしていきましょう。
mcpipyフォルダに、「stair.py」というファイルを作りましょう。中身には、下のようなプログラムを書いていきます。
import mcpi.minecraft as minecraft
mc = minecraft.Minecraft.create()
x, y, z = mc.player.getPos()
for i in range(10):
mc.setBlock(x + i, y + i, z + 1, 1)
英単語
「stair」は階段という意味です。
実行すると、10個の石のブロックが階段のように設置されます。
「for
文を使わなくてもできるじゃん」と思うかもしれませんね。確かに、くりかえしの操作をせずに、mc.setBlock()
メソッドを10回書いてもこの階段は作れます。
でも、10回も似たような操作を書くのは大変ですよね。引数も間違えてしまうかもしれません。それに比べて、for
文を使えばコードを2行書くだけで終わってしまうので、とてもカンタンです。
ここでのfor
文のはたらきについて、説明します。
for i in range(10):
mc.setBlock(x + i, y + i, z + 1, 1)
先ほどのチャットの例と同じように、同じ操作を10回くりかえすfor
文です。変数i
の中身は、繰り返すたびに、0
、1
、…と変わっていき、最後の10回目は9
が入って終わりです。
ここで使っているmc.setBlock()
メソッドでは、x座標とy座標がポイントです。x + i
、y + i
と、それぞれi
を加えています。for
文を使わずに書くならば、
mc.setBlock(x, y, z + 1, 1)
mc.setBlock(x + 1, y + 1, z + 1, 1)
mc.setBlock(x + 2, y + 2, z + 1, 1)
...
mc.setBlock(x + 9, y + 9, z + 1, 1)
となります。毎回x座標とy座標に加える数が大きくなるのがわかりますね。これによって、次に置くブロックの位置は、「前においたブロックの一つとなりで、一段たかいところ」になるので、段々高くなる階段のようなものができるのです。
z座標はz + 1
のままにしてあるのも重要です。これもz + i
にして一緒に大きくすると、このような結果になります。
斜めにつながったブロック…とても登りづらそうですね。
今のプログラムを応用すると、下のように、地に足のついた階段も作れます。こちらのほうが、登ったときに安心感がありそうですね。
ソースコードは下のとおりです。
import mcpi.minecraft as minecraft
mc = minecraft.Minecraft.create()
x, y, z = mc.player.getPos()
for i in range(10):
mc.setBlocks(x + i, y, z + 1, x + i, y + i, z + 1, 1)
mc.setBlocks()
メソッドを使って、毎回縦方向に大きくなるブロックを置いていく操作です。
# おわりに
Prosenseではマインクラフトを使ったプログラミングの個別指導もおこなっております。
マンツーマンでレッスンを受けながらマインクラフトでプログラミングを学びたい方はいますぐProsenseのLINE公式アカウントに登録ください。