MakeCode for Minecraftでプログラミング学習その2:引数を操って大量の帯電クリーパー作成
引数。変換できねえな、と思ってはいたのですが「いんすう」ではなく「ひきすう」であることにようやく気付きました。そんなプログラミング日和です。さて、今回は最初のチュートリアルで触れたChicken Rainを改造しながら引数の使用方法を探ります。最終的に任意の大きさの牧場を作ったり、大量の帯電クリーパーを作成することができるようになりました。
事前情報
注意:お手本みたいなシンプルなコードを書いていくつもりだったんだ。前回まではʅ( ՞ਊ՞)ʃ≡。無謀だということが分かったので、とりあえず表現したいものを作るという方向にシフトしました。綺麗なコードを書くことは今のところあきらめているJavaScript学習者です。MakeCodeの方はまともなのを心がけていますが、後で見ると直したところがいいなあという部分が多々ある。
引数とは?
関数を実行するときに変数の値も渡せるというものですが、MakeCodeでいえば、コマンドを打つときに一緒に入力する数値のことです。JavaScriptでの引数の使い方はいまいち分かっていませんが、コマンドを打つことが多いMakecodeでは重宝するし、自然に使えるようになります。JavaScriptでは"hogehoge"という形で文字列も引数として渡せますが、MakeCodeではそもそも変数に文字列を入れられないので引数でも使用不可。コマンド&スペース&数字で入力するものと覚えてしまって良いと思います。
Chicken Rainの改造
Chicken Rainのコードに手を加えてよりChicken Rainらしくしてみます。
リアルChicken Rain
まずは準備。「行動不能にする」は、大量のスポーンを行うときには必ず設置しておきたいコマンドです。カクカクになったり、下手するとフリーズするからね。こだわりなければ、「すべてのエンティティ」に設定することで、その辺一体にいるすべての生き物を行動不能にすることができます。
むやみな殺生は好まぬというお方は、このパーツを使用すると良いですね。特定のMobを指定できます。
まずは、簡単な引数設定。繰り返し回数に変数を設定したので、好きな数のニワトリをスポーンさせることができます。コマンドの後にスペースを挟んで数値を入力。例えば「s 100」と打つと、ニワトリが100羽スポーンします。
引数は複数設定が可能なので、数に続いて範囲を指定してみました。コマンドを打つときは「s 100 20」といった感じ。スクショでは高さが一定になっていますが、ここはちょっと幅を持たせたほうが良いです。
これこそ本当のChiken rainでしょ。
Javascriptで表現
See the Pen gXOBdv by itaru (@mazuaru) on CodePen.
ひ、引数ってなに?
ニワトリ以外のスポーンを指定する
MakeCodeでは引数を3つまで設定できるので、3つめの引数でスポーンする対象を指定してみました。0でニワトリ、1でクリーパー、それ以外の数字で落雷。基本的に設定した引数は入力が想定されていますが、MakeCodeでは引数を入力しない場合は0とみなされます。たとえば、「S 100」と打つと後の引数は0になるため、ニワトリが自分の頭上ピンポイントで降ってくる。ちなみにJavaScriptでは0ではなく、未定義のundefinedになります。
Javascriptで表現
See the Pen gXOEbj by itaru (@mazuaru) on CodePen.
書き殴ってコピペ乱用する人間に自動インデントは鬼門だけど、CodePenではどうしても入ってしまうらしい。ちなみにこれ、雷とか鳥は見えなくしているだけなので、リセットしない限り無限に要素が増えて処理が重くなります。うん、canvasでやるべきだね。
フェンスで囲まれた牧場を作成
自由にニワトリが召喚できるようになったら、牧場が欲しくなってくるところです。ただ大地を書き出すだけなら簡単ですが、フェンスで囲うとなるとプログラミングらしくなってきますね。
フェンス設置方法を考える
思いついた方法はふたつですが、違いはフェンス。結果は同じですが、直線パーツを使って4つの辺を指定する方法と、一度面積をフェンスで埋めてしまってから、ひとまわり小さい面積を空気に入れ替えるという方法でフェンスに囲まれた場所を作っています。
座標が訳分らなかった頃なのでスクショではめちゃめちゃな設定してますが、北を向いてみると分かりやすいです。コンパスは常に持ち歩きましょう。
コマンドと引数を打つと、その大きさのフェンスで囲まれた大地が出来上がります。これ書きながら気づいたけど、なんでわざわざ自分を中心に作成することにこだわっているのだろうか。まあ、いいか。
大きい面積の牧場も作れるけど、そもそもPCスペック的に大量のMobを呼び出せないのでほどほどに。夢の大規模ニワトリ牧場の完成。
Javascriptで表現
See the Pen bYNeGQ by itaru (@mazuaru) on CodePen.
おおお!css3のcalcが便利すぎる。これは覚えておくべき。
円形の牧場を作成
lineパーツと同じところに入っているcircleパーツでは円形を書き出せるので使ってみました。こういった地形は手作業では難しいので、すげー!って感じになりますね。
綺麗に1本のフェンスで囲うことができないので、2マスの範囲を残して空気に置き換えています。こだわるなら他の方法を考える必要がありそう。まあまあ、このくらいなら及第点でしょう。
平面を書き出すパーツなので、ループすることで地面を3層分重ねています。これで農場作成もばっちり。
早速クリーパーを召喚して、落雷をバリバリ当てる。落雷の高さを0にしていると、地表に着火してしまうので、高さ調節するか、自分が飛んだ状態で発動すると良い感じです。
という感じで、帯電クリーパー島がいくつもできあがりました。
Javascriptおさらい
See the Pen KypdKJ by itaru (@mazuaru) on CodePen.
今回作成したコードの総まとめ。クリックイベントの設置に何時間かかったか分からないくらい苦労しました。移動先の大きさ判定していないことに気づいたけど気づかなかったことにしておこう。結局、引数はよく分かってないけど、関数が増えてくると使わざるを得ないんじゃないだろうか。多分。
まとめ
まだどうやって使うのか分からないパーツもありますが、操作には大体慣れてきたかなぁというところです。JavaScriptの理解も進んできたのでプログラミングが楽しくなりつつある。さて、牧場ときたら、農場ですね。水の配置が大きな違いになってきますが、繰り返しパーツで実現できそうなので、次回挑戦してみたいと思います。では、また。