この記事では、MakeCode for Minecraftのチュートリアル「Save the Cake」について解説します。
作ったケーキが誰かに食べられてしまわないか心配な時ってよくありますよね!
「Save the Cake」では、一定時間たつとケーキの場所までテレポートしてもどるプログラムを作ります。
これでケーキの守りは万全です!
今回つくるもの「一定時間たったらケーキの場所までもどる」
今回は、
- 自分のいる場所にケーキを置き
- 一定時間(15秒)たったら
- ケーキの場所までテレポートしてもどる
というプログラムを作ります。
ケーキを置く
足元にケーキを置くプログラムを作ります。
1.「チャットコマンドを入力した時」ブロックを消す。
2.ブロックカテゴリーにある「ブロックを(座標)の地点に置く」ブロックを出し、「最初だけ」ブロックの中に配置する。
「最初だけ」ブロックの中には、プログラム開始時に1回だけ実行する処理が入ります。
3.「草ブロック」を「ケーキ」に変更する。
4.ブロックを置く場所を「~0 ~0 ~0」にする。
「~0 ~0 ~0」 は、プレイヤーがいる場所です。
ケーキの場所を記憶する
ケーキの場所もどるには、ケーキがどこにあったか覚えておく必要があります。
変数cakeをつくって、ケーキのある場所を記憶しましょう。
変数をつくる
変数cakeをつくります。
1.変数カテゴリーにある「変数を追加する…」をクリック。
2.変数の名前(cake)を入力して、「OK」をクリック。
変数に関するブロックが出てきました。
変数とは、プログラムで使うデータを一時的に保存するための場所のことです。よく数字や文字を入れておく箱と言われたりします。
変数については「変数とは?スクラッチ(Scratch)を使って解説」でくわしく解説しています。
変数に値を代入する
変数cakeに、ケーキのある場所を記憶しましょう。
3.変数カテゴリーから「変数cakeを0にする」ブロックを出し、「ブロックを(座標)の地点に置く」ブロックの下に配置する。
最初、ケーキはプレイヤーと同じ位置にあるので「プレイヤーの位置」ブロックを使います。
4.プレイヤーカテゴリにある「プレイヤーの位置」ブロックを出し、「変数cakeを0にする」ブロックの0の部分に配置する。
変数にあたえられた値を代入する。変数に値を記憶させることを代入といいます。
プレイヤーが現在いる場所の絶対座標を返します。
絶対座標と相対座標のちがい
絶対座標とは、ワールドのどこかにある原点(x=0,y=0,z=0)からどれだけはなれているかで決まる座標です。
ちなみに、ケーキを置く時に使った「~0 ~0 ~0」 は相対座標といいます。プレイヤーの位置(コマンドを実行した位置)からどれだけはなれているかで決まる座標です。
座標については「【マイクラ】コマンドを使う上で知っておきたい座標ざひょうの見かた」でくわしく解説しています。
ケーキからはなれはじめた時間を記憶する
どのくらい時間がたったか知るために、ケーキからはなれはじめた時間も覚えておきましょう。
もう一つ変数を作ります。
1.変数カテゴリーにある「変数を追加する…」をクリックして、変数「wander」を作る。
2.「変数wanderを0にする」ブロックを出し、「変数cakeをプレイヤーの位置にする」ブロックの下に配置する。
変数wanderに、ケーキからはなれはじめた時間を代入しましょう。
ゲーム時間(ワールドができてからたった時間)を使います。次の時間を確認する
3.ゲームプレイカテゴリーにある「次の時間を確認する」ブロックを出し、「変数wanderを0にする」ブロックの0の部分に配置する。確認する時間は「ゲーム時間」のままでOK。
指定した時間をマイクラの時間の単位(ティック)で取得します。
確認する時間の種類
・ゲーム時間(gametime):ワールドが作成されてから経過した時間
・日中(daytime):ゲーム内の時刻
・日中(day):ワールドが作成されてから経過した日数
・実際の時刻(real life):現実の時間
日本語では翻訳の問題で「日中」がふたつあります。ひとつ目とふたつ目で意味がちがうので注意しましょう。
どのくらい時間がたったか判定する
ケーキからはなれて どのくらい時間がたったか判定します。
判定条件をつくる1
1.ループカテゴリーにある「ずっと」ブロックを出す。
「ずっと」ブロックは、中の処理をずっとくり返し実行します。
2.論理カテゴリーにある「もし真なら」ブロックを出し、「ずっと」ブロックの中に配置する。
「もし真なら」ブロックは、もし条件が正しい場合、中の命令を実行します。正しくない場合は、何もしません。
3.論理カテゴリーにある「0 = 0」ブロックを出し、「もし真なら」ブロックの真の部分に配置する。
4.「0 = 0」ブロックの = を > に変更する。
比較演算子(ひかくえんざんし)
>という記号が出てきました。>のように、条件をつくるために使う記号を比較演算子(ひかくえんざんし)と呼びます。
- 〇 = □ : 等しい
- 〇 ≠ □ : 等しくない
- 〇 < □ : 〇は□より小さい(未満)
- 〇 ≦ □ : 〇は□以下
- 〇 > □ : 〇は□より大きい
- 〇 ≧ □ : 〇は□以上
より小さいと以下、より大きいと以上のちがいは、基準の数をふくむかどうか。以下、以上は基準となる数をふくみます。
- 18歳より小さい … 0~17歳
- 18歳以下 … 0~18歳
経過した時間の計算
ケーキからはなれはじめてから、どのくらい時間がたったか計算しましょう。
「今の時間」から「ケーキからはなれはじめた時間」を引けば、どのくらい時間がたったか分かりますね。
5.計算カテゴリーにある「0 – 0」ブロックを出す。
6.ゲームプレイカテゴリーにある「次の時間を確認する」ブロックを出し、「0 – 0」ブロックの左にある0の部分に配置する。
7.変数カテゴリーにある変数「wander」ブロックを「0 – 0」ブロックの右にある0の部分に配置する。
判定条件をつくる2
判定条件を完成させましょう。
8.「ゲーム時間 – wander」ブロックを「0 > 0」ブロックの左にある0の部分に配置する。
9.「0 > 0」ブロックの右にある0の部分を300に変更する。
300の部分は一定時間が経ったか判定する基準の値が入ります。
「ゲーム時間 – wander」の単位はティック(マイクラの時間の単位)。なので判定条件は「ケーキからはなれはじめて300ティックたったか」です。
ところで、300ティックは現実の時間で何秒になるでしょうか。マイクラの1日は24000ティック。現実の時間で20分です。
- 24000ティック : 1200秒(20分 x 60秒)
- 20ティック: 1秒
- 300ティック : 15秒
300ティックは、現実の時間で15秒になります。
「ケーキまでもどれ!」とメッセージを送る
15秒(300ティック)たったら、「Back to cake!(ケーキまでもどれ!)」とゲーム内チャットにメッセージを送ります。
1.プレイヤーカテゴリーにある「メッセージを送信する」ブロックを出し、「もし…なら」ブロックの中に配置する。
2.”:)”を”Back to cake!”に変更する。
ゲーム内チャットにメッセージを送信します。
ケーキの場所へテレポートする
プレイヤーをケーキの場所にテレポートさせます。
ケーキの場所は変数cakeに保存していましたね。
1.プレイヤーカテゴリーにある「現在の位置からテレポートする」ブロックを出し、「メッセージを送信する」ブロックの下に配置する。
2.変数カテゴリーにある変数「cake」ブロックを、「現在の位置からテレポートする」ブロックの座標の部分に配置する。
変数wanderを再設定する
これで完成!…といいたいところですが、変数wanderの値がゲームを開始した時間のまま変わりません。
このままだとゲームを開始して15秒たったら、ずっとテレポートをくり返してしまいます。ケーキから永遠にはなれられなくなるのは困りますね。
ケーキまでテレポートでもどったら、変数wanderに現在のゲーム時間を設定し直しましょう。
1.「最初に」ブロックの中にある「変数wanderをゲーム時間にする」ブロックを右クリックし、「複製する」を選ぶ。
2.コピーしたブロックを「現在の位置からテレポートする」ブロックの下に配置する。
マイクラにもどって実行してみよう!
マインクラフトの世界にもどって実行しましょう。
ケーキからなるべく遠くへ移動します。
15秒後、ケーキの場所までもどされましたか?
もっと長く歩き回りたい場合は、時間の値(300の部分)をもっと大きくしてください。
まとめ
チュートリアル「Save the Cake」について紹介しました。
正直、「Save the Cake(ケーキを守れ)」というより「Curse of the Cake(呪いのケーキ)」だと思うのは私だけでしょうか……?
今回使用した新しいブロック
- 「変数の値を0にする」ブロック
変数にあたえられた値を代入する。
- 「プレイヤーの位置」ブロック
プレイヤーが現在いる場所の絶対座標を返します。
- 「次の時間を確認する」ブロック
指定した時間をマイクラの時間の単位(ティック)で取得します。
ゲーム時間/日中(ゲーム内時刻)/日中(日数)/実際の時刻
- 「メッセージを送信する」ブロック
ゲーム内チャットにメッセージを送信します。