# カラフルなタイルをつくろう

前の章(階段をつくろう)


プログラミングでは、いくつかのデータをまとめて扱うことがよくあります。まとめることで、一度にたくさんのことを行えるようになるので、複雑で大きな建物を作るときには、しっかり活用していくべきです。

羊毛ブロックで作る市松模様

今回は、データをまとめる方法として、「リスト」を勉強します。まとめたデータは、前回まで勉強してきたfor文で一気に扱います。下のような、カラフルなタイルを簡単に作れるようになります。

カラフルな羊毛ブロックで作るタイル

# データをまとめる「リスト」

まずはリストを使わない、簡単なプログラムをみていきましょう。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

a = "RED"
b = "GREEN"
c = "BLUE"

mc.postToChat(a)
mc.postToChat(b)
mc.postToChat(c)

赤緑青と表示する

英単語

「Red」は赤色、「Green」は緑色、「Blue」は青色のことです。

(これらをまとめて、「光の三原色」と言います。)

変数に文字列を代入して、一つ一つチャットに送信しています。このままでも普通に動いてくれるのですが、変数をそれぞれに、合計3つも用意しないといけません。

このように、似ているデータ(ここでは、"RED""GREEN""BLUE"の3つの文字列)は、まとめて リスト に保管してあげると便利です。まずは使い方を見てみましょう。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

colors = ["RED", "GREEN", "BLUE"]

mc.postToChat(colors[0])
mc.postToChat(colors[1])
mc.postToChat(colors[2])

結果は先ほどと全く同じになります。何をしているのか、説明していきます。

colors = ["RED", "GREEN", "BLUE"]

この、[]で囲まれたものを リスト といいます。リストは、データに番号をつけて保管する棚のようなものだと思ってください。ここでは、"RED"などの文字列を、バラバラにではなく、一つのリストにまとめて、colorsという変数に代入しています。

英単語

「color」は英語で「色」という意味です。ここでは、複数の色を含んでいるので、複数形の「colors」を使用しています。

リストの中身である"RED""GREEN"などを、このリストの 「要素(ようそ)」といいます。それぞれの要素には、それが「このリストの何番目か」を表す「インデックス」という数値が、先頭から、012、…という順番でついています。

注意

リストのインデックスは、for文で数え上げるのと同じように、0から始まります。1からではないので注意しましょう。

mc.postToChat(colors[0])

このcolors[0]で、インデックスを使ってもとの要素を指定して呼び出しています。0はリストの先頭を表しているので、colorsリストの先頭である"RED"がチャットに送られることになります。同じように、1"GREEN"2"BLUE"が呼び出されています。

for文を使えば、プログラムをさらにスッキリとさせることができます。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

colors = ["RED", "GREEN", "BLUE"]

for i in range(3):
    mc.postToChat(colors[i])

for文の中の変数iの中身は、繰り返されるごとに、012が代入されていくので、colorsリストの3つの色が順番に呼び出されることになります。

# ブロックの「種類」と「情報」

リストの使い方を勉強したところで、カラフルなタイルを作るために、色付き羊毛ブロックを使えるようになりましょう。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

x, y, z = mc.player.getPos()

mc.setBlock(x + 1, y, z, 35, 0)
mc.setBlock(x + 1, y + 1, z, 35, 1)
mc.setBlock(x + 1, y + 2, z, 35, 2)

実行すると、下のように3色の羊毛ブロックが現れます。

三色の羊毛ブロックを積む

以前、mc.setBlock()メソッドには、4つの引数があると紹介しましたが、実は5つ目の引数、「ブロックの情報」というものがあります。

mc.setBlock(x + 1, y, z, 35, 0)

1,2,3番目までの引数は、ブロックの座標を、4つ目の引数は、「ブロックの種類」を決めるのでした。羊毛ブロックの番号は35番なので、引数に35が入っています。これだけでも白色の羊毛ブロックを設置できるのですが、他の色の羊毛ブロックを使いたい場合に、5つ目の「ブロックの情報」を入力することで、16種類の色を使い分けることができます。

番号 番号
0 8 ライトグレー
1 オレンジ 9 シアン
2 マゼンタ 10 紫色
3 空色 11
4 黄色 12 茶色
5 黄緑色 13
6 ピンク 14
7 グレー 15

上のプログラムでは、0: 白、1: オレンジ、2: マゼンタ の3つの色を使っています。

豆知識

同じように、mc.setBlocks()メソッドでも、8つ目の引数に「ブロックの情報」の番号を入力して、ブロックの色を変えることができます。

# 好きな色を組み合わせてタイルをつくる

「tile.py」というファイルを作成して、下のとおりにプログラムを書いてみましょう。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

x, y, z = mc.player.getPos()

colors = [3, 9, 2, 4, 11, 1, 5]

for i in range(7):
  mc.setBlocks(x + i, y - 1, z - 3, x + i, y - 1, z + 3, 35, colors[i])

結果は、この章の冒頭で紹介したような、カラフルな羊毛タイルが出来上がります。

カラフルな羊毛ブロックで作るタイル

コードの説明をしていきます。

colors = [3, 9, 2, 4, 11, 1, 5]

ここで、タイルに使いたい色を、使いたい順番でcolorsリストに入れています。

for i in range(7):
  mc.setBlocks(x + i, y - 1, z - 3, x + i, y - 1, z + 3, 35, colors[i])

for文を使って、羊毛ブロックを7回置いています。繰り返すたびに変わっているのは、x + icolors[i]の部分ですね。x + iで、繰り返すたびにタイルの位置を横にずらしていってます。

colors[i]ですが、これはcolorsリストから色の番号を取ってきています。一回目の時は、i0なので、colors[0]となり、リストの先頭にある3が呼び出されます。for文を使わずに書くと、

mc.setBlocks(x, y - 1, z - 3, x, y - 1, z + 3, 35, 3)
mc.setBlocks(x + 1, y - 1, z - 3, x + i, y - 1, z + 3, 35, 9)
...
mc.setBlocks(x + 6, y - 1, z - 3, x + 6, y - 1, z + 3, 35, 5)

となります。ブロックの色を決める部分が紛らわしいですが、「0番目が3(水色)」、「1番目が9(シアン)」というように、数値(インデックス)が数値(ブロックの色番号)に対応していることに注意してみてください。

リストとfor文を使うことで、複数の色の情報をまとめて利用することができました。タイルの色を変えたい時は、colorsリストの中身を変えてあげるだけで大丈夫です。自分の好きな色にアレンジしてみましょう。

# おわりに

Prosenseではマインクラフトを使ったプログラミングの個別指導もおこなっております。

マンツーマンでレッスンを受けながらマインクラフトでプログラミングを学びたい方はいますぐProsenseのLINE公式アカウントに登録ください。

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


練習問題