#029 潜水艦大作戦!魚雷で敵を撃沈せよ

#029 潜水艦大作戦!魚雷で敵を撃沈せよ
ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

潜水艦シューティングゲームをスクラッチで作ろう!左右キーで潜水艦を動かしてスペースキーで魚雷を発射、敵潜水艦を狙い撃ち。クローンで弾を連射する仕組みと、XYランダムで散る爆雷の仕掛けも学べる入門シューティング。

さぁ、スクラッチでナニ作る!?

動画で見てみよう

ok-scratch ok-scratch
チャンネル登録して応援よろしく!チャンネル登録する

チュートリアルの元になった作品

はじめてのスクラッチ #029

はじめてのスクラッチ #029

by ok-scratch
プレイしておこう プレイしておこう
今回のスクラッチを作る参考作品です。爆雷のY方向だけじゃなくてX方向にも乱数を入れてるのがヤバい。普通は真下に一直線で落とすとこだけど、縦横どっちにもランダム要素を仕込むことで毎回まったく違う軌道になって、避けるのが格段にキツくなるんだ。同じシューティングなのに弾のランダム軸を1つ増やすだけでゲームの難易度と緊張感がガラッと変わるのがキレッキレ。この仕掛けどう作ってるか、見ていこう。参考資料:スクラッチプログラミング事例大全集

今回の目標

  • 矢印キーで潜水艦を左右に動かせるようにする
  • スペースキーで魚雷をクローンとして発射する
  • 敵潜水艦がランダムに動いて爆雷を落とす仕組みを作る
  • 魚雷が命中したら得点、爆雷に当たったらゲームオーバーにする

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

#1潜水艦の初期設定

ok-scratch ok-scratch
これまでの回でいろんなテクニックを身につけてきたけど、今回はそれを活かして潜水艦シューティングを作るよ。まずプレイヤーの潜水艦をセットアップしていこう。

準備

スプライト「プレイヤー潜水艦」を開く

プレイヤー潜水艦プレイヤー潜水艦
スプライトについて
プレイヤーが操作する潜水艦。左右キーで移動し、スペースキーで魚雷を発射する
どんな役割か
自分が操作できる潜水艦を作るよ!左右の矢印キーで動かして、スペースキーで魚雷を撃てるようにしよう。爆雷に当たったらゲームオーバーだから気をつけて!

変数「■魚雷命中数」を追加

魚雷が敵潜水艦に命中した回数を記録するグローバル変数

変数「■魚雷命中数」を追加

実装

step-0

イベントgreenflag が押されたときでゲーム開始時に「■魚雷命中数」変数を0にリセットして、大きさを70%に設定。回転方法は「左右のみ」にしておくと、潜水艦が上下逆さまにならず左右だけ向きが変わるようになるんだ。

確認プレビューしておこう 確認プレビューしておこう
旗を押すとプレイヤー潜水艦のサイズが70%になって、スコアの変数もゼロにリセットされる。回転方法もここでセットしてる

#2潜水艦の操作

ok-scratch ok-scratch
潜水艦を矢印キーで左右に動かせるようにしよう。開始位置は画面下の真ん中、x座標0・y座標-130のあたりだね。
step-1

制御ずっとの中でキー入力をチェックし続ける仕組みだよ。右向き矢印キーならx座標を10ずつ増やして向きを90度に、左向き矢印キーなら-10ずつ減らして向きを-90度にする感じ。

さらに爆雷に触れたかの判定もここに仕込んでおくんだ。爆雷はまだ作ってないけど、先に条件だけ準備しておくよ。

確認プレビューしておこう 確認プレビューしておこう
プレイヤー潜水艦が画面下に出てきて、左右の矢印キーで動かせるようになってる。向きもちゃんと押した方向に変わるのがポイントかも

#3ゲームオーバー処理

ok-scratch ok-scratch
爆雷に当たったときの処理を追加するよ。前のステップで作った「爆雷に触れた」条件の中身を埋めていこう。
step-2

見た目( ) と ( ) 秒言うで「沈没…」と1秒間表示したあと、制御 の「すべてを止める」でゲーム全体をストップ。これでゲームオーバーの流れが完成。

