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

 

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

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

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

 

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

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

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

当たり判定を複製する

 

sprite 側を ball に、otherSprite 側を Enemy にします。

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

 

下図のように otherSprite を sprite に変更します。
とび出た otherSprite はゴミ箱へ捨てましょう。

otherSprite を sprite に変更

いま気づいたんですけど、otherSprite 側を ball にすれば変数の差し替えは必要ないですね。 でもこのまま進めます。(説明画像を変更するのが面倒なので)

 

これで当たり判定ができました。ボールが跳ね返るか確認してみましょう。
あれ、ボールがすり抜け上まで来てしまいました。

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

 

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

計算式から絶対値を除く

 

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

下向きにも跳ね返る

 

ブロックを消そう

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

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

見つからないときは英語表記(下図)のブロックを探してください。

スプライトをdestroy

 

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

スプライト破壊を入れる

 

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

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

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

 

スコアを入れよう

ゲームらしくスコアを入れます。
ブロックを消すタイミングでスコアに得点を入れます。
情報スコアを1変える を使います。

スコアを入れる

 

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

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

 

すべて消したら?

ブロックをすべて消したらどうしますか?
次のブロックを並べるのが一般的です。しかし、ここは入門課題らしくゲームオーバーにしたいと思います。

全消しを調べる方法はいくつかありますが、今回、分かりやすい情報があります。
それはスコアです。全消しで 24 点という情報を使います。
情報on score 100 をドラッグします。

on score 100 を使う

 

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

24に変更する

 

ゲームゲームを終了する をドラッグします。
見つからないときは英語表記の game over を探してください。

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

 

on score の中に入れて「勝ち」に変更します。
これでスコアが 24 点になったとき勝ち演出のゲームオーバーになります。

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

 

ゲームオーバーのバグ

ゲームオーバーでバグ(不具合)が発生しました。
よく見ると、最後のブロックが消えません。

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

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

 

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

一時停止を使う

 

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

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

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

 

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

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

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

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

 

ボールが画面下まで来たか調べるため条件判断を使います。
論理もし真なら を中に入れます。

条件判断ブロックを使う

 

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

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

 

ボールの座標を取得します。
スプライトmySpriteのx をドラッグします。
条件の中に入れて ballY > 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. ミニダンジョン(完)