プログラミング 中部大学2025年春期

Scratch でシューティングゲーム

シューティングゲームの構成

自機の動作

ミサイルの動作

敵の動作

ゲームの実装

自機

  1. 適当なスプライトをつくる。
  2. 「ずっと」(制御 黄土色)のループでキーボードを監視する。
  3. 左右の移動は「X (Y) 座標を〇ずつ変える」(動き 青)で行うと、自機の姿勢が変わらない。 自機の姿勢を変えたいときには「〇度に向ける」と「〇歩動かす」を使ってもよい。
  4. スペースキーが押されたあと、メッセージを送る。 メッセージはイベントとして、他のスプライトのスクリプトを開始することができる。 ここではStartを送って、敵の動作を開始する。

クローンを作って増やす。メッセージを使って二つのスクリプト(動きと当たり判定)を並列して動作させる。

  1. 適当なスプライトをつくる。
  2. 本体はゲーム中は隠れているので、「表示する」(見た目 青紫)で表示させる。
  3. X座標をずらしながら、クローンをつくる。 続いてY座標をずらして、これを繰り返すことで格子状にクローンを配置することができる。 クローンを配置したあとで、本体は隠れる。
  4. Startメッセージを受け取って動き出す。
  5. Startメッセージを受け取って、当たり判定を動かす。 判定は「ずっと」ループでくくって、監視状態にしておく。 もしくは「~まで待つ」でもよい。

ミサイル

スペースキーが押されたときにクローンを作る。

  1. 適当なスプライトをつくる。
  2. 本体は隠れたまま、スペースキーを監視する。スペースキーが押されたときに、クローンを作る。
  3. 「クローンされたとき」(イベント 茶色)に自機の場所に移動して、姿を現す。 その後移動する。

シューティングゲームの拡張

ここまでのプログラムで一応シューティングゲームとして成立しているが、さらにつくりこんで完成度を上げていく。

BGM

BGMはどのスプライトのスクリプトにいれてもよいが、ここではステージに設定する。

  1. ステージ(スプライト一覧の左)を選択し、音を登録する。
  2. game start (startから名前を変更した)を受け取ったときに音を再生する。 変数enemiesは敵の残り数を表し、これが0になったときに終了する。
  3. ボスの登場(メッセージBoss)とともに違う音を鳴らす。

敵の残りを数える

  1. 変数 enemies をつくる。敵の数を入れる。
  2. クローンするたびにenemiesを1ずつ増やす。クローンが消えるときに1ずつ減らす。

ボスの追加

複雑な動きをしつつ、弾幕を放つボスをつくる。

  1. 適当なスプライトをつくる。
  2. 「game start を受け取ったとき」に続いて、enemiesが0になるまで待つ。
  3. ボスの動き(boss vxとboss vy)、位置(XY座標)、タイマーを初期化する。 変数はスクリプト中で変更され、値が継続する。 初期化を忘れないようにする。
  4. ミサイルとのあたり判定を「ずっと」にいれる。 当たったとき、コスチュームを変え、ボスの体力を減らす。 ミサイルが消えるまで連続してあたり判定にならないために「待つ」を入れる。
  5. 弾幕を放つのを2秒ごとにする。 タイマーで時間を測りながら、2秒を超えたときに行う。 =を使った条件にすると、ちょうどでないときがあるので飛ばされることがあるので注意する。 タイマーはプログラム全体で一つしか使えない。
  6. ボスを8の字に動かす。 XとY軸の方向に単振動させるために速度を中心からの距離に関連付ける。 自分が動かしたいようにプログラムすることが大事。

弾幕

  1. 適当なスプライトをつくる。ここでは白色の丸を用意した。
  2. 「fire を受け取ったとき」に続いて、クローンを弧上に配置する。 配置するときにボスから放射状に移動するために、向きを外側に向ける。 変数bは繰り返しの回数を数えるために使用する。こういう変数をカウンター(counter)と呼ぶ。
  3. クローンされると同時に画面外まで移動させる。 予め向きを決められているので、〇歩動かすだけでよい。

敵にあたったミサイルの消滅

ミサイルが消えないと貫通弾になっていて、ゲームが簡単になっている。 敵と触れたときに消えればよいが、そのとき敵側の当たり判定が起きないことがある。 そのためクローンを削除する前に少し時間をとる。

  1. ミサイルのスプライトのスクリプトを増やす。
  2. ボスが増えたので、当たり判定を「〇または〇」にする。
  3. コスチューム2に爆発の絵を追加する。クローンを消す前にコスチュームを変更する。
  4. ゲームオーバーのとき、自機の上で爆発する。
  5. コスチュームの変更をしたとき、初期化のブロックを適当なところにいれておく。

ゲームクリア、ゲームオーバーの演出

  1. 自機のスプライトのスクリプトを増やす。
  2. 「game start を受け取ったとき」、ボスの攻撃を監視する。 当たったとき、「game over を送る」
  3. 「game over を受け取ったとき」自機を隠す。 次のゲームが始まったとき(緑の旗がクリックされたとき)、「表示する」の初期化も追加する。
  4. 「game clear を受け取ったとき」、画面上部に飛んで行って終わる。

完成したScratchのプロジェクトファイル

課題

上記資料の「ゲームを実装」までを手本として独自のシューティングゲームを作成せよ。 そしてそれに「シューティングゲームの拡張」を参考にして何か追加要素を加えよ(例えば音楽をつけるとか、点数をつけるとか)。 追加要素は例としてあげたものばかりでなく、敵の動きを複雑にするとか、ステージを変更するとかでもよい。

完成した作品の独自性がよくわかる場面をスクリーンショットに撮り、提出せよ。