#4魚雷の準備

ok-scratch ok-scratch
潜水艦の基本ができたから、次は魚雷のスプライトを準備するよ。

準備

スプライト「魚雷」を開く

魚雷魚雷
スプライトについて
プレイヤーが発射する魚雷。Submarineのクローンとして生成され、上に向かって移動し、EnemySubに当たると命中数をカウントアップする
どんな役割か
魚雷のスプライトを作るよ!スペースを押すとSubmarineの位置からクローンが飛び出して、上に向かってビューンと進むんだ。敵に当たったら爆発するようにしよう!

実装

step-3

見た目隠すで本体を隠しておいて、大きさは20%に設定。テンプレートを隠してクローンだけ画面に表示するのが、シューティングの弾を作るときの定番パターンみたいなもの。

#5魚雷の初期位置

ok-scratch ok-scratch
魚雷のクローンが生まれたときの初期動作を設定していこう。
step-4

制御クローンされたときでクローンが作られたら、まずプレイヤー潜水艦の位置に移動するよ。こうすると魚雷が潜水艦から発射されたように見えるんだ。回転方法は「自由に回転」にしておく。

#6魚雷の発射

ok-scratch ok-scratch
魚雷の初期動作ができたから、潜水艦のスプライトに戻ってスペースキーで撃てるようにしよう。

準備

スプライト「プレイヤー潜水艦」を開く

プレイヤー潜水艦
プレイヤー潜水艦

実装

step-5

新しいイベントgreenflag が押されたときスクリプトを追加して、制御ずっとの中でスペースキーの入力を待つよ。押されたら魚雷のクローンを1個生成して、0.2秒のウェイトを入れる。この0.2秒が連射間隔になっていて、値を小さくするほど弾がたくさん飛ぶとか。

ok-scratch ok-scratch
シューティングゲームの弾の連射間隔って、ゲームバランスのカギみたいなとこがあるよ。0.2秒だとほどよい連射感だけど、0.05秒にすると機関銃みたいにバリバリ撃てるし、1秒にしたら一発を丁寧に狙うゲーム性になる。プロの現場でもこの「発射レート」ってパラメータ1つで難易度がガラッと変わるんだ。

#7魚雷の飛行と命中判定

ok-scratch ok-scratch
潜水艦から発射できるようになったから、次は魚雷のスプライトに切り替えてクローンの動きと当たり判定を作っていくよ。

準備

スプライト「魚雷」を開く

魚雷
魚雷

実装

step-6

向きを-90度にセットして表示したら、制御ずっとの中でy座標を10ずつ増やして上に飛ばす。

確認プレビューしておこう 確認プレビューしておこう
スペースキーで魚雷のクローンが作られる仕組みが入った。連射間隔は0.2秒。まだ魚雷が端に残ってしまっているけどOK

#8当たり判定

ok-scratch ok-scratch
敵潜水艦に触れたら「■魚雷命中数」を1つ加算してクローンを削除するんだ。端に到達したときもクローンを消す仕組み。
step-7

#9端で消す

ok-scratch ok-scratch
当たっても外れても、クローンをちゃんと片付けるの地味に大事だよ。放置すると見えないクローンがどんどん溜まっていくから。
step-8

#10敵潜水艦の初期設定

ok-scratch ok-scratch
魚雷ができたから、次は的になる敵潜水艦を作っていこう。

準備

スプライト「敵潜水艦」を開く

敵潜水艦敵潜水艦
スプライトについて
ランダムに動く敵の潜水艦。画面上部を左右に移動し、定期的に爆雷を落とす。魚雷に当たると点滅する
どんな役割か
敵の潜水艦を作るよ!左右にランダムで動き回って、一定時間ごとに爆雷を落とすようにしよう。魚雷に当たるとピカッと光るようにするよ!

実装

step-9

動きx座標を ( ) 、y座標を ( ) にするで初期位置をx座標-300・y座標100にして、画面の左上あたりからスタートさせるよ。大きさは50%で、回転方法はプレイヤーの潜水艦と同じ「左右のみ」の設定。

#11敵の移動と被弾演出

