こちらでは、スクラッチで暗闇モードの迷路ゲームの作り方を紹介しています。
今回、プログラミングする迷路ゲームはこちらです。
こちらは、「【Scratch(スクラッチ)】迷路ゲームの作り方③センサー機能」の作品を改良して、迷路の壁に触れるとスタート地点に戻る迷路ゲームにしていきます。
迷路ゲームの改良手順
迷路の壁に触れるとスタート地点に戻るプログラムはとても簡単なので、以下のように他の機能も追加して迷路ゲームを改良していきます。
- スタート地点に戻るプログラミング
- 壁の当たり判定処理の差し替え
- 壁に触れたときの効果音をプログラミング
- ブロック定義でまとめる
- 迷路ゲームのBGMを鳴らすプログラミング
- ゴールを演出するプログラミング
- BGMを止めるプログラミング
スタート地点に戻るプログラミング
スタート地点に戻るプログラムを作る前に、まずスタート地点の座標を確認しましょう。
スタート地点の座標は、こちらのプログラム(スクリプト)の「x座標を〇、y座標を〇にする」ブロックを使って初期設定していました。
こちらを確認するとスタート地点の座標は「x座標:-29」「y座標:149」となります。
「x座標を〇、y座標を〇にする」ブロックに、スタート地点の座標を設定したら、スタート地点に戻るプログラムの完成です。
壁の当たり判定処理の差し替え
スタート地点に戻るプログラムが完成したら、壁の当たり判定処理の差し替えを行っていきます。
壁の当たり判定処理はどこのブロックで行っていたか覚えていますか
こちらは定義「右移動」ブロックですが、赤枠で囲んだ部分が、壁の当たり判定処理の部分です。
こちらでは、スプライト「猫」のセンサーの色が壁の色に触れたときに、x座標を-10移動させる処理をしています。
こちらのx座標を-10移動させる処理をスタート地点に戻る処理と差し替えます。
差し替えが完了したら、迷路ゲームをプレイしてみましょう。
右矢印キーを押して壁の触れるとスタート地点に戻ったのを確認できるはずです。
ただ、いきなりスタート地点に戻るとなんだか味気ないですよね。
そこで少しゲームらしく効果音を入れていきます。
壁に触れたときの効果音をプログラミング
壁に触れるとスタート地点に戻されるので、壁に触れることは失敗したということです。
そこで失敗したような効果音を追加していきます。
スプライト「猫」の「音」タブから「音を選ぶ」をクリックします。
「音を選ぶ」画面が表示されたら、「効果」をクリックすると、「効果音」だけの音が表示されます。
今回は、その中の「Pew」を選択しましょう。
「Pew」をクリックすると、音リストに「Pew」が追加されました。
追加した音を鳴らすには、「終わるまで〇の音を鳴らす」「〇の音を鳴らす」の2つのブロックがあります。
どちらのブロックを使えばいいでしょうか?
2つのブロックの特徴を考えて、プログラムに支障がでないのか、どちらでも問題ないか考えてみましょう。
・
・
・
・
・
・
・
・
・
答えは出ましたか?
分からない時は、どちらも試してみてどのように処理されるか確認しましょう。
まずは、「終わるまで〇の音を鳴らす」ブロックを確認してみます。
「終わるまで〇の音を鳴らす」ブロックを壁の当たり判定処理の中に入れて、迷路ゲームをプレイしてみてください。
「終わるまで〇の音を鳴らす」ブロックでは、スタート地点に戻ると一瞬、コスチューム「センサー」が確認できます。
これは、「終わるまで〇の音を鳴らす」ブロックが、音を鳴らし終わらないと次の処理に進めないためです。
壁の当たり判定の前には、「コスチュームを〇にする」ブロックで必ずコスチューム「センサー」にしてからチェックをしています。
壁の当たり判定後に、別のコスチュームに切り替えていますが、「終わるまで〇の音を鳴らす」ブロックを使っているため、音が鳴らし終わるまでコスチュームが切り替わりません。
次に「〇の音を鳴らす」ブロックを確認してみましょう。
「〇の音を鳴らす」ブロックを壁の当たり判定処理の中に「〇の音を鳴らす」ブロックを追加して、迷路ゲームをプレイしてみてください。
すると、コスチューム「センサー」が表示されなくなりました。
「〇の音を鳴らす」ブロックは、音を鳴らし始めるとすぐに次の処理に移動するため、コスチュームがすぐに切り替わります。
「終わるまで〇の音を鳴らす」「〇の音を鳴らす」の2つのブロックの特徴は理解できましたか?
どちらを利用すればよいかもう分かりましたよね。
定義「右移動」ブロックが完成したら、他の定義「左移動」「上移動」「下移動」ブロックにも同じように壁の当たり判定処理の差し替えを行いましょう。
こちらが、差し替えが完了したブロックです。
こちらを見て何か感じませんか?
4つの定義ブロックの中には、まったく同じブロックがあります。
どの部分でしょうか?
考えてみましょう。
・
・
・
・
・
・
・
・
・
正解は、こちらのプログラムです。
こちらは壁の当たり判定の処理とコスチュームの切り替え処理が組み合わさったプログラムです。
このように同じ処理の場合、まとめてスッキリする方法がありましよね?
それは、ブロック定義を使うことです。
ブロック定義を使うと、プログラムがスッキリします。
ブロック定義でまとめる
まずは「ブロック定義」の「ブロックを作る」をクリックします。
今回は、2つの処理をひとまとめにした定義ブロックにしますので、ブロック名を「壁判定と歩く動作」にして、「OK」をクリックします。
そして、定義「壁判定と歩く動作」のハットブロックに、壁判定と歩く動作のブロックを移動させます。(Scratchのブロックの種類と役割について)
どのブロック群が何の処理なのか分かりやすいようにコメントをつけておきましょう。
コメントの付け方については、「スクラッチでのコメントの付け方や削除する方法」で詳しく解説しています。
そして、定義「壁判定と歩く動作」のスタックブロックをそれぞれのブロックと差し替えます。
これで、プログラムがスッキリしました。
壁判定のブロックと歩く歩く動作のブロックを分けたい場合は、こちらのように分けても大丈夫です。
プログラムが完成したら、、迷路ゲームを最後までプレイしてみてください。
結構難しくないですか?
壁に当たらないようちょっとずつ移動する必要があるので、大変です。
少し難しいと感じた人は、移動量を小さくしてみましょう。
現在の設定ではx座標・y座標ともに「10」ずつ移動しています。
移動量をこちらのように「5」に調整すると、少し楽に移動できるようになります。
移動量でも迷路ゲームの難易度を調整できますので、好きな量にしましょう。
迷路ゲームのBGMを鳴らすプログラミング
ここからは、迷路ゲームをよりゲームらしくしていきます。
まず、迷路ゲームが始まったら、BGMを鳴らすようにしてみましょう。
スプライトやステージから音を鳴らすことができますが、今回はステージからBGMを鳴らします。
ステージの「音」タブから「音を選ぶ」をクリックします。
「音を選ぶ」画面が表示されたら、「ループ」をクリックすると、「ループ」だけの音が表示されます。
スクラッチの「ループ」カテゴリは、BGM用の音で、楽曲をループ再生するために用意されたカテゴリです。
「ループ」カテゴリの楽曲を利用すると、連続再生をしても切れ目のない音を出すことができます。
今回は、その中の「Dance Snare Beat」を選択しましょう。
BGMは、何度も繰り返し再生させるので、「ずっと」ブロックを使います。
そして、音を出すブロックは2つありましたよね?
「終わるまで〇の音を鳴らす」「〇の音を鳴らす」の2つのブロックです。
今度は、どちらのブロックを使えばいいでしょうか?
2つのブロックの特徴は先ほど確認したので、「ずっと」ブロックの中にそれぞれのブロックを入れたら、どのようにBGMが鳴るのか考えてみましょう。
・
・
・
・
・
・
・
・
・
どのようにBGMが鳴るのかイメージができましたか?
それでは、どちらも試してみてどのようにBGMが鳴るのか確認しましょう。
まずは、「終わるまで〇の音を鳴らす」ブロックを確認してみます。
ゲームスタートは、緑の旗が押されたときなので、こちらも同じように「緑の旗が押されたとき」ブロックを使います。
設定したら、実際に迷路ゲームをスタートしてみてください。
どうでしたか?
連続再生をしても切れ目のない音になっていますよね。
それでは、今度は、「〇の音を鳴らす」ブロックに変えて確認してみましょう。
どうでしたか?
連続して「ドドドドドドド」と音が鳴ったと思います。
これは、最初の音が連続してなっているためです。
「〇の音を鳴らす」ブロックでは、音を鳴らすとすぐに次の処理を実行します。
実行するブロックは、「〇の音を鳴らす」ブロックだけなので、何回も「〇の音を鳴らす」ブロックが実行され、「ドドドドドドド」と音が鳴っていたというわけです。
どちらを使うべきか悩んだ時は、どちらも試して確認するようにしましょう。
ただし、確認する前に、しっかり2つのブロックの違いを理解して、どのようにプログラムが動くのかイメージできるようになりましょう。
BGMについては、「終わるまで〇の音を鳴らす」ブロックに差し替えて完了です。
BGMについて詳しく知りたい方は、「スクラッチのBGMを切り替える方法」でまとめていますので、確認しましょう。
ゴールを演出するプログラミング
最後にゴールしたときも音での演出を追加してみます。
スプライト「猫」の「音」タブから「音を選ぶ」をクリックします。
「音を選ぶ」画面が表示されたら、「効果」をクリックして、「Win」を選択しましょう。
そして、定義「ゴール」ブロックのゴールしたときの処理の中にブロックを追加しますが、今回は、ブロックの種類とブロックを入れる位置の4つのパターンがあります。
それぞれどのように処理されるでしょうか?
考えてみましょう。
・
・
・
・
・
・
・
・
・
まず、パターン①は、「ゴール!」と2秒言ったら、「Win」の音が鳴らずに、すぐにプログラムが終了してしまいました。
これは、「Win」の音を鳴らした瞬間に、「すべてを止める」ブロックが実行されたためです。
パターン②は、「ゴール!」と2秒言ったら、「Win」の音が最後まで鳴りました。
ただ、「ゴール!」の言葉と「Win」の音が別々になるため、変な感じになります。
パターン③は、「Win」の音と「ゴール!」が同時に処理されたような感じになります。
最後のパターン④は、「Win」の音が最後まで鳴ったら、「ゴール!」と2秒言いました。
どれが一番しっくりきましたか?
個人的にはパターン③が一番自然なゴールを演出できたかなと思います。
演出はどれが正解というわけではありません。
自分で好きなように演出してみましょう。
BGMの音を止めるプログラミング
もう一つ演出を加えるなら、ゴールしたときに、BGMの音が「Win」の音と重なっていましたので、しっかりゴールとわかるようにBGMの音を止めたいと思います。
「Win」の音が鳴るときに、BGMの音を止めるには、どのようにプログラミングすればよいでしょうか?
考えてみましょう。
・
・
・
・
・
・
・
・
・
プログラミングできましたか?
これは、結構苦戦した子も多いのではないでしょうか?
ヒントは、BGMを止めるのではなく、BGMの音を小さくする方法もあります。
BGMの音を調整する方法で、どのようにプログラミングすればよいか、考えてみましょう。
・
・
・
・
・
・
・
・
・
プログラミングできましたか?
失敗例も含めてBGMの音を止めるプログラミングを以下の3つで考えてみます。
- 「すべての音を止める」ブロックを使う
- 変数と「◇まで繰り返す」ブロックを使う
- 「音量を〇にする」ブロックを使う
「すべての音を止める」ブロックを使う
まずは、「すべての音を止める」ブロックを使う方法です。
定義「ゴール」ブロックはスプライト「猫」のプログラムで、GBMはステージのプログラムです。
ステージのプログラムにゴールした時の条件を付け足すには、メッセージを利用しましょう。
つまり、定義「ゴール」ブロックのプログラム内で、メッセージを送り、ステージのプログラムでメッセージを受け取るということです。
まずは、新しいメッセージを作成します。
「メッセージ〇を送る」ブロックか「メッセージ〇を送って待つ」ブロックで、〇をクリックすると、「新しいメッセージ」という項目が出てきますので、そちらをクリックします。
「新しいメッセージ」画面が現れたら、新しいメッセージ名に「クリア」と入力して「OK」をクリックします。
新しいメッセージ「クリア」を作成したら、定義「ゴール」ブロックに、「メッセージ〇を送る」ブロックか「メッセージ〇を送って待つ」ブロックをくっつけます。
そして、ステージのプログラムでは、「メッセージ▢受け取ったとき」ブロックで「クリア」を選択します。
ここで、BGMの音を小さくする方法の前に、「すべての音を止める」ブロックを使って、動作を確認してみます。
おそらく、「すべての音を止める」ブロックを使って試した人も多いのではないでしょうか?
こちらでプログラムを実行しても、BGMは止まることがありません。
なぜならば、メッセージ「クリア」を受け取って、「すべての音を止める」ブロックで音を止めたとしても、こちらのずっと処理が動いているため、すぐにBGMが流れます。
そのため、すべての音を止めることができません。
また、こちらでは深く触れませんでしたが、「メッセージ〇を送る」ブロックと「メッセージ〇を送って待つ」ブロックでどのように違ってくるのかも確認しましょう。
結果だけ先に教えると、どちらも処理に大きな違いはありません。
変数と「◇まで繰り返す」ブロックを使う
次に変数と「◇まで繰り返す」ブロックを使う方法です。
ゴールしたかどうかを判断するために、以下のように変数を値チェックします。
- 変数「ゴール判定」が「0」ならゴールしていない
- 変数「ゴール判定」が「1」ならゴールした
このようにプログラミングにおいて、条件の判定を示す変数は、フラグ変数と呼ばれます。
まずは、変数「ゴール判定」を作成しましょう。
「変数を作る」をクリックします。
「新しい変数」画面が現れたら、新しい変数名に「ゴール判定」と入力して、「OK」をクリックします。
変数「ゴール判定」を作成したら、定義「ゴール」ブロックに、「変数を〇にする」ブロックを入れて「1」を設定します。
そして、ステージのプログラムでは、「◇まで繰り返す」ブロックを使って、変数「ゴール判定」が「1」になるまで繰り返します。
つまり、ゴールしたら変数「ゴール判定」が「1」になるので、それまでBGMを鳴らし続けるということです。
こちらでプログラムを実行すると、タイミングが合えば、BGMが止まり、クリアの音を鳴らすことができますが、ほとんどの場合は、クリアしてもBGMは鳴っている状態です。
これも失敗例の1つです。
「音量を〇にする」ブロックを使う
最後に音量を「音量を〇にする」ブロックを使う方法です。
こちらは、「すべての音を止める」ブロックを使った方法と同じでメッセージ「クリア」を使っていきます。
メッセージ「クリア」を受け取った時に、「音量を〇にする」ブロックを「0」に設定しましょう。
こちらのプログラムを実行すると、BGMの音だけが消えて、クリアの音が出るようになりました。
なぜBGMの音だけが消えたかと言うと、スクラッチの仕様によるものです。
音量の設定は、スプライト・ステージ毎に独立しています。
試しに、ステージの「音量」ブロックのチェックボックスにチェックを付けてみましょう。
するとステージ上に「Stage:音量0」と表示されます。
他のスプライトの「音量」ブロックのチェックボックスにもチェックを付けるとこのようになります。
Stageだけが音量0で、それ以外のスプライトは100となっていますよね。
このように音量は独立していますので、ステージの音量だけを0にして消したということです。
ただし、このまま再度迷路ゲームをスタートさせると、ステージの音量が「0」のままで聞こえません。
そこで、初期設定として「100」に設定しておきましょう。
これで、壁にぶつかったらスタート地点に戻るプログラムが完成しました。
これで難易度が少し上がりましたが、ステージが1つのため、一度クリアすると迷路ゲームが終了します。
そこで、次回は、新しいステージを増やしていきます。