n:bit かわくだり

プログラムの説明


ツールボックスのゲームにある「スプライト」という機能を使います。
「スプライト」とは、LED表示の5×5ドットを制御するしくみです。
LED表示をゲーム盤として使い、LED1個づつをオブジェクトとして扱い、オブジェクトの動きや重なりを簡単にプログラムすることができます。
また、処理の決まったゲームスタートやゲームオーバーのしくみもつくることができ、得点の制御もしてくれます。

スプライトの使い方を見てみましょう。


「スプライトを作成」ブロックを実行すると、xが2、yが4の位置のLEDが点灯します


LEDの位置関係は、次のようにxとyで構成されています

このように、スプライトとはxy位置を持った変数ということになります。
LED1個分のキャラクターと考えるとわかりやすいでしょう。

「最初だけ」ブロックの中で、「自分」と「流木」の初期の位置を決めます
「流木」のx位置は乱数で0から4のいずれかに決まります


つぎに、「ずっと」ブロックで、ゲームの動きを作ります。
ゲームをするために必要な要素は、以下の4つをプログラムする必要があります。

1.「流木」の動きを作ること、
2.「流木」が「自分」にぶつかったかどうか、当たり判定をすること、
3.「流木」がぶつからなかったら、あたらしい「流木」を作ること、
4.AとBボタンで、「自分」の動きを作ること、

1.「流木」の動きを作る

スピード変数は、実は停止時間なので、値が小さいほど動きが早くなることになります。
初期値は0.5秒(500ミリ秒)なので、比較的ゆっくりです。
「「流木」のyを1だけ増やす」ブロックを実行すると、今の位置のLEDを消灯して、新しい位置のLEDを点灯してくれます。


2.「流木」が「自分」にさわったかどうか、当たり判定をする

「「流木」が他のスプライト「自分」にさわっている」ブロックを使うことで、当たり判定をすることができます。これは、「流木」と「自分」のxy位置が同じであるという条件のことです。

今回のゲームでは、「流木」と「自分」がぶつかったときは、ゲーム終了としました。
まず、n;bitの赤LED(P2端子)を点灯し、「おそうしき」のメロディを鳴らします。
「ゲームオーバー」ブロックを使って、エンディング処理と得点表示をします。
ゲームオーバーの後のブロックも実行していますが、LED表示はされない(ゲームブロックは止まっているように見える)ので、使い方に注意してください。
実行も止めたければ、「一時停止する」「再開する」ブロックを組み合わせて使います。


3.あたらしい「流木」を作る

かわくだりゲームを継続できるなら、流木が最下段まで来たかどうかを判定します。
「流木」のy位置が4なら、最下段と判断します。

流木をクリアしたということで、n:bitの黄LED(P1端子)を点灯(値を1に)して、ジャンプアップメロディを流します。

次に、得点を1増やします。
ゲームにある、「点数を1増やす」ブロックを使わないのは、このブロックを実行する事に画面にも点数を表示してしまうため、使いませんでした。

これで、流木を1つかわす毎に、1点づつ増やすしくみができました。

もし、スピードが50より大きいなら、
 スーピードを50減らします。
でなければ、
 スピードを50にします。
初期値が500なので、流木をクリアする毎に、450,400、350と減っていくことで、流木の速度が上がり、難易度が上がるのです。
そして、無限に早くならないように、最速値を50にしました。
このような仕組みを、ゲームパラメーターといい、ゲームの面白さやツマラナさをを決める、重要なプログラミングになります。
ゲームの難易度を下げたいなら、初期値をもっと大きくして、10づつ減らすなどを工夫してもよいでしょう。

「一時停止」ブロックで、タイミング調整をします。

「流木を削除」ブロックで、流木のLED位置を消灯します。

最後に、流木の新しいLED位置を乱数で決定し点灯します。
「ずっと」ブロックを繰り返します。

4.「自分」のうごきを作る

「自分」の動き方は左右だけなので、次のように簡単に作れます。
「1ドット進める」ということは、x方向に右に1ドット移動するという意味です。
4ドットを超えても4のままなので、位置の範囲チェックもする必要がありません。
同じく−1ドット進めるは、x方向に左に1ドット移動するという意味です。


改良しよう

1.「自分」を左右だけでなく、前後にも動けるようにしてみましょう。
  Y方向に動くためのプログラムを追加すればよさそうです!!
  ただしボタンが足りないので、すこし工夫が必要です。

2.流木を2つにしてみましょう。
  2番目の流木ためのxy位置が必要なので、スプライト変数を追加することになります。
  流木2の出現位置やタイミングも考える必要があります。
  あたり判定もそれぞれ必要なので、プログラムは少し考えて作必要があります。


この教材は「Creative Commons — CC BY-SA 4.0」の下に提供されています。