top of page

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

前回からちょっと時間が空いてしまいましたが、スクラッチで作る「ブロック崩し」シリーズ、継続して作成していきましょう。前回はボールがブロックに当たった時に削除する動きと跳ね返りを作成しました。

今回は、横から当たった時の動きと、パドルで拾い損ねたときの動き、それからゲームオーバーの演出を作っていきます。今回もYouTubeで作っておきましたので、そちらも併せてご確認ください!



 

1,横からの衝突


横から当たった時の「入射角(突入角)」と「反射角」の関係ですが、下の図のように補助線を引くとわかりやすいですよね?

スクラッチの場合、真上が0度なので、0度を挟んで正反対になります。

つまり 反射角 = ー入射角

これを踏まえて、以下のブロックを作成します。


メッセージ「跳ね返り(横)」を受け取った時の動きです。

上で確認した 「(0 - 向き) 度に向ける」のプログラムですね。

ただし、その前に「(0-変数:ボールの速さ)歩動かす」ブロックを追加します。

ボールが速度を持って「ブロック」に当たると、ブロックにめり込んでしまいます。正しい動きをするように、事前にめり込んだ分を戻しておきます。

では横から衝突したという判定は、どのようにすればわかるでしょうか?

下の図を見てください。

ボールとブロックの大きさを表したものです。

ブロックの中心とボールの中心のX座標同士の距離を測った時に、14.25 より大きければ、横から当たったことになるということがわかると思います。

この法則を使って、すでに作成しているブロックのコード

クローンされたときに続く「ずっと」内の処理、もし Ball に触れたなら

を以下のように改造します。

Ballのx座標ーブロックのx座標が 14より小さい、または -14 より大きければ

ここは「絶対値」を使ってまとめてしまいましょう。

(Ballのx座標ーブロックのx座標)の絶対値 < 14  なら

  これは、上から当たったか、下から当たった、いずれかです。

  ここに前回作成した条件を移動します。

そうでなければ、「横から当たった」ことになりますので、メッセージ「跳ね返り(横)」を追加します。

その後に「クローンを削除する」ブロックを移動しています。忘れないでくださいね?

これで横からの衝突判定は完成です。


2,ゲームオーバー演出

先に 変数:「ライフ」を作っておきましょう。パドルでボールを拾いそこねたら、「ライフ」を1つずつ減らしていきます。

「ライフ」の初期値は3にしておきます。

以下のスクリプトはすでに作成しているものの改造です。


❶ボールが「ずっとブロック」の内部にロス条件を追加します。

もし Ball のy座標が-170より小さくなったら、取り損ねたということにして、「ライフ」を1つずつ減少。同時に一旦隠しておきます。


❷「隠す」ブロックを使ったら「表示する」もセットで使わないと、二度と表示されませんよね。メッセージ「ゲームスタート」を受け取った後、再度「パドル」に行って、準備が完了したら「表示」させておきましょう。


❸Vol.01で追加し忘れていましたが、「パドル」へ行った後、「Y座標を15ずつ変える」ブロックを使って、位置を補正しておきます。発射した瞬間にパドルとの衝突判定が発生するのを防ぐためです。


❹「ライフ」が0になったらゲームオーバーになります。

「もし~なら」ブロックで ライフ<0 の条件を作り、その中で以下の処理を行います。

メッセージ「ゲームオーバー」を作成して、ここで送っておきましょう。

プログラム説明が前後してしまいましたが、パドルを取り損ねたら、このスクリプトを止めます。そうしないとどんどん「ライフ」が減っていってしまいます。




パドルのプログラムも修正しておきます。

現在、スペースキーを押したら、無条件でゲームスタートが送られ、ボールが十発射され続けます。

ゲームオーバーになったら発射されないようにするためには、以下のようにメッセージを送ることができる条件を追加しておきます。

もし「ライフ」が0より大きいときにだけ発射できるように改造します。

最後はゲームオーバー演出です。

この後演出を追加していきますが、まずは背景の色だけ変えておきます。


今回は真っ赤な背景を作ってみました。

さらに2つのスクリプトを追加しておきます。

まずは通常画面、旗が押されたときに、今までの何もない真っ白な背景にします。

メッセージ「ゲームオーバー」を受け取った時に、真っ赤な背景にします。

では実際に動かしてみましょう。

Youtube のように正しく動きましたか?

今回はここまでです。

 

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

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


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

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


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


Comments


bottom of page