マインクラフトプログラミング、略してマイクラミング。
ちなみにマインクラフトをスクラッチでプログラミングすることはマイクラッチといっています。
今回はマインクラフトwindows10版でプログラミングをするCode Connectionの中のメイクコードにてスーパーパワーに分類されているRainbow Beaconのチェックです。
プログラムは以下の通り。
今までとは「色見」が違いますね。
「変数」がふんだんに使われているようです。
内容は以下の通りです。
まず最初に変数rainbowをコンクリートブロック10色の配列として宣言します。
チャット画面でbeaconと入力したら変数locationをプレイヤーのX座標+1の場所に設定します。
次にrainbowの値(コンクリートブロックの配列)を変数valueに繰り返し(10色分)代入していきます。
ブロックvalue(コンクリートブロック)をlocationで指定した座標に置き、locationの値(座標)をY座標のみ+1します。
Y座標を+1したらrainbowの値をvalueに代入することをあと9回(合計10回)繰り返します。
こんな感じのプログラムになっています。
繰り返しの内部が少しわかりづらいかもしれないですね。
実際にビーコンを設置して色を変えるプログラムかと思いましたが、10色のコンクリートブロックを積み重ねてビーコンのように見せるだけという内容ですね。
今回はちょっとだけ解説をします。
ブロックの形が変わる
まず配列に関してですが茶色の四角い配列のブロックが見つけられず苦労しました。
あるのはこのブロックだけです。
微妙に違うのです。
これでいいと思うのですが、配列(リスト)が四角ではなく、楕円なんです。
縦長ではなく横長なんです。
しかしこの配列のブロックの要素数を+をクリックして増やしていくと
6個目から形が変わるんです!
配列が縦になるんです!
これには5分ほど悩まされました。
しかしこれですべて解決です。
変数、配列、代入は細かく分けて考えてみる
最初は配列の宣言ですがここもプログラミング学習でのつまづきポイントですね。
しかも今回は配列をさらに変数に代入して、もう一回変数で指定された座標に代入するという初心者には何が何だかわからない状況に追い込まれそうなプログラムになっています。
ブロックで表しているのでまだ見た目に何とかなりそうですが、コードにすると
let location: Position = null
let rainbow: number[] = []
player.onChat("beacon", function () {
location = positions.add(
player.position(),
positions.create(1, 0, 0)
)
for (let i = 0; i < 10; i++) {
for (let value of rainbow) {
blocks.place(value, location)
location = positions.add(
location,
positions.create(0, 1, 0)
)
}
}
})
rainbow = [blocks.block(Block.RedConcrete), blocks.block(Block.OrangeConcrete), blocks.block(Block.YellowConcrete), blocks.block(Block.LimeConcrete), blocks.block(Block.GreenConcrete), blocks.block(Block.LightBlueConcrete), blocks.block(Block.BlueConcrete), blocks.block(Block.MagentaConcrete), blocks.block(Block.PurpleConcrete), blocks.block(Block.PinkConcrete)]
こうです。
今回はこれはそっとしておきましょう。
letとかnullとか見なかったことにしましょう。
今回は2つの塊に分かれています。
まずは配列の準備(宣言)です。
最初にrainbowという箱(変数)を作り、その時に一緒にコンクリート10色分のブロックをリスト(配列)として作成してrainbowの箱に入れておきます。
次はチャットコマンドでbeaconと入力したときにどういう動作をするかプログラムします。
まずはlocationという変数を作ります。
locationの中身は座標です。
プレイヤーの位置にX座標を+1した座標をセットします。
次に10回繰り返すプログラムを作成します。
繰り返す内容は
配列を変数に代入して繰り返すプログラムです。
rainbowで作成した10色のコンクリートブロックを変数valueに繰り返し代入していくのですが、1つ目を代入したらそのコンクリートブロックをlocationで指定された座標に置きます。
置いたらlocationの値にY座標を+1します。
座標をプラスしたら2つ目を代入して設置、さらに座標をプラスします。
これを配列の中身がなくなるまで繰り返します。
配列の中身がなくなったら繰り返しの2回目を上記と同じ内容で実行します。
つまりY座標を+1しながら10色のコンクリートブロックを積み上げていくことを10回繰り返すわけです。
繰り返しの中に繰り返しがあり、変数に変数を代入するので慣れないとわかりづらいプログラムになっています。
順番に一つ一つ確認しながら見ていくとプログラムの流れが見えてくると思います。
プログラミングをするうえで避けて通れない道
今回のような繰り返しの中に繰り返しを入れたり、変数に配列を代入したりすることはプログラミングでは当たり前のように利用されます。
ここでは登場していませんが、これにプラスして条件分岐も利用することが多いです。
というか繰り返しと分岐、変数を使わないとプログラミングができないと思います。
簡単な代入のプログラムと繰り返しのプログラムを作ってみてどんどん慣れていきましょう。
コメント