6-2 モグラたたきゲームの作成

 ここでは、お待ちかねのモグラたたきゲームを作成しましょう。Timer コンポーネントを活用することで、モグラが出たり引っ込んだりする動きを実現することができます。

【練習問題】

まず、3つの穴のどれか1つからモグラが出てくる、というプログラムを作りましょう。動作内容は次の通りです。

プログラムを起動し、

起動画面

[ゲーム開始] ボタンをクリックすると、どれか一つの穴からランダムにモグラが出てきます。

ゲーム開始

このように、どれか1つの穴からモグラが出てくるという動作が [ゲーム終了] ボタンをクリックするまで続きます。

それでは、プログラミングに入りましょう。

次のようにフォームをデザインしてください。

フォームのデザイン

 各ボタンコンポーネントの Name プロパティを次の通り指定してください。

<ButtonのNameプロパティ>
ボタン Name
左のモグラ ButtonMogura1
中央のモグラ ButtonMogura2
右のモグラ ButtonMogura3
ゲーム開始 ButtonStart
ゲーム終了 ButtonStop

Timer については以下のようにコンポーネントを指定してください。

プロパティ
Name TimerMogura
Interval 200
Enabled False

さて、前節と同様、[ゲーム開始] および [ゲーム終了] ボタンの Onclick イベントハンドラにおいて、Timer の作動開始と停止を、Enabled プロパティの切り替えで行います。

ここに、[ゲーム開始] ボタンのイベントハンドラにおいて「Randomize」が挿入されていますが、これは、この後乱数を用いてどの位置 (穴) からモグラが現れるかを決めるためです。

今、OnTimer イベントにおいて、(3つの内の) どこかの穴からモグラを出現させます。その出現位置を0〜2の乱数を用いて次に様に決めましょう。

0:左の穴から出現  → モグラ1を表示
1:中央の穴から出現 → モグラ2を表示
2:右の穴から出現  → モグラ3を表示

 ここに、ボタンの表示/非表示は visible プロパティの値で指定できますから、OnTimer イベントのイベントハンドラは次のようになります。

OnTimer イベントのイベントハンドラ

 プログラムの内容は分かりますね。
これで完成です。早速実行してみてください。モグラが現れては消える、という動作が再現されると思います。

【基礎課題6-2】

 上の【練習問題】のままではゲームになりません。そこで、モグラが現れている時にそれをたたくと (モグラが表示されている時にクリックすると)、得点が加えられるようにしましょう。

基礎課題6-2

なお続けて、ゲームを行うときに以前のゲーム得点が残っていてはまずいですね。そこで、[ゲーム開始] ボタンをクリックしたときに、得点が0にもどるようにしておきます。

 まず、フォームを作成しましょう。【練習問題】のフォームに上のように得点欄を付け加え、EditName プロパティを「EditTokuten」としてください。

 次に、得点を加える部分をプログラミングします。
下の空欄を埋めて、左のモグラ (ボタン) をクリックした時のイベントハンドラを完成させてください。

モグラをクリックした際のイベントハンドラ

(クリックしたときに、モグラボタンが表示されていれば) 現在の得点に1 (点) を加えればよいのですね。EditText プロパティが String (文字列) 型であることに注意してください。残りの2つのモグラ (ボタン) についても同様にプログラミングできます。

最後に、[開始] ボタンをクリックしたときのイベントハンドラに得点を0に戻す部分を付け加えてください。

このように得点をつけることで、ようやくゲームらしくなりました。

【基礎課題6-3】

【基礎課題6-2】のプログラムでは、[ゲーム終了] ボタンをクリックし終了させた後も、[モグラ] ボタンをクリックすると得点が加算されるようになっています。これではまずいですね。

そこで、[ゲーム終了] ボタンをクリックすると、下のように [モグラ] ボタンが選択不可になるようにしてください。

基礎課題6-3

同時に、[ゲーム開始] ボタンをクリックした後に、[モグラ] ボタンを選択可とすることも忘れないでください。

これで、ゲーム終了後にも得点が加算される、という"不正"を防ぐことができるようになりました。

【応用課題6-3】

デモンストレーションをダウンロード

実際のゲームでは、自分で [終了] ボタンをクリックするのではなく、予め制限時間が決められているのが普通です。そこで、制限時間を30秒として、この制限時間内で得点を競うというゲームにしてください。作成するプログラムの動作内容は次の通りです。

プログラムを起動すると下の画面が現れます。ここで、[ゲーム開始] ボタンをクリックするとゲームが始まります。

応用課題6-3

30秒経過すると、ゲーム終了と表示され、ゲームは終わります。

ゲーム終了

ここで、[ゲーム開始] ボタンをクリックすると、初期画面に戻り、再びゲームが開始されます。

<ヒント>

残り時間をカウントするために、新たに Timer を加えます。したがってこのプログラムでは、2つの Timer を用います。

【応用課題6-4】

デモンストレーションをダウンロード

 今までは、1匹のモグラが3つの穴のどれかから (必ず) 出てくるという設定でした。したがって、常にどれかの穴から1匹 (だけ) モグラが出てきました。

今度は、モグラは3匹でそれぞれの穴から (独立に) 出たり入ったりするというように設定を変えましょう。つまり、ある瞬間には、モグラが1匹も現れなくなり、またある瞬間には次のように複数のモグラが同時に現れることもある、ということです。

応用課題6-4

 このように、【応用課題6-3】のプログラムを改良してください。

<ヒント>

3つの乱数 (それぞれ0か1) を発生させ、それぞれを各モグラの表示/非表示の決定に用いればよいのです。