# 階段をつくろう

前の章(同じ操作をくりかえそう)


# くりかえしの操作を応用しよう

前回は、同じ操作をくりかえす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までの数字が並ぶはずです。

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回目は、i1が代入され直されるので、ウィンドウには1が表示されます。

Pythonの数え上げ方

Pythonでは、数を数え上げるときは、1ではなく0からスタートします。

これは多くのプログラミング言語で共通しています.

「10回くりかえす」ので、01、…と続いて、最後はi9が代入され、mc.postToChat(i)がウィンドウに9を表示して、このfor文は終了します。

iには単なる数値が入っているだけなので、足し算や引き算なども普通にできます。例えば、mc.postTcChat(i + 1)としてあげると、先ほどの結果に全て1が加えられます。

1から10まで表示する

# 石のブロックで階段をつくる

数を数えるだけではあまりおもしろくないので、この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の中身は、繰り返すたびに、01、…と変わっていき、最後の10回目は9が入って終わりです。

ここで使っているmc.setBlock()メソッドでは、x座標とy座標がポイントです。x + iy + 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公式アカウントに登録ください。

ProsenseのLINE公式アカウントと友達になる


練習問題