ok-scratch ok-scratch
敵潜水艦にランダムな動きと、魚雷に当たったときのフラッシュ演出をつけるよ。
step-10

制御ずっとの中で動き( ) 歩動かすに0から15の乱数を入れて、移動速度がランダムに変わるようにするんだ。端に着いたら跳ね返る。速度が毎回違うから動きが読みにくくなるのがポイントだね。

魚雷に触れたら見た目( ) の効果を ( ) にするで「明るさ」を100にして白く光らせて、0.05秒後にまた0に戻すんだ。これを3回繰り返してピカピカっと点滅する被弾エフェクトの完成。

ok-scratch ok-scratch
被弾エフェクトってコスチュームを切り替えて作る方法もあるけど、この作品は「明るさ」効果の100と0を切り替えてフラッシュさせてるんだ。追加のコスチュームが一切いらないし、どんなスプライトにもそのまま使える汎用テクニック。ゲーム中に敵が光るあの演出がこんなシンプルに作れるの、けっこういいよね。

確認プレビューしておこう 確認プレビューしておこう
敵潜水艦がランダムな速度で左右に動き回って、端で跳ね返るようになった。魚雷が当たったときのフラッシュ演出もここで入ってる

#12爆雷の準備

ok-scratch ok-scratch
敵潜水艦の動きができたところで、次は爆雷を用意するよ。

準備

スプライト「爆雷」を開く

爆雷爆雷
スプライトについて
敵潜水艦が落とす爆雷。EnemySubのクローンとして生成され、ランダムに揺れながら下方向に落下する。Submarineに当たるとゲームオーバー
どんな役割か
敵が落とす爆雷を作るよ!EnemySubの位置からランダムに揺れながら落ちてくるんだ。自分の潜水艦に当たったらゲームオーバーになるから、ちゃんと判定を作ろう!

実装

step-11

魚雷のときと同じパターンで、見た目隠すで本体を隠して大きさを30%に設定。クローンが実際に画面に登場するやつ。

#13爆雷の出現位置

ok-scratch ok-scratch
敵潜水艦から爆雷を生成するとこまでできたから、爆雷のスプライトに戻ってクローンの初期動作を設定していくよ。
step-12

制御クローンされたときで、敵潜水艦の位置に移動してから表示する。魚雷のときと同じ要領で、クローンが敵潜水艦の場所から出てくるように見えるんだ。

#14爆雷の落下パターン

ok-scratch ok-scratch
爆雷の落下動作を作って、ゲームを完成させよう。
step-13

制御ずっとの中でy座標を-15から-1の乱数で変えつつ、x座標も-10から10の乱数で変えるよ。普通なら真下に落とすだけだけど、縦と横の両方にランダム要素を入れることで毎回違う軌道になるのがこの作品の工夫。避けるのがかなり大変だよ。

端に触れたら制御このクローンを削除するでクローンを消す。画面外に出た爆雷の片付けを忘れると、見えないところでクローンが溜まっていくから地味に大事みたいな。

#15爆雷の生成

ok-scratch ok-scratch
爆雷の準備ができたから、次は敵潜水艦のスプライトに切り替えて爆雷をランダムなタイミングで落とす仕組みを作ろう。

準備

スプライト「敵潜水艦」を開く

敵潜水艦
敵潜水艦

実装

step-14

新しいイベントgreenflag が押されたときスクリプトで、制御ずっとの中に0から1.5秒の乱数ウェイトを入れてから爆雷のクローンを生成するよ。待ち時間がランダムだから、いつ爆雷が来るか予測できなくて緊張感が出る。

確認プレビューしておこう 確認プレビューしておこう
敵潜水艦から爆雷がランダムに降ってくるようになった。XY両方向に乱数かかってるから、軌道が毎回違って避けるのがけっこう難しい感じ

まとめ

4種類のスプライトを組み合わせて、本格的なシューティングゲームが完成したね!クローンで弾を連射する仕組みと、乱数で予測不能な動きを作るテクニック、どっちもいろんなゲームに使えるから覚えといて損なし。自分なりにアレンジして、オリジナルのシューティングにチャレンジしてみてね。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!