前回の ブロック崩しを作ろう 2 のつづきです。
ブロック崩しは今回で完結です。
がんばりましょう。
ところで、他のプログラミング言語でゲームを作ったことはありますか。
いつか挑戦してみてください。
そのとき「あぁ、MakeCode Arcade はとても簡単だったな」と思うことでしょう。
ボールとブロックの当たりを入れよう
ブロックが並んだことでゲーム「ブロック崩し」の画面になりましたね。
次はボールとブロックの当たりを入れます。
これで遊べるようになります。
当たり判定は、バーとボールのものをコピーします。
当たり判定を右クリックしてメニューを出し、複製しましょう。
sprite 側を ball に、otherSprite 側を Enemy にします。
下図のように otherSprite を sprite に変更します。
とび出た otherSprite はゴミ箱へ捨てましょう。
いま気づいたんですけど、otherSprite 側を ball にすれば変数の差し替えは必要ないですね。 でもこのまま進めます。(説明画像を変更するのが面倒なので)
これで当たり判定ができました。ボールが跳ね返るか確認してみましょう。
あれ、ボールがすり抜け上まで来てしまいました。
これは跳ね返す計算で絶対値を使っているため、必ず上に跳ね返っています。
計算式から絶対値をとり除きます。
確認しましょう。下向きに跳ね返るようになりました。
ブロックを消そう
ボールが当たったブロックを消します。
スプライトを破壊する命令を使います。
見つからないときは英語表記(下図)のブロックを探してください。
ボールとブロックの当たり判定の中に、スプライト破壊の命令を入れます。
変数は otherSprite に変更しましょう。
遊んでみましょう。
ボールはブロックで跳ね返り、同時にブロックが消えます。
ブロックが一度にたくさん消えるときがあります。
シンプルな当たり判定と跳ね返りの計算をしているためです。
初心者のうちはこれでもいいかなと思います。ゲーム作りに慣れてきたら、厳密な当たり判定や跳ね返りに挑戦してみてください。
スコアを入れよう
ゲームらしくスコアを入れます。
ブロックを消すタイミングでスコアに得点を入れます。
情報 の スコアを1変える を使います。
画面の右上にスコアが表示されます。
すべてのブロックを消すと 24 点になります。
すべて消したら?
ブロックをすべて消したらどうしますか?
次のブロックを並べるのが一般的です。しかし、ここは入門課題らしくゲームオーバーにしたいと思います。
全消しを調べる方法はいくつかありますが、今回、分かりやすい情報があります。
それはスコアです。全消しで 24 点という情報を使います。
情報 の on score 100 をドラッグします。
何もないところに配置して数を 24 に変更します。
ゲーム の ゲームを終了する をドラッグします。
見つからないときは英語表記の game over を探してください。
on score の中に入れて「勝ち」に変更します。
これでスコアが 24 点になったとき勝ち演出のゲームオーバーになります。
ゲームオーバーのバグ
ゲームオーバーでバグ(不具合)が発生しました。
よく見ると、最後のブロックが消えません。
何が起こったのでしょうか?
簡単に言えば、ブロックを消す処理の前にゲームオーバー処理が始まってしまったからです。
専門的に言えば、計算や判定、イベント処理などは描画処理よりも前に行われるため、
ブロックを消す描画処理よりもスコアが24点になったイベント処理が優先された、からです。
要はゲームオーバーが早すぎたので「待ち」を入れます。
ループ の 一時停止100ms をドラッグします。
ゲームを終了する の上に入れます。
100 ms とは 0.1 秒のことです。一瞬ですね。
これで対処は終了です。
すべてのブロックが消えてゲームオーバーになることを確認してください。
もう一つのゲームオーバー
いよいよ大詰めです。
ボールを打ち逃したときのゲームオーバーを作ります。
ちなみに、この処理を最後にした理由は、これまで不必要だったからです。
先に入れてしまうと、テストプレイで邪魔ですよね。
ゲーム の ゲームが更新された時 をドラッグします。
何もないところに配置しましょう。
ボールが画面下まで来たか調べるため条件判断を使います。
論理 の もし真なら を中に入れます。
論理 の 0 < 0 を条件の中に入れます。
ボールの座標を取得します。
スプライト の mySpriteのx をドラッグします。
条件の中に入れて ball の Y > 116 に変更してください。
ゲームオーバー処理を入れます。
今回は「負け」演出のまま使います。
ボールが画面下まで落ちてゲームオーバーになることを確認します。
調整しよう
プログラミングはできました。
しかし、このまま終わりにしてはダメです。
ゲームとしての品質を高める努力をしましょう。
まず、気になったのがプレイヤーの初期位置です。
ボールがいきなり動き出して、何もしなければ即ゲームオーバーなのは良くないと思います。
バーの初期位置を変更します。x座標を 120 にします。
それでもやっぱりプログラムを起動して、いきなりボールが動くのはプレイヤーにやさしくないです。
ここはボタンを押して開始する流れにしましょう。
ゲーム の タイトルを表示する を 最初だけ の
最後に入れます。
「Aボタンでスタート」のメッセージに変更します。
起動後にメッセージを表示して処理が止まります。
これでプレイヤーの好きなタイミングで始められます。
しばらく遊んでみると、簡単すぎてつまらないと感じました。
このままでは作業をしているだけという感覚になりやすいです。
簡単な対処法として、バーの移動速度を遅くしてみます。
速度 vx を 55 に変更しましょう。
遊んでみてください。
ボールとバーの速度がこのバランスならば、ときどき先読みしてバーを移動させないと追いつけない場面が発生します。
少しむずかしすぎるかもしれませんね。
遊ぶ人に合わせてバーの速度を少し早くするのもいいと思います。
アクション性が強いゲームは調整がむずかしいです。
でもまぁ、これで完成とします。
お疲れさまでした。