ブロック崩しを作ろう 2

 

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

これまでゲームを作ってきて「身に付いてないな」と感じたら、もう一度やり直してみてはどうでしょうか。
プログラミング学習の本質は記憶することではありませんが、機能を知っている必要があります。知らなければ利用できないし詳細を検索することもできないからです。
なので、同じ課題を繰り返しやってみることはそれなりに効果があります。

 

打ち返す仕組みを変更しよう

ボールをバーで打ち返しているとき、たまに謎な現象が起こります。
下図のようにバーの中をボールが跳ね回ることがあります。

バーの中でボールが跳ね回る

これはバーの側面からボールを受けたときに起こります。
バーに当たってボールの向きは反転しますが、次のフレームでバーから出られなかったために符号がまた反転してしまうのです。
対処法はいくつかありますが、必ず上に打ち返すように絶対値で計算する方法で解決してみます。

 

計算0の絶対値 をドラッグします。

0の絶対値を使う

 

下図のように、当たり判定の下に配置しましょう。

当たり判定の下に置く

 

otherSpriteの vy(速度 y) を絶対値の中に入れます。

otherSpriteのvyを絶対値の中に入れる

 

絶対値のブロックを戻します。

絶対値を戻す

絶対値にすることで計算の結果は必ずマイナスになります
つまりボールは必ず上に移動します。

 

ブロックを表示しよう

バーとボールができたので、最後にブロックを作ります。
分かりやすいように少しずつ作っていきます。

まず 最初だけ の最後に新しいスプライトを用意します。
準備ができたら絵を作ります。

最初だけの中に新しいスプライトを用意する

 

絵のサイズを幅 19 高さ 9 に変更します。

スプライトサイズを 19x9 にする

 

緑色を選択し、塗りつぶしツールで色を塗りましょう。
終わったら「完了」をクリックしてエディタを閉じます。

緑で塗りつぶす

 

分かりやすくするため、変数名 mySprite2 を変更します。

スプライトの名前を変更する

 

新しい変数名を block にします。

変数名をblockにする

 

下図のようになりましたか?

変数名をblockにする

 

シミュレーターでブロックを確認しましょう。

シミュレーターでブロックを確認する

 

スプライトの位置を変更します。
命令を組み込んだら、変数名を blockに変更して位置を x 0 y 20 にします。

シミュレーターでブロックを確認する

 

画面を確認するとブロックが半分だけ隠れて左上に表示されます。

ブロックは画面の左上に表示される

 

複数のブロックを表示しよう

ブロックをきれいに並べていきます。
ループ の中から、黄色で囲った繰り返しをドラッグします。

繰り返し処理を使う

 

変数 block のスプライトをループの中に入れます。
位置を指定するブロックも一緒に入れます。

スプライト処理をループの中に入れる

 

ループ処理を 最初だけ の中に戻します。

ループ処理を最初だけの中に戻す

 

下図のようになります。

スプライト処理をループの中に入れる

 

忘れていました。
変数 block のタイプを Enemy に変更します。

blockのタイプをenemyに変更

 

ブロックを並べるためには、表示座標をずらす必要があります。
その仕組みを作っていきましょう。
計算 の中の 0 x 0 をドラッグします。

表示座標を計算する

 

x座標の枠に入れます。

x座標の中に計算式を入れる

 

変数 カウンター を先ほどの計算式に入れます。
すると計算式のブロックが外へ出てしまいました。

カウンターを計算式に入れる

 

作業しやすくするため、計算式のブロックは外に配置したまま カウンター を入れます。
そして カウンター x 0 を x座標の中に戻します。

カウンターの計算式をx座標に入れる

 

変数 カウンター に掛ける数値を 20 にします。
これでブロックは x座標を 20 ずつずらして表示されます。シミュレーターの画面を確認しましょう。
ブロックの幅は 19 で作ったので、下図のように隙間ができます。

カウンターに20をかける

 

画面いっぱいに並べるには繰り返しが足りません。
カウンターを 0 から 7 までに変更してブロックを8つ作ります。

8回繰り返す

なぜか、右側が少し空いてます。
画面サイズは幅 160 なので、幅 19 のブロック(計算では20を掛けている)を8つ並べたら幅いっぱいに表示されるはずです。

 

ブロックが左にずれている理由は、スプライトの基点が中心にあるためです。
ブロックの幅は 19 なので、その中心 10 の数だけ右にずらして表示すれば解決です。
+10 するように計算式を変更します。

計算の中から足し算を用意します。
足し算の中に カウンター x 20 を入れます。
最後に カウンター x 20 + 0 を x座標に戻します。

カウンターx20+0をx座標に入れる

 

足す数を 10 に変更します。これで カウンター x 20 + 10 にします。
画面を確認してみましょう。

x座標に+10する

 

ブロックの表示を3段にしよう

ブロックの表示を3段にします。
これまでの処理をコピーして作れば簡単です。
ループブロックの所を右クリックしてメニューを出し「複製する」を選びます。

ブロック表示のループを複製する

 

複製されたブロックは半透明になってます。
スプライト表示と位置指定のブロックだけドラッグして、コピー元のループの中に入れます。
残ったループブロックは捨てましょう。

複製したスプライト処理をループに入れる

 

コピーしたブロックの y座標を 32 に変更します。
画面を確認すると2段になっています。

複製したブロックのy座標を32にする

 

2段目は違う色にします。オレンジ色で塗りましょう。
緑色で塗りつぶした方法と同じ手順でできます。

2段目のブロックをオレンジ色にする

 

3段目を作ります。先ほどとは違う手順で作業します。
2段目のスプライト(オレンジのblock)を右クリックして複製しましょう。
続けて2段目のblockの位置指定も複製します。
それらを2段目の下に追加してください。

2段目のスプライト処理を複製する

 

下図のようになっていますか。
3段目の y座標を 44 に変更します。

複製したブロックのy座標を44にする

 

3段目の block は黄色に塗りつぶしましょう。
カラフルな画面になりました。

3段目のblockを黄色で塗る

 

次回の完結編に続きます。

 

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. ミニダンジョン(完)