ピラミッドを作ろう! 第二回:ループで自動化 【マイクラコラムVol.7】

こんにちは、ロボテックです。
マインクラフト教育版MakeCodeでのピラミッド作り、今回は第二回となります。
※前回の記事はこちら:第一回:まずはシンプルに
今回のテーマは以下です。
●第二回:応用。スムーズに大きなピラミッドが作れるプログラム。(ループと変数)
それでは難しい話は後回しにして、今回どんな事をするのか結果から見てみましょう。
🧱ピラミッドを召喚!

これを~

こう!!
一瞬で20段の大きなピラミッドが出来ました。
もちろんプログラムを修正すれば、もっと大きいピラミッドや、もっと小さいピラミッドを作る事も出来ます。
それでは、どんなプログラムを作ったのか実際に見ていきましょう。
🤖プログラムの考え方
まず、「どんなプログラムを作ればいいのか」というイメージから考えます。
第一回で使った図を見てみましょう。

下から1段、2段……と作ってゆく場合、プログラムはどんな処理をすればいいでしょうか?
まずは最下段、13×13ブロックの正方形を作ります。
次に1段上にあがって、今度は11×11ブロックの正方形を作ります。
さらに1段上がって……
これを簡単に現すと、以下のようになります。
① A段目に、B×Bブロックの正方形を作る
② Aに1を足す(1段目だったら2段目になる)
③ Bから2を引く
④ ①に戻る
結構簡単そうに見えますね。
一気に全部作らず、まずは変数とループを使って「1ブロックを縦に並べて一本のタワーを作る」という簡単なプログラムを作ってみましょう。
「いま何段目を作っているのか」という段数はループの度に変化します。
こういった時には、数字を入れ物のように保存できる「変数」を使います。
このプログラムを実行すると……

オーケー!
砂岩ブロック20段のタワーが出来上がりました。
このように「同じようで少し違う(段が上がる)こと」を連続で行いたい場合、変数とループの組み合わせがとっても便利です。
「このぐらい手でも積めるぜ~」という人もいるかもしれませんが、プログラムで自動化すると100ブロックだろうが1000ブロックだろうが一瞬で、しかも何度でも作れるという点がやっぱり楽チンですね。
それではこのプログラムを改造して、本番の「ピラミッド作成」プログラムへを作りましょう。
今までよりはちょっぴり難しくなりますよ。
💻️ピラミッド生成プログラム
ピラミッドを作るには、今のタワー生成プログラムのどこを改造すれば良いのでしょうか。
変数とループを使って「一段一段上に上がりながら作っていく」という処理は既に出来ています。
よって、「正方形を作る」「正方形は段ごとに小さくなる」という部分さえ作る事ができれば、ピラミッドは完成するハズです。
本来「ブロックを並べる」ブロックは、Fillコマンドのように直方体の範囲をブロックで埋めるものです。
しかし先ほどのプログラムは、始まりも終わりもXが10、Zが0と同じ数値になっていました。

そのため、全く同じ場所に、上下方向にだけブロックを積み上げるという指示になっていたのです。

つまりピラミッドを生成するには、このXとZの数字を調整して正方形を描けばOKです。
たとえば、以下のように数値を入れると……

※高さ20。1段ごとに2ブロック小さくなるので、最下段は40ブロックとする。

こんな風に、ドドンと大きな直方体が出来上がりました。
全くピラミッドには見えませんが、意外なことにプログラム的にはあと一歩です。
ピラミッド生成に足りていないのは「1段上がるごとに正方形が狭くなる」という処理だけです。
🏫算数はプログラミングの必須テクニック
1段上がるごとに、正方形が2だけ狭くなる。
つまり、1段上がるごとに正方形の一辺の長さが2減るという事。
これはまさに、算数の引き算です。
さぁ、これが今日のプログラムの完成形です。

2つだけ注意点があります。
1つめ、1段ごとに正方形の1辺は2減りますが、「-2」という計算をする訳ではないという事。
正方形は、周囲から内側へと小さくなっていきます。
つまりX方向・Z方向ともに「始まり・終わりの両方が1ずつ減る」という形で計算を行います。
2つめ、減らす数には「段」の変数を使うという事。
1段ごとに辺の長さが1ずつ減っていくという事は、1段目は1ずつ、2段目は2ずつ、3段目は3ずつ減っていきます。
という事は、段数と減るブロック数は完全に一致します。
わざわざ別の変数を作ったりせずとも、この段の変数を使うだけで計算が出来る訳ですね。
今回の内容はレベルが高いため、かなり説明を省いています。
もし「分からない」「でも、もっと知りたい」と思った人は、ぜひロボテックの無料体験へお越しください。

🔍️まとめ
さて、大きなピラミッドもプログラミングで簡単に作れるようになりました。
ですが……これで終わりではありません。
現在のプログラムには欠点があります。
それは「作るピラミッドの大きさを変える時、数字の調整が面倒くさい」というもの。
次回は更にレベルアップしますが、この欠点を克服する上級テクニックをご紹介します。
それではまた、次回のコラムでお会いしましょう。
🖥️ ロボテックについて
\ お近くの教室で無料体験受付中! /
ロボテックは、宇都宮市(下栗・ゆいの杜)を中心に、栃木市、壬生町、館林市(群馬)で子ども向けのロボット・プログラミングスクールを運営しています。
LEGOや教育版マインクラフト、Scratch、Robloxなどなど多彩な教材で楽しくプログラミングを学んで頂けます。
無料体験も定期開催しておりますので、ぜひお気軽にご相談ください!
【詳しくはこちら】