今回作る作品は、こちらのシューティングゲームです。
このゲームには、ゲームオーバーもスコアもありませんが、弾を発射して敵を攻撃する、敵の弾があたるなどシューティングゲームに必要な機能は入っています。
まずは、このゲームと同じものを作ってみて、そこからオリジナルのゲームにしていきましょう。
どんなゲームになるかな?
最初にどんなゲームを作るか、おおよその流れやルールをまとめておきます。これがプログラミングの下書きになります。
- プレイヤーキャラを操作して敵キャラクターと戦う。
- プレイヤーキャラは画面の下側で左右にだけ移動できるようにして、発射ボタンを押すと弾がでる。
- 敵にあたると敵キャラの色が変わる。
- 敵キャラは画面の上側でランダムに移動して弾を発射する。
- 弾がプレイヤーキャラに当たるとプレイヤーキャラの色が変わる。
プログラムを分けて考えよう
プログラムの下書きができたら、これをさらに小さなプログラムの処理に分けて考えます。
プレイヤーキャラの処理
- プレイヤーキャラを操作する
- 矢印キーの右と左で移動する
- スペースキーで弾を撃つ
- 自分の弾を発射する
- スペースキーが押されたら、弾を表示して下から上に移動させる。
- 当たらずに画面の端まで行くと消える。
- 弾が敵に当たったかどうかを調べる
- 弾が当たった当たったらあたったことを知らせる表示をする(色変える、キャラクターを消す、爆発させる)
敵キャラの処理
- 敵キャラクターを動かす
- ランダムに動かす
- ランダムに弾を発射する
- 敵の弾を発射する
- ランダムなタイミングで弾を表示して上から下に移動させる。
- 当たらずに画面の端まで行くと消える。
- 弾が自分に当たったかどうかを調べる
- 弾が当たった当たったらあたったことを知らせる表示をする(色変える、キャラクターを消す、爆発させる)
プログラミングのヒント
弾を動かす
画面上のスプライトの場所は横方向の位置を決めるX座標と横方向の位置を決めるY座標があります。 このX座標とY座標の数値を変えるとスプライトの場所が変わることを利用してプログラムを作ります。 X座標の数字を小さくすると左へ大きくすると右へ移動します。同じくY座標の数字を小さくすると下へ大きくすると上へ移動します。 こちらのプログラムは弾を下から上に動かすプログラムです。
当たったかどうかを調べる
弾が敵キャラ(もしくは自分)に当たるということは、スプライトがスプライトに触れるということです。 Scratchには他のスプライトに触れたかどうかを調べるブロックがありますので、これを使います。 こちらのプログラムは自分の弾が敵(のスプライト)に当たったかどうかを判定して、当たった場合はメッセージを送って処理を行っています。
プレイヤーキャラを動かす
プレイヤーキャラを動かす場合もX座標Y座標が使えますが、ここではもうひとつの動かし方を試しましょう。 「○歩動かす」ブロックを使ってもプレイヤーキャラを動かすことができます。このブロックを使った場合、キャラクターの向きによってどちらへ動くかが変わりますので、動かす前に向きを決めておきます。
「○度に向ける」の数字の部分をクリックすると下の図のように矢印が表示されますので、どちらに向けたいかを矢印で示すとそれに応じた数字が表示されます。
敵キャラを動かす
自分で操作して動かすプレイヤーキャラと違って敵キャラはコンピュータが動かさなければなりません。コンピュータが動かすといっても、コンピュータが勝手に動かしてくれるわけではなく、コンピュータが動かすためのプログラムを人間が作らなければならないのです。
敵キャラの動かし方はアイデアの出しどころですが、ここではScratchに用意された便利なブロック「◯秒でX座標を◯にY座標を◯に変える」を使ってみます。
このブロックは文字通り指定した時間で指定した場所(X座標、Y座標)にスプライトを移動させる機能があります。このブロックに「◯から◯までの乱数」ブロックを組み合わせることで敵キャラをランダムに動かせます。
ここではX座標を-240から240に、Y座標を0から180までの乱数で決めています。このようにすることでどんな動きになるか、実際にプログラムを動かして試してみましょう。
このあとどうする?
ここまでは基本的な動作でした、シューティングゲームとしてさらに面白くしたり、難しくしたり、あるいはもっと簡単にするにはどんな工夫ができるか考えてみましょう。
プログラムのアレンジ例
- HP(ヒットポイント)を作ってゼロになったらゲームオーバーにする
- スコアをつける
- 制限時間をつける
- 弾があたった時の表現を変えてみる、音をつけてみる