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

 

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

初心者がチュートリアルを終えて「よし、これからゲームを作るぞ!」と思ったときに、何から始めればいいのか分からず、戸惑ってしまうという話はよくあります。
そこでこの講座では、私が実際にゲームを作るときの順番にそって説明しています。
少しずつ積み上げながら作っていく流れを体験してほしいからです。

それと、説明の中で「実行してみよう」という言葉がよく出てくるのに気づいたかもしれません。 これは、プログラミングにおいてテストすることがとても大事だからです。
人は習慣で動きます。
「こまめにテストする」習慣を身につけておくと、あとで必ず役に立ちますよ。

 

変数でマップを切り替えよう

2つのマップを切り替えるための仕組みを作ります。
まず、選択中のマップを管理するための変数を作ります。

変数を追加する をクリックします。

新しい変数を作る

 

変数名を map_no にします。

変数名をmap_noにする

 

下図を参考に 変数 map_no を 0 にする を入れてください。
変数 map には実際のマップデータが入り、
変数 map_no にはマップ番号を入れることになります。

変数map_noを0にするを入れる

 

配列に入れたデータを取得するために 配列の 0 番目の値 を用意します。

配列の0番目の値を用意する

 

タイルマップを に設定する の中に map の 0 番目の値 を入れます。

赤玉の数のループを作る

 

変数 から map_no を持ってきます。

map_noを持ってくる

 

map の map_no 番目の値 に設定します。
これで map_no でマップを切り替える仕組みは完成しました。

mapのmap_no番目の値にする

 

変数 map_no に 1 をセットして実行してみましょう。

map_noに1をセットしてテストする

 

2番目のマップが表示されます。

2番目のマップが表示される

 

壁を消す仕組みを作ろう

2番目のマップが表示できた所で、スイッチで壁を消す仕組みを作っていきます。
スイッチには青い玉を使います。

現状、岩の壁があるため下に移動することはできません。

岩の壁のため移動できない

 

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

赤玉の数のループを作る

 

青い玉に変更します。

青い玉に変更する

 

タイル をタイルマップ内の 0 行 0 列目 に設定する を持ってきます。

タイルをタイルマップ列0行0に設定するを使う

 

当たり判定の中に入れます。
マップの座標に location をセットします。
これでプレイヤーと青い玉が当たったとき、青い玉は消えます。

空のタイルで青い玉を消す

 

いきなりですが、質問です。
「どうして青い玉を消す必要があるのでしょうか?」

この質問にうまく答えられなかったり、間違った答えをしてしまった人は、
まだプログラミングの考え方がしっかり身についていないかもしれません。

でも大丈夫。そんなときは、学習と並行して「自分でゲームを作ってみる」ことをおすすめします。 課題のゲームを少し改造するだけでも構いません。
とにかく、自分で考えてプログラムを書いてみることが大切なんです。

ちなみに、質問の答えはこうです。
「青い玉を消さないと、何度も当たり判定が実行されてしまうから」です。

 

岩の壁を消そう

スイッチの部分が完成しました。
次は、このスイッチで岩を消す仕組みを作っていきます。

やることは、プレイヤーの初期配置やコインに差し替えたときと同じような手順です。
まずは、ループのブロックを用意しましょう。

ループのブロックを用意する

 

スイッチの仕組みの当たり判定の中に入れます。

ループを当たり判定の中に入れる

 

マップ上のタイルを探すため すべての ◻︎ 位置の配列 を持ってきます。

すべての位置の配列を用意する

 

ループの配列のところに入れて、岩の絵を選択します。

岩の絵を選択する

 

マップ上で見つけた岩を、空のタイルに差し替えます。
には岩の位置情報が入ってます。

見つけた岩を空のタイルで差し替える

 

テストしてみましょう。
青い玉に接触すると岩が消えます。

青い玉に当たると岩が消える

 

岩の当たり判定を消そう

スイッチにより岩が消えたら、プレイヤーを画面の下まで移動してみてください。
途中で進めなくなります。まるで、見えない壁があるようです。
その理由は、マップ作成時に設定した当たり(壁)が残ったままだからです。

岩の当たりが残っているので移動できない

 

タイルマップ内の 0 行 0 列目 に壁を設定する オフ を持ってきます。

タイルマップ列0行0に壁を設定するを使う

 

岩を消す処理といっしょに、ループの中に入れましょう。
タイルマップ座標に をセットすることで、その場所の見えない当たり判定(壁)をオフにできます。
このループが実行されると、壁がなくなってプレイヤーが通れるようになります。

値の位置の当たりを消す

 

実行して、マップの下の方まで移動できるか確認してみましょう。

ちなみに、この命令を使えば、当たり判定(壁)の ON・OFF が自由にできます。
たとえばゲーム中に「橋が壊れる」ような演出をしたいとき、当たりをONにすれば壊れた橋は通行できなくなります。

 

3つ目のマップを作ろう

3つ目のマップを作ります。

まず + をクリックして配列の枠を増やします。

配列の枠を増やす

 

3つ目のマップを画面に表示するため、変数 map_no を 2 に変更しましょう。
そして3番目のタイルマップのエディタを開きます。

3番目のタイルマップのエディタを開く

 

マップサイズを横 205 に変更します。

マップサイズを20x5にする

 

壁(草)・プレイヤーの初期配置・脱出階段を描きましょう。

壁・プレイヤーの初期配置・脱出階段を描く

 

壁に当たり判定を入れます。

壁に当たり判定を入れる

 

実行してマップが正しく表示されるか確認しましょう。

新しいマップの表示を確認する

 

続きます。

 

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. ミニダンジョン(完)