2021年3月25日5 分

スクラッチで作る「ブロック崩し」Vol.04

最終更新: 2021年4月11日

前回は「横からの衝突」と「ゲームオーバー」の管理を実現しました。

スクラッチで作る「ブロック崩し」Vol.03

今回行うのは次の3つ。

1,ゲームクリア条件の作成

2,打ち返す角度の管理

3,ボールの速さ、パドルの速さの管理

今回もYoutube にアップしておきましたので、そちらも併せてご確認ください!


1,ゲームクリア条件の作成

ゲームクリア条件は、作成したブロックをすべて破壊すること。ということは、クローンで作成したブロックの数を管理する必要がありますね?

「ブロック」のスプライトを選択します。

変数:「クローン数」を作成。これは現在のクローン数をカウントするための変数。

もう一つ、変数:「最大クローン数」を作成。これはブロック数が完成時のブロック数を保存しておくための変数。

②作成済みのブロック定義:「並べる」の最初の処理として、変数「クローン数」の初期値に 0   を代入します。

③ブロック(クローン)を作成するタイミングで、変数「クローン数」を1ずつ増やします。

④すべてのクローンの配列が完了したタイミングで「クローン数」のカウントが完了しました。この値を変数「最大クローン数」に代入します。

この作品では280個と決まっていますが、今後の展開、ステージ2,ステージ3と進むにつれて最大クローン数も変わるかもしれませんので、ここで管理しておきましょう。

続いて「クローンされたとき」に続くスクリプトを改造します。

変数:「クリア率」を作成します。これは、現状どの程度クリアされたかを表す変数になります。1つも破壊していなければ、「クリア率」 = 0、全てのブロックを破壊したら「クリア率」 = 1 になります。

⑥ボールがブロックに当たり、クローンを削除する直前に、変数「クローン数」を -1 ずつ変更、つまり1ずつ減らしていきします。

さらにこのタイミングで変数:「クリア率」を計算します。数式は以下の通り。

「クリア率」= 1 -「クローン数」/「最大クローン数」

⑦ここで変数「クローン数」が 0 になったらゲームクリアということで、メッセージ「ステージクリア」を送るプログラムを追加しておきます。このメッセージを受け取った時の動きは今回作りませんが、いったんメッセージを準備して、送っておきましょう。


2,パドルで打ち返したときの角度の調整

パドルでボールを撃ち返したとき、毎回突入角と反対の角度を返していたら、ゲームの面白みに欠けます。乱数を使って跳ね返りに「不規則性」を与えることで、より楽しいゲームになると思います。

ただし、パドルの中央付近で受けたら「不規則性」を小さく、パドルの端に行くほど「不規則性」を大きくしてあげます。これである程度、ゲームをコントロールすることができるようになります。

「ボール」のスプライトに移動します。

⑧まずは変数:「パドルとボールの距離」を作っておきます。名前が長いので「距離」でもいいですよ。これは下の補足図の通り、ボールの中心からパドルの中心までのX座標の距離になります。

メッセージ「跳ね返り(パドル)」を作成し、以下のブロックを作成します。

まずは「y座標を -138 にする」でボールの「潜り込み」を跳ね返します。

⑨作成した変数:「パドルとボールの距離」にボールのx座標とパドルのx座標の差を代入します。

基本の反射角は 180度 ー 入射角(向き)。ここに「不規則性」を乱数で与えます。乱数の範囲に『「パドルとボールの距離」と-「パドルとボールの距離」をとることで「パドルとボールの距離」が大きくなるほど大きな「不規則性」になる確率が上がります。

ちょっと難しいですかね?

⑩ここで一つ課題が出てきました。不規則性が想定の値を超えると、真横に跳ね返ったり、マイナス側に、つまりパドルに向かって跳ね返り、またパドルとの衝突判定を繰り返す結果になったりします。そこで向きが一定の値(±75度)を超えないように設定します。

補足 変数:「パドルとボールの距離」

3,ボールの速度を管理する

続いて、徐々にボールの速度を上げていくプログラムを作成します。

先ほどの「ボール」のスクリプトの続きです。

メッセージ「跳ね返り(パドル)」に続くスクリプトの最後に変数「ボールの速さ」を管理するブロックを追加します。「ボールの速さ」は初期値:5 を基準に最大 12 まで、変数「クリア率」に応じて大きくしていきます。

「ボールの速さ」 = 5 + 7 ×「クリア率」

という数式を作ることで、実現することができそうです。

⑫ボールの速さが大きくなると、ブロックへの「潜り込み」も大きくなり、想定外の動きをするケースが見られます。そこでブロックに当たった時の「潜り込み」の反作用も大きくしておきます。

下のブロックのように、それぞれ「ボールの速さ」を加味しておきます。

ここで「パドル」のスプライトに移動します。

⑬Ballに触れたときなら に続く処理を加工します。

メッセージ:「跳ね返り(パドル)」に変更。

また、パドルの速さもボールの速さ同様、徐々に大きくします。最大値10として、

「パドルの速さ」 = 5 + 5 ×「クリア率」

のブロックを作成します。

これでだいぶ動きのあるゲームになってきました。

ということで今回はここまで。


教室では実際に通って頂いての授業の他、ちょっとしたお困りごとに対するオンライン授業やオンラインサポートも行っております。

お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。

お問い合わせは こちら から。

体験授業のお申込みは こちら から。

過去のブロック崩しはこちらから

スクラッチで作る「ブロック崩し」Vol.01

スクラッチで作る「ブロック崩し」Vol.02

スクラッチで作る「ブロック崩し」Vol.03

    5