ブロック崩しを作ろう(完)

 

前回の ブロック崩しを作ろう 2 のつづきです。

ブロック崩しは今回で完結です。
最後までがんばりましょう。

ところで、ほかのプログラミング言語でゲームを作ったことはありますか?
もしまだなら、いつか挑戦してみてください。
そのとききっと、「MakeCode Arcade はとても簡単だったんだな」と実感することでしょう。

 

ボールとブロックの当たりを入れよう

ブロックを並べたことで、「ブロック崩し」のゲーム画面になりましたね。
次はボールとブロックの当たりを入れます。
これで遊べるようになります。

当たり判定は、バーとボールのものをコピーします。
当たり判定のブロックを右クリックしてメニューを出し、複製しましょう。

当たり判定を複製する

 

タイプを Player から Enemy に変更します。

判定対象のタイプを変更する

 

これで、ブロック(Enemy)とボール(ball)の当たり判定ができました。
それでは、ボールが跳ね返るか確認してみましょう。
あれ、ボールがブロックをすり抜けて、上まで来てしまいました。

ボールがブロックをすり抜け画面上に

 

これは跳ね返す計算で絶対値を使っているため、必ず上に跳ね返っています
計算式から絶対値をとり除きます。

計算式から絶対値を除く

 

確認しましょう。下向きに跳ね返るようになりました。

下向きにも跳ね返る

 

ブロックを消そう

ボールが当たったブロックを消します。
スプライトを破棄する命令を使います。

スプライトを破棄する命令

 

ボールとブロックの当たり判定の中に、スプライト破棄の命令を入れます。
変数は sprite に変更しましょう。

スプライト破棄を入れる

 

遊んでみましょう。
ボールはブロックで跳ね返り、同時にブロックが消えます。

ボールが当たったブロックが消える

 

ブロックが一度にたくさん消えるときがあります。
シンプルな当たり判定と跳ね返りの計算をしているためです。
初心者のうちはこれでもいいかなと思います。ゲーム作りに慣れてきたら、厳密な当たり判定や跳ね返りに挑戦してみてください。

 

スコアを入れよう

ゲームらしくスコアを入れます。
ブロックを消すタイミングでスコアに得点を入れます。

情報スコアを 1 だけ増やす を使います。

スコアを入れる

 

画面の右上にスコアが表示されます。
すべてのブロックを消すと 24 点になります。

画面右上にスコアが表示される

 

すべて消したら?

ブロックをすべて消したら、どうしますか?
一般的には次のブロックを並べますが、ここではシンプルにゲームオーバーとすることにします。

全消しを判定する方法はいくつかありますが、今回は分かりやすい情報を利用します。
それは「スコア」です。全消し時のスコアが 24 点になることを利用しましょう。

情報スコアが 100 になった時 をドラッグします。

on score 100 を使う

 

何もないところに配置して数を 24 に変更します。

24に変更する

 

ゲーム勝ち でゲームを終了する をドラッグします。

ゲームオーバー処理を入れる

 

スコアが 24 になった時 の中に入れます。
これでスコアが 24 点になったとき勝ち演出のゲームオーバーになります。

勝ち演出のゲームオーバーにする

 

ゲームオーバーのバグ

オールクリアによるゲームオーバー処理が完成しました。
たくさん遊んでみてください。

──しかし、バグ(不具合)が発生しました。
よく見ると、最後のブロックが消えていません。

ゲームオーバーでバグが発生

 

何が起こったのでしょうか?
簡単に言えば、ブロックを消す処理の前にゲームオーバー処理が始まってしまったのです。
もう少し専門的に言うと、計算や判定、イベント処理などは描画処理よりも前に行われるため、ブロックを消す描画処理よりも、スコアが24点になったことによるイベント処理が優先されてしまったのです。

 

要はゲームオーバー処理が早すぎたので「待ち」を入れます。
ループ一時停止 100 ms をドラッグします。

一時停止を使う

 

ゲームを終了する の上に入れます。
100 ms とは 0.1 秒のことです。体感では一瞬ですね。

