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

 

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

私は、プログラミングに興味がある人には「ゲームプログラミング」を課題にした学習を勧めています。
その理由は「ゲームを作る」という課題が非常に優れているからです。
主な利点としては、以下のような点が挙げられます。

・1本の完結したプログラムを課題にできる
・アレンジ(カスタマイズ)がしやすい

ゲームは、タイトル画面から始まり、ゲームプレイを経て、ゲームオーバーまでを作ることで一通り完結します。
リトライ機能などを追加する場合は、全体の設計を理解したうえで作る必要があるため、より深い学習にもつながります。

また、小さなアレンジから大幅な改造まで、自由に行えるのも魅力です。
たとえば、キャラクターの色を変えるだけでも十分な学習になりますし、アイテムや敵を増やすといった工夫も学びにつながります。
こうした経験を通して、「自分で新しいゲームを作ってみようかな」と考えるきっかけにもなるでしょう。

 

コインを表示しよう

これから、タイルマップの絵をスプライトに差し替える方法について説明します。
基本的には、タイルマップに使われている絵をそのまま利用しても問題ありません。
しかし、「絵をアニメーションさせたい」「絵のサイズに合わせた当たり判定を行いたい」といった場合には、スプライトへの差し替えが必要になります。

前回紹介した「プレイヤーの初期配置の絵を消す方法」を使って、タイルマップ上の絵をスプライトに置き換えてみましょう。
今回は、オレンジ色の玉をコインのスプライトに差し替えてみます。

下図のようにループをコピーしてください。
そして、絵をオレンジ色の玉に変更しましょう。

赤玉の数のループを作る

 

ループの中に空のタイルと差し替える処理が入っているため、
実行するとオレンジ色の玉が消えます。

と赤い玉が消える

 

もう簡単ですね。
コインのスプライトを追加してください。

コインのスプライトを追加する

 

変数名を coin に変更しましょう。

「別に変えなくても動くじゃん」と思うかもしれませんが、それでは将来的にプログラミングでつまずく原因になります。
変数名は「何のためのデータか」を明確に伝える大切な情報です。わかりやすい名前を付ける習慣を、今のうちから身につけておきましょう。

変数名をcoinに変更する

 

タイプも変更します。
Player タイプのメニューを開いて 新しいkindを追加 をクリックします。

新しいkindを追加する

 

coin という新しいタイプを作ります。

タイプcoinを作成する

 

変数名を coin 、タイプを coin に変更しました。
ちなみに、タイプ coin は当たり判定のとき使います。

変数名とタイプをcoinにする

 

コインをオレンジ色の玉のあった場所に配置する必要があります。
シーン から mySpriteをタイルマップ内の 0 行 0 列目の上に配置 を持ってきます。

mySpriteをタイルマップ列0行0の上に配置を使う

 

coin の上に配置 」に変更します。

coinを値の上に配置にする

 

実行してコインが表示されることを確認します。

実行してコインの表示を確認する

 

コインの当たり判定を入れよう

プレイヤーがコインを取得できるようにします。

スプライト から当たり判定を持ってきます。
otherSprite を coin タイプに変更します。

スプライトの当たり判定を用意する

 

取得したコインを消す処理を作ります。
スプライト から mySpriteを破棄する を持ってきます。
削除対象を otherSprite に変更して、スプレーの演出も入れましょう。
情報 から スコアを 1 だけ増やす も追加します。

ゲットしたコインを消す

 

テストしましょう。
コインを取得してスコアが入ることを確認します。

コインがゲットできることを確認する

 

これだけではさびしいので、コインが上に移動する演出を入れます。
スプライト から mySpriteの x を 0 にする を持ってきます。

mySpriteのXを0にするを使う

 

otherSpritevy(y方向の速度)-50 に変更します。

コインのvyを-50にする

 

これで取得したコインは消えるまで上に移動するようになりました。
実行して確認しましょう。

 

マップを切り替えよう

マップをいくつも使うってことは、当然、マップを切り替える必要がありますよね。
条件判断ブロックを使っても切り替えはできますが、今回は 配列(はいれつ) という便利なしくみを使ってみましょう。

配列は、「データの入れ物」をまとめて管理できるものです。
今回の場合は、マップをいくつか用意して、それを配列に入れて切り替えていきます。
ちなみに、配列はゲームだけじゃなく、いろんなプログラムで使われる大事な道具です。

配列高度なブロック の中にあります。
配列 を開いて下図のブロックを持ってきます。

配列を使う

 

切り替えはマップ処理の前に変更したいので下図の所に入れます。

マップ処理の前に配列を入れる

 

ここで処理の順番を変えたいと思います。
カメラでスプライトmySpriteを追う はマップ内容に関係なくいつでも実行するものなので、マップ切り替えの前に持ってきます。

一度、カメラでスプライトmySpriteを追う 以下の処理を 最初だけ から外します。

抜け道とスプライト配置

 

カメラでスプライトmySpriteを追う だけ残し、あとは元に戻します。

追いかけカメラ以外を戻す

 

カメラでスプライトmySpriteを追う を配列変更の前に入れます。

追いかけカメラを戻す

 

1つ目のマップを配列の 0 番目の中に入れます。
ブロック内の色の濃い部分は外せます。これを配列の中に移動します。
配列は 0 からカウントします。注意しましょう。

タイルマップのデータを配列に入れる

 

2つ目のマップを作成しよう

2つ目のマップを作成します。

シーン から タイルマップ◻︎ を持ってきます。

tilemapを使う

 

注意ポイント!
「エディタ上にあるタイルマップ◻︎ をコピーすればいいんじゃない?」と思った人、ちょっと待ってください。

実は、タイルマップ◻︎ はコピーしても、マップの入れ物が2つになる訳ではありません。 どうなるかというと、2つのマップが同じデータを見ている状態になります。

つまり、1つ目のマップを編集すると、もう1つのマップにも同じ変更が反映されちゃうんです。 それを知らずに作業すると、あとで「あれ?なんでこっちも変わってるの?」ってハマることになりますよ。

 

持ってきた タイルマップ◻︎ を配列の 1 番目(右側)に入れます。
それをクリックしてエディタを開きます。

tilemapを配列1番目に入れる

 

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

マップサイズを10x12にする

 

下図を参考に草で壁を描きましょう。

壁を描く

 

絵を Dungeon に切り替えて3つの絵を追加します。
これらは「プレイヤーの初期位置」「壁を消すスイッチ」「脱出の階段」になります。

3つの絵を追加する

 

絵を Miscellaneous に切り替えて岩を追加します。
この岩をスイッチで消すことになります。

岩を描く

 

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

壁と岩に当たり判定を入れる

 

これで2つ目のマップは完成です。

 

配列の名前を作ろう

変数名を「配列」という名前のままではよくありません。
メニューを出して 変数を作成する をクリックします。

変数を作成する

 

変数名 map にしましょう。

変数名mapを作る

 

続きます。

 

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