前回作成した「背景が縦スクロールするプログラム」に自スプライトと敵スプライトのプログラムを追加して、シューティングゲームを作成していきます。
今回のシューティングゲームの内容は、背景が縦にスクロールするステージで、自機スプライト(Rocketship)を動かしながら、複数の敵スプライトを攻撃して、10機に当てたらたらゲームクリアになります。
また、攻撃してはいけないスプライト(Sun)に攻撃弾を当ててしまったら、ゲームオーバーになります。
シューティングゲームに必要な、沢山の攻撃弾を出現させる方法として、クローン機能を使いプログラムを作成していきます。
クローンブロックを使ってみよう
スクラッチでのクローンとは、スプライトのコピーを作ることができる機能です。クローンブロックを使うことによって、同じコスチュームやプログラムを持つスプライトを複数出現させることが可能です。
クローンブロックの使い方には2種類あります。1つはクローンするスプライト自身のプログラムの中で自身のクローンを作成する方法です。
例えば、シューティングゲームで自動で弾が落ちてくるような処理にはこの方法がよいでしょう。
2つめは他のスプライトのプログラムで、クローンするスプライトのクローンを作成する方法です。
今回のシューティングゲームではこの処理を使います。
自機スプライト(Rocketship)のプログラムで「スペースキーが押されたら、攻撃弾(Ball)のクローンを作成する」処理を入れます。
それでは、プログラムを作成してみましょう!
自機スプライト(Rocketship)のプログラムを作ろう
自機スプライトのプログラムでは5つの処理を行う必要があります。
1つは背景を縦スクロールさせる処理です。前回作成したので、それを使用します。
それでは残りの4つの処理を追加していきましょう!
自機スプライトを上下左右に動かそう
自機スプライトをキーボードの上下左右の矢印キーを押した時にと動くようにプログラミングします。
上下の移動は「y座標」の値を変化させ、左右の移動は「x座標」の値を変化させます。
攻撃弾(Ball)を発射させよう
攻撃弾はスペースキーが押された時に発射させるようにプログラミングします。
➀プログラムがスタートした後、➀-1から3の処理は繰り返します。
➀-1条件分岐のブロックの条件に【スペースキーが押されたら】を入れます。
➀-2クローンを作成するブロック【Ballのクローンを作る】を入れ、Ballスプライトのクローンを作ります。
➀-3【0.2秒待つ】を入れ、攻撃弾が出現するタイミングを設定します。もっと、出現するタイミングを短くしたい場合は待つ秒数を小さくします。
ゲームクリアのプログラムを作ろう
敵スプライトを設定した数を攻撃できたら、ゲームクリアとして、ゲームを終了させる処理をします。
自機スプライトのプログラムでは、得点の設定とゲームクリアをするタイミングを常にチェックする機能を入れます。
➀ゲームクリアの点数を入力します。サンプルでは「10」にしていますが、ゲームの難しくしたい場合は数を多くするなど、自由に設定してください。
➁プログラムがスタートした後、➁-1から3の処理を繰り返します。
➁-1条件分岐のブロックの条件に【得点<1】を入れます。
攻撃弾スプライト(Ball)のプログラムで、敵スプライトに攻撃弾を当たった時に得点を-1していくので、10体に当てたら「得点」は0より小さくなっていることがあります。
➁-2ゲームクリアのメッセージを表示させます。
➁-3制御ブロックに【すべてを止める】を設定し、プログラムをすべて止める処理をさせます。
ゲームオーバー時のプログラムを作ろう
攻撃弾スプライト(Ball)のプログラムで、攻撃してはいけない敵スプライト(Sun)に攻撃弾が当たった場合にはゲームオーバーのメッセージを送ります。プログラムについては、次の「攻撃弾スプライト(Ball)のプログラム」の所で解説します。
イベントブロック[ストップを受取ったとき]に以下の処理をします。
➀画面にゲームオーバーの表示させます。
➁制御ブロック【すべてを止める】でプログラムをすべて止める処理をさせます。
攻撃弾スプライト(Ball)のプログラムを作ろう
攻撃弾スプライトのプログラムでは、ゲームスタート時の処理とクローンされた時の処理をプログラミングします。
ゲームスタート時のプログラムを作ろう
➀ゲームスタート時には表示されないようにします。
➁大きさを調整します。サンプルでは「30」ですが、自由に設定してください。
クローンされた時のプログラムを作ろう
イベントブロック【クローンされたとき】に➀➁➂の処理をします。
➀クローンする命令を出したスプライト(Rocketship)スプライトに移動させます。
➁Ballスプライトを表示させます。
➂➂-1~6の処理を繰り返します。
➂-1ballスプライトの位置は発射されてから、上方向に移動させます。
y座標の値を変化させていきます。サンプルでは「10」ずつ変化させていますが、スピードを速くしたい場合は数値を大きくするなど、自由に設定してください。
➂-2Robotスプライトに触れた時の処理です。
・音を鳴らす
・変数「得点」を-1ずつ変える
・「メッセージ1」を送る
・クローンを削除する
➂-3、➂-4は➂-2と同じプログラムになります。
➂-5敵スプライトに当たらず、端に触れたら、クローンを削除します。
➂-6Sunスプライトに触れた時の処理です。ゲームオーバーになるため、終了処理をします。
・音を鳴らす
・メッセージ[ストップ]を送る
・クローンを削除する
敵スプライトのプログラムを作ろう
敵スプライトのRobotとLightningは上から下に移動、Picoは斜めに移動させます。
Sunは移動はさせず、ランダムな位置と時間に出現させます。
RobotとLightningのプログラム
スタート時のプログラム
➀スタート時に以前のゲーム時のスプライトが残っていることがあるので、隠します。
➁サイズをRobotとLightning、それぞれ決定します。
➂出現する位置を決めます。y座標は固定で、x座標は演算ブロックの乱数を使いランダムに出現させます。
➃敵スプライトが一度に出現しないように待つブロックで調整します。
➄表示させます。
➅➅-1~6の処理を繰り返します。
➅-1y座標の数値を一定の値ごとに小さくしていくことで、上から下に移動してきます。スピードを速くしたい場合はマイナスの数値を大きくします。
➅-2攻撃弾(Ball)に当たらず、端に触れた時の処理をします。
・スプライトを隠します。
・出現する位置を決めます。y座標は固定で、x座標は演算ブロックの乱数を使いランダムな位置に出現させます。
・敵スプライトが一度に出現しないように待つブロックで出現時間を調整します。
・スプライトを表示させます。
攻撃弾スプライト(Ball)からのメッセージを受け取った時のプログラム
➀攻撃弾が当たった時に送られてくるメッセージなので、スプライトを隠します。
➁出現する位置を決めます。y座標は固定で、x座標は演算ブロックの乱数を使いランダムな位置から出現させます。
➂出現するまでの待ち時間を演算ブロックの乱数を使うことにより、ランダムに出現させます。
➃スプライトを表示させます。
ストップのメッセージを受け取った時のプログラム
➄ゲームクリア時、ゲームオーバー時にストップのメッセージを受け取った時はストライプを隠します。
Picoのプログラム
RobotとLightningスプライトとほとんど同じプログラムなので、違う箇所だけ説明します。
➀コスチュームを「Pico-d」に変更します。
➁Picoは斜めに移動させるため、x座標、y座標共に値を変化させます。
Sunのプログラム
Sunスプライトは出現後は移動はせず、ランダムな位置とタイミングで出現させます。
スタート時のプログラム
➀スタート時に以前のゲーム時のスプライトが残っていることがあるので、隠します。
➁サイズを60%にします。
➂ゲームスタートから3秒後から出現するように待ちます。
➃➃-1~5の処理を繰り返します。
➃-1出現する位置を決めます。y座標、x座標共に演算ブロックの乱数を使いランダムに出現させます。
➃-2スプライトを表示させます。
➃-3表示させる時間を乱数で決め、待ちます。
➃-4スプライトを隠します。
➃-5次に表示させる時間を乱数で決め、待ちます。
ストップのメッセージを受け取った時のプログラム
➄ゲームオーバー時にストップのメッセージを受け取った時はサイズを120%にします。
まとめ
シューティングゲームは完成しましたか?
今回はクローンブロックを使って、攻撃弾を発射するプログラムを作成しました。
スプライトをクローンすることによって、同じ動きをするゲームキャラクターが簡単にできます。
他にも、沢山の障害物を作成する、上から攻撃弾を降らせるなど、よりゲームを面白く複雑にすることができますね。
今回のプロジェクトへのリンクはこちらです。
参考にして、楽しいシューティングゲームを完成させましょう。
プログラミング教室なら親のサポートは不要。また、オンライン対応の教室なら送迎もいらないので負担は少なくなります。
無料体験学習を開催する教室もあるので、気なる方は是非チェックしてみてくださいね。
コメント