ゲームを終了するの前で一時停止

 

これで対処は終了です。
すべてのブロックが消えてゲームオーバーになることを確認してください。

 

もう一つのゲームオーバー

いよいよ大詰めです。
ボールを打ち逃したときのゲームオーバー処理を作りましょう。

ちなみに、この処理を最後にした理由は、これまで必要なかったからです。
先に入れてしまうと、テストプレイのたびにゲームオーバーになってしまい、作業の邪魔になりますよね。

ゲームゲームが更新された時 をドラッグします。
何もないところに配置しましょう。

ゲームが更新された時を使う

 

ボールが画面下まで到達したかどうかを調べるため、条件判断を使います。
論理もし真ならゲームが更新された時 の中に入れます。

条件判断ブロックを使う

 

論理0 < 0 を条件式の中に入れます。

条件式を判断ブロックに入れる

 

ボールの座標を取得します。
スプライトmySprite x をドラッグします。
条件式の中に入れて ball y > 116 に変更してください。

ボールのy座標と比較する

 

ゲームオーバー処理を入れます。
今回は「負け」に切り替えて使います。

ゲームオーバーの負け演出を入れる

 

ボールが画面下まで落ちてゲームオーバーになることを確認しましょう。

ゲームオーバーを確認する

 

調整しよう

プログラミングは完了しました。
しかし、このまま終わりにしてはいけません。
ゲームとしての品質を高める努力をしましょう。

まず気になったのは、プレイヤーの初期位置です。
ボールがいきなり動き出して、何もしなければ即ゲームオーバーになってしまうのは、良くないと思います。
そこで、バーの初期位置を変更します。x座標を 120 に設定しましょう。

バーの初期位置を120に変更

 

それでも、やはりプログラムを起動してすぐにボールが動き出すのは、プレイヤーにやさしくありません。
ここは、ボタンを押してゲームを開始する流れにしましょう。

ゲームタイトルを表示する最初だけ の 最後に入れます。
「Aボタンでスタート」のメッセージに変更します。

タイトルの表示を最初だけの最後に入れる

 

起動後にメッセージを表示して処理が止まります。
これでプレイヤーの好きなタイミングで始められます。

プレイヤーの好きなタイミングで始められる

 

しばらく遊んでみると、簡単すぎてつまらないと感じました。
このままでは作業をしているだけという感覚になりやすいです。

簡単な対処法として、バーの移動速度を遅くしてみます。
速度 vx を 55 に変更しましょう。

バーの移動速度vxを55に変更する

 

遊んでみてください。
ボールとバーの速度がこのバランスならば、ときどき先読みしてバーを移動させないと追いつけない場面が発生します。
少し難しすぎるかもしれませんね。
遊ぶ人に合わせてバーの速度を少し速くするのもいいと思います。

アクション性の強いゲームは、調整が難しいものです。
でも、ひとまずこれで完成としましょう。
お疲れさまでした。

 

MakeCode Arcade

  1. MakeCodeはいかが
  2. りんご狩りゲーム
  3. りんご狩りゲーム(完)
  4. ピザを避けてゲーム
  5. ピザを避けて 2
  6. ピザを避けて(完)
  7. アカウント登録
  8. ケーキ早食いゲーム
  9. ケーキ早食い 2
  10. ケーキ早食い(完)
  11. 危険ドライブ
  12. 危険ドライブ 2
  13. 危険ドライブ(完)
  14. 15秒シューティング
  15. 15秒Shooting 2
  16. 15秒Shooting(完)
  17. ブロック崩し
  18. ブロック崩し 2
  19. ブロック崩し(完)
  20. ヘビキングを撃て
  21. ヘビキング(完)
  22. ちょびっと迷路
  23. ちょびっと迷路 2
  24. ちょびっと迷路(完)
  25. でんでんジャンプ
  26. でんでんJump 2
  27. でんでんJump(完)
  28. ミニダンジョン
  29. ミニダンジョン 2
  30. ミニダンジョン 3
  31. ミニダンジョン 4
  32. ミニダンジョン(完)