ミニダンジョンを作ろう(完)

 

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

これで、ミニダンジョン講座は終了です。
全部で5ページにわたって説明してきましたが、実はまだまだ話したいことがたくさんあります。

でも、「どうやって実現するか」を自分で考えることも、プログラミングの大きな楽しさのひとつです。
いろんな工夫をこらして、ぜひおもしろいダンジョンを作ってみてくださいね。

 

残ったスプライトを消そう

ここで1つバグを潰します。(不具合を修正します)

1面目のコインをできるだけ残して2面目に行ってみてください。
下図のようにコインが残り表示されます。

残ったコインが次の面で表示されるバグ

 

これはマップを切り替えたとき、タイルマップの描き替えはしたけれど、表示していたスプライトは放置していたために発生したバグです。

スプライト から Player タイプのすべてのスプライトを破棄する を持ってきます。
これは指定したスプライトをすべて削除する命令です。

destroy all sprite of kind playerを使う

 

関数 マップのセット の中に入れて、スプライトを coin に変更します。

マップのセットの初めにcoinを消す

 

1面目で残したコインが2面目で消えているか確認しましょう。

 

4つ目のマップを作ろう

4つ目のマップを作ります。
ここでは敵を配置して動かしてみたいと思います。

4つ目の枠を作り(記号をクリック)、タイルマップ編集エディタを開きます。
この手順が分からないときは3つ目のマップを作ろうを参照しましょう。

4つ目のタイプマップエディタを開く

 

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

マップサイズを10x16に変更

 

壁・プレイヤーの初期配置・脱出階段を描きましょう。
箱の絵も5つ配置します。これが敵の配置場所になります。

壁などの配置を描く

 

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

壁に当たり判定を入れる

 

実行してマップを確認しましょう。
マップの横幅が 10 くらいで表示画面のサイズと同じになります。

実行してマップを確認する

 

ところで、どうしてマップのサイズを「壁で囲ったサイズ(横6 × 縦16)」にしなかったのか、わかりますか?
実際にそのサイズで作ってみると、下の図のようにマップ全体が画面の左側に寄ってしまうんです。

マップサイズを大きくした理由

 

今回は、マップを画面の中央に表示したかったので、余白も考えて「横10」のサイズにしました。
マップを作成するときはどのように表示されるかを考えながら作りましょう。

 

敵を配置しよう

今度は、敵を配置する仕組みを作ってみましょう。
コインを配置したときのやり方を、そのまま活用します。

下の図のようにコピーして、関数のいちばん最後に組み込みましょう。

コインの配置処理をコピーする

 

まず、スプライトの絵をヘビに変更します。
ヘビのための変数が必要です。変数 coin をクリックしてメニューを出し 変数を作成する を選びます。

ヘビの絵を選択し変数を作る

 

変数名は snake にします。

変数名snakeを作る

 

検索対象を に、そして
変数名を snake 、タイプを Enemy に変更します。

変数名をsnakeタイプをEnemyにする

 

実行して、ヘビが配置されたかを確認しましょう。

ヘビが配置されたか確認する

 

敵を動かそう

ヘビを左右に動かしたいと思います。

ヘビを配置のループの中に snake の速度を vx 50 vy 50 にする さらに
snake を壁で跳ね返すかどうかを オン に設定する を追加します。
これでヘビは壁で跳ね返ります。

左右に動かし壁で跳ね返るようにする

 

左右のみ動くようにヘビの動きを制限します。(vy を 0
vx 速度は 20 から 50 のランダムに設定します。

左右にのみ動くようにする

 

実行して、ヘビの動きを確認しましょう。

 

敵との当たり判定を入れよう

敵(ヘビ)との当たり判定を入れます。
これはコインの当たり判定をコピーすると簡単に作れます。

当たり判定の対象を Enemy に変更します。
vy 速度変更とスコア処理はいらないので削除します。

敵との当たり判定を作る

 

ライフを -1 だけ増やす を追加します。

ライフを-1変えるを追加

 

ヘビとの当たり判定をテストしましょう。

ヘビとの当たり判定をテストする

 

1面目にも敵を配置しよう

1面目にも敵を配置してみます。
複数のマップで試してみると、敵の配置処理が正常に働いているのか分かります。

1面目のタイプマップエディタを開きます。

1面目のタイプマップエディタを開く

 

下図の場所に箱を配置します。

マップの下部に箱を配置する

 

テストしてみましょう。
問題なくヘビが表示され、左右に動きます。

敵の配置をテストする

 

テストを続けます。2面に進んでください。
おっと、1面目のヘビが表示されています。
これはコインと同じ理由でバグが発生しています。

2面目に1面のヘビが表示される

 

マップのセットですべてのコインを消したように
Enemy タイプのすべてのスプライトを破棄する を追加します。
これでマップ切り替えのとき、画面上にあるすべてのEnemyを削除します。

マップのセットでEnemyの削除

 

完成

これで完成です。
……というより、タイルマップを使うときに知っておくと便利なことをいろいろ紹介しました。

マップをセットする処理で気をつけたいポイントは、「マップ情報だけを使うようにする」ことです。 そうすると、プログラムの中身をいじらなくても、マップをどんどん追加できるようになります。
ただし、今回はその点がうまくできていない部分があります。

それは、「変数 map_no が 2 のときにだけ、コインをランダムに出す処理」です。
こういう条件ではなくて、特定のキャラ(タイル)がマップ上にあるかどうかで判断するようにすれば、もっとスマートでしたね。
ちょうどいい復習にもなるので、ぜひ自分でこの部分を改造してみてください。

最後にすべてのコードを貼っておきます。

最初だけの処理 当たり判定 マップのセット処理 スイッチと脱出

 

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