micro:bit 判断力ゲーム : プログラム
⑥ ゲームエリア:弾の生成・削除処理
ここでは弾を生成するための atk_create_12/atk_create_34の関数の中身を作成していきます。計算のパーツリストにある、乱数のパーツを上手く使って下さい。
今後は弾を削除するための関数、atk_delete_12/atk_delete_34を作成します。。atk_flagの変数はそのスプライトが存在するかどうかを管理するために用意しています。もし存在しないスプライトを削除しようとするとエラーになってしまいますので、ここでatk_flagの値をチェックしてから、削除するようにしています。
⑦ ゲームエリア:弾の移動処理
弾を下方向に移動させる処理は以下のように記述します。存在しないスプライトを移動させようとするとエラーになるため、flagを使ってスプライトの有無を確認します。
⑧ ゲームエリア:弾と自機の接触判定処理
ここでは弾が自機と接触しているかを判定するための atk_check関数の中身を記載していきます。ここでも存在していない弾との判定を行おうとするとエラーになりますので、flagを使ってチェックしていきます。最後にlife_updateの関数を呼んでいるので、life_updateの関数を中身を空の状態で作っておいてください。
⑨ ライフエリア・ライフ処理
⑧に登場したlife_updateの中身をこちらで設計します。こちらでは、残っているライフに併せてライフの表示変更と、ゲームオーバーの判定を行います。残りライフが0になった時にgameoverの関数が呼ばれるようになっていますので、こちらの関数も中身が空の状態で作成下さい。
⑩ ゲームオーバー処理
こちらではライフが0になった時の処理、gameover関数の中身を記載します。内容としては単純に、スコアに応じて表示内容を変えるというものです。
※2023/8/10 追記
上記画像のスコア毎のアイコン表示方法に誤りがありました。以下のケースでいずれか1つのみが選択されるよう、コードは修正してお楽しみください。
- score <10
- score <20
- score >20
⑪ スコア処理
肝心のスコアを計算する方法を決めていませんでした。「最初だけ」のところにスコアの変数を追加しましょう。もちろん初期値は0です。
また、どのような条件で加点を行っていくかですが、私の場合は「ずっと」のパーツの中で4つフェーズが一巡するごとに1点ずつ加点するようにしました。ここはゲームクリエーターであるアナタが自由に設定して良い点となります。
⑫ 難易度調整
ここまででゲームとしては成立しているはずですが、最後に難易度調整をします。このままでは勘の良い人はずっとゲームがプレイし続けられてしまい終わりが来ません。そこで難易度の調整を行います。
「最初だけ」のパーツに以下のspeedの変数を追加して下さい。初期値は1000です。
続けて、「ずっと」のパーツの中身を以下のように変更しましょう。これで弾の速度を徐々に速くすることが出来、どんなプレイヤーでもいくらかプレイすればゲームオーバーとなるでしょう。こちらの難易度調整の方法についても、ゲームクリエーターであるアナタが好きに決めてよい部分です。
さて、ゲームが完成したはずです。早速プレイしてみて下さい!
最後に
如何でしたでしょうか?こちらの記事では実際にどのように動作するかを決めた仕様からmicro:bitを使い、ゲームプログラミングを行う例を記載致しました。
少し関数の中身等の説明は簡略化してしまいましたので、もし不明点・相談したい内容などがありましたら、お気軽にご相談下さい。
ディスカッション
コメント一覧
こんにちは。
いつも参考にさせて頂いております。
判断力ゲームの
関数 game over のアイコンを表示する部分が点数によっては2種類表示されてしまいます。
点数判定の「もし 〜 なら」の連続した判断ではなく、「もし 〜 なら 〜 でなければもし 〜 なら 〜 でなければ 〜」で判断するようにした方がよいのではないでしょうか?
よろしくご回答をお願い致します。
尾崎様
確認致しましたが、スコア表示の後のアイコン表示については尾崎様にコメント頂いた通り、現状のコードでは意図した動作になりませんので「もし 〜 なら 〜 でなければもし 〜 なら 〜 でなければ 〜」という、いずれか1つのみを選択するような判定文を用いるべきですね。
私の方では作成した後に十分にテストが出来ておりませんでした。ご指摘頂き有難うございます。
ブログの方には注釈を入れておきたいと思います。
今後とも宜しくお願い致します。