前回の ミニダンジョンを作ろう 3 のつづきです。
プログラミングに興味が出てきたら、ほかの言語にもチャレンジしてみましょう。
言語によって得意なことが違うので、いくつか知っていると楽しみ方の幅が広がります。
たとえば、Scratch(スクラッチ) や Python(パイソン)、JavaScript(ジャバスクリプト) などがおすすめです。
「どうやって始めればいいの?」と思ったら、まずはネットにある無料の入門サイトを探してみるのがいいでしょう。
なぜ無料のサイトをおすすめするかというと、学習内容が自分に合っているかどうかは、実際にやってみないとわからないからです。
無料なら合わなかったときにすぐやめて、次に進みやすいのもポイントです。
指定したマップでコインを表示
3つ目のマップ、つまり、変数 map_no が 2 の時だけコインを表示させます。
まず条件判断文を作ります。
論理 から下図の2つのブロックを持ってきます。

最初だけ の一番下に条件判断文を入れます。

次に、条件判断の式を入れます。

変数 map_no を組み込んで 2 と等しいかどうかの条件判断文を作ります。

くりかえし 8 回を入れます。

コインのスプライトを くりかえし の中に入れます。上からコピーすると簡単ですね。
これでコインを8つ表示します。

シーン から mySpriteをランダムに の上に配置 を持ってきます。

くりかえし の中に入れて、変数を coin に変更します。
絵を指定していないので、マップ上の何もないタイルの上にコインが表示されます。

実行してみましょう。
何もない地面の上にコインが8個表示されます。

ところで、画面の下の方(壁の外側)にコインがないことに気づきましたか?
これは、マップの縦のサイズが画面サイズより小さいからです。
実は、マップとして使われているのは壁が表示されているエリアまでで、それより外側はマップとして扱われません。
コインは、この範囲内の空いているタイルの中からランダムに選ばれて配置されるので、壁の外側には出現しないんです。
マップの処理を関数にしよう
マップの処理を関数(かんすう)にまとめましょう。
関数とは、いくつかの処理をまとめておくことで、何度も使いやすくする仕組みのことです。
▼ なぜ関数にするの?
関数にすると、同じ処理を何度でも簡単に使いまわせるようになります。
たとえば、ゲームの途中でマップを切り替えたり、もう一度初期状態に戻したりするとき、関数を呼び出すだけでOKになります。
また、プログラム全体が見やすく・わかりやすくなるのも大きなメリットです。
後から修正したいときも、関数の中だけを直せばよいので、ミスも減って管理しやすくなります。
今回は、最初だけ の中にあるマップ関連の処理だけを取り出して関数にしてみます。
関数 は 高度なブロック の中にあります。
ここを開いて 関数を作成する をクリックします。

関数の名前を マップのセット にします。

マップの処理を関数ブロックの中に移動します。
下図には見えてませんが、最初だけ の最後の処理まで移動しましょう。

これでマップの処理を関数にできました。簡単ですね。

最初だけ の中からこの関数を呼び出す必要があります。
「関数を呼び出す」「関数を呼ぶ」というフレーズは、関数内の処理を実行するという意味です。
関数 から 呼び出し マップのセット を持ってきます。
この呼び出し用のブロックは、関数を作ったときに自動で作られます。

最初だけ の中に 呼び出し マップのセット を入れます。
それから、これからのために変数 map_no を 0 にしておきましょう。

これでマップの処理を関数にすることができました。
実行して正しく動くことを確認しましょう。
マップの切り替えをしよう
マップ切り替えの仕組みを作りましょう。
プレイヤーが階段までたどり着いたとき、次のマップへ切り替えます。
シーン からタイルマップ用の当たり判定を持ってきます。

重なりの対象を階段の絵に変更します。

変数 から 変数 map_no を 1 だけ増やす を持って来ます。

当たり判定の中に入れます。
変数 map_no を 1 だけ増やすに設定します。

あとはマップ処理の関数を呼び出すだけ…… と思いきや、そう簡単ではありません。
階段にたどり着いたとき、次のマップへ切り替える場合と、すべてのマップをクリアしてゲーム終了になる場合の、2つのパターンがあるからです。
そこで、下図の条件判断(もし〜なら〜でなければ)を用意して、どちらの処理をするか決めるようにしましょう。

等しいかどうか調べるため 0 = 0 のブロックを入れます。

高度なブロック の 配列 の中から 配列の長さ 配列 を持ってきます。

変数 map_no と、配列 map の長さを比べます。
map の長さを使えば、「全部でいくつのマップがあるか」を調べることができます。
つまり、map_no の値と map の長さが同じになったら、
もう次のマップは存在しないということになります。
なぜなら、配列は 0 から数えるしくみだからです(たとえば、3個あっても番号は 0, 1, 2 になります)。

ゲーム から2つのブロックを持ってきます。

上に 勝ち でゲームを終了する を入れて、
下に タイトル “次のマップへ” を表示する を入れます。

下に 呼び出し マップのセット を入れます。

テストしましょう。
1面から2面へ、2面から3面へ切り替わるときは「次のマップへ」が表示されます。

3面の階段へたどり着いたとき、ゲームオーバー演出が始まります。

次回、完結編です。