ミニダンジョンを作ろう 4

 

前回の ミニダンジョンを作ろう 3 のつづきです。

プログラミングに興味が出てきたら、ほかの言語にもチャレンジしてみましょう。
言語によって得意なことが違うので、いくつか知っていると楽しみ方の幅が広がります。
たとえば、Scratch(スクラッチ) や Python(パイソン)、JavaScript(ジャバスクリプト) などがおすすめです。

「どうやって始めればいいの?」と思ったら、まずはネットにある無料の入門サイトを探してみるのがいいでしょう。
なぜ無料のサイトをおすすめするかというと、学習内容が自分に合っているかどうかは、実際にやってみないとわからないからです。
無料なら合わなかったときにすぐやめて、次に進みやすいのもポイントです。

 

指定したマップでコインを表示

3つ目のマップ、つまり、変数 map_no が 2 の時だけコインを表示させます。

まず条件判断文を作ります。
論理 から下図の2つのブロックを持ってきます。

条件判断用のブロックを持ってくる

 

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

条件判断文を入れる

 

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

条件判断文を入れる

 

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

map_noが2かどうか判断する

 

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

くりかえし8回を入れる

 

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

コインのスプライト表示をコピー

 

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

mySpriteをランダムにの上に配置を使う

 

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

coinをランダムに配置する

 

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

地面にコインが表示される

 

ところで、画面の下の方(壁の外側)にコインがないことに気づきましたか?
これは、マップの縦のサイズが画面サイズより小さいからです。

実は、マップとして使われているのは壁が表示されているエリアまでで、それより外側はマップとして扱われません。
コインは、この範囲内の空いているタイルの中からランダムに選ばれて配置されるので、壁の外側には出現しないんです。

 

マップの処理を関数にしよう

マップの処理を関数(かんすう)にまとめましょう。
関数とは、いくつかの処理をまとめておくことで、何度も使いやすくする仕組みのことです。

▼ なぜ関数にするの?
関数にすると、同じ処理を何度でも簡単に使いまわせるようになります。
たとえば、ゲームの途中でマップを切り替えたり、もう一度初期状態に戻したりするとき、関数を呼び出すだけでOKになります。

また、プログラム全体が見やすく・わかりやすくなるのも大きなメリットです。
後から修正したいときも、関数の中だけを直せばよいので、ミスも減って管理しやすくなります。

今回は、最初だけ の中にあるマップ関連の処理だけを取り出して関数にしてみます。

関数高度なブロック の中にあります。
ここを開いて 関数を作成する をクリックします。

関数を作成する

 

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

マップのセットを関数名にする

 

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

マップの処理を関数ブロックの中に移動

 

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

マップの処理の関数

 

最初だけ の中からこの関数を呼び出す必要があります。
「関数を呼び出す」「関数を呼ぶ」というフレーズは、関数内の処理を実行するという意味です。

関数 から 呼び出し マップのセット を持ってきます。
この呼び出し用のブロックは、関数を作ったときに自動で作られます。

呼び出しマップのセットを使う

 

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

最初だけの中に呼び出しブロックを入れる

 

これでマップの処理を関数にすることができました。
実行して正しく動くことを確認しましょう。

 

マップの切り替えをしよう

マップ切り替えの仕組みを作りましょう。
プレイヤーが階段までたどり着いたとき、次のマップへ切り替えます。

シーン からタイルマップ用の当たり判定を持ってきます。

タイルマップ用の当たり判定を使う

 

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

タイルの絵を階段に変更

 

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

変数map_noを1だけ増やすを持ってくる

 

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

変数map_noを1だけ増やすを入れる

 

あとはマップ処理の関数を呼び出すだけ…… と思いきや、そう簡単ではありません。
階段にたどり着いたとき、次のマップへ切り替える場合と、すべてのマップをクリアしてゲーム終了になる場合の、2つのパターンがあるからです。

そこで、下図の条件判断(もし〜なら〜でなければ)を用意して、どちらの処理をするか決めるようにしましょう。

下図の条件判断文を用意

 

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

等しいか判断する

 

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

配列の長さを使う

 

変数 map_no と、配列 map の長さを比べます。
map の長さを使えば、「全部でいくつのマップがあるか」を調べることができます。

つまり、map_no の値と map の長さが同じになったら、
もう次のマップは存在しないということになります。

なぜなら、配列は 0 から数えるしくみだからです(たとえば、3個あっても番号は 0, 1, 2 になります)。

map_noとmap配列の長さを比べる

 

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

ゲームから2つのブロックを持ってくる

 

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

ゲームオーバーと次のマップへを入れる

 

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

マップのセット関数を呼び出す

 

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

次のマップへが表示される

 

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

3面のクリアでゲームオーバー

 

次回、完結編です。

 

MakeCode Arcade

  1. MakeCodeはいかが
  2. りんご狩りゲーム
  3. りんご狩りゲーム(完)
  4. ピザを避けてゲーム
  5. ピザを避けて 2
  6. ピザを避けて(完)
  7. アカウント登録
  8. ケーキ早食いゲーム
  9. ケーキ早食い 2
  10. ケーキ早食い(完)
  11. 危険ドライブ
  12. 危険ドライブ 2
  13. 危険ドライブ(完)
  14. 15秒シューティング
  15. 15秒Shooting 2
  16. 15秒Shooting(完)
  17. ブロック崩し
  18. ブロック崩し 2
  19. ブロック崩し(完)
  20. ヘビキングを撃て
  21. ヘビキング(完)
  22. ちょびっと迷路
  23. ちょびっと迷路 2
  24. ちょびっと迷路(完)
  25. でんでんジャンプ
  26. でんでんJump 2
  27. でんでんJump(完)
  28. ミニダンジョン
  29. ミニダンジョン 2
  30. ミニダンジョン 3
  31. ミニダンジョン 4
  32. ミニダンジョン(完)