ここでは、お待ちかねのモグラたたきゲームを作成しましょう。Timer コンポーネントを活用することで、モグラが出たり引っ込んだりする動きを実現することができます。
まず、3つの穴のどれか1つからモグラが出てくる、というプログラムを作りましょう。動作内容は次の通りです。
プログラムを起動し、
[ゲーム開始] ボタンをクリックすると、どれか一つの穴からランダムにモグラが出てきます。
このように、どれか1つの穴からモグラが出てくるという動作が [ゲーム終了] ボタンをクリックするまで続きます。
それでは、プログラミングに入りましょう。
次のようにフォームをデザインしてください。
各ボタンコンポーネントの Name プロパティを次の通り指定してください。
ボタン | Name |
---|---|
左のモグラ | ButtonMogura1 |
中央のモグラ | ButtonMogura2 |
右のモグラ | ButtonMogura3 |
ゲーム開始 | ButtonStart |
ゲーム終了 | ButtonStop |
Timer については以下のようにコンポーネントを指定してください。
プロパティ | 値 |
---|---|
Name | TimerMogura |
Interval | 200 |
Enabled | False |
さて、前節と同様、[ゲーム開始] および [ゲーム終了] ボタンの Onclick イベントハンドラにおいて、Timer の作動開始と停止を、Enabled プロパティの切り替えで行います。
ここに、[ゲーム開始] ボタンのイベントハンドラにおいて「Randomize」が挿入されていますが、これは、この後乱数を用いてどの位置 (穴) からモグラが現れるかを決めるためです。
今、OnTimer イベントにおいて、(3つの内の) どこかの穴からモグラを出現させます。その出現位置を0〜2の乱数を用いて次に様に決めましょう。
ここに、ボタンの表示/非表示は visible プロパティの値で指定できますから、OnTimer イベントのイベントハンドラは次のようになります。
プログラムの内容は分かりますね。
これで完成です。早速実行してみてください。モグラが現れては消える、という動作が再現されると思います。
上の【練習問題】のままではゲームになりません。そこで、モグラが現れている時にそれをたたくと (モグラが表示されている時にクリックすると)、得点が加えられるようにしましょう。
なお続けて、ゲームを行うときに以前のゲーム得点が残っていてはまずいですね。そこで、[ゲーム開始] ボタンをクリックしたときに、得点が0にもどるようにしておきます。
まず、フォームを作成しましょう。【練習問題】のフォームに上のように得点欄を付け加え、Edit の Name プロパティを「EditTokuten」としてください。
次に、得点を加える部分をプログラミングします。
下の空欄を埋めて、左のモグラ (ボタン) をクリックした時のイベントハンドラを完成させてください。
(クリックしたときに、モグラボタンが表示されていれば) 現在の得点に1 (点) を加えればよいのですね。Edit の Text プロパティが String (文字列) 型であることに注意してください。残りの2つのモグラ (ボタン) についても同様にプログラミングできます。
最後に、[開始] ボタンをクリックしたときのイベントハンドラに得点を0に戻す部分を付け加えてください。
このように得点をつけることで、ようやくゲームらしくなりました。
【基礎課題6-2】のプログラムでは、[ゲーム終了] ボタンをクリックし終了させた後も、[モグラ] ボタンをクリックすると得点が加算されるようになっています。これではまずいですね。
そこで、[ゲーム終了] ボタンをクリックすると、下のように [モグラ] ボタンが選択不可になるようにしてください。
同時に、[ゲーム開始] ボタンをクリックした後に、[モグラ] ボタンを選択可とすることも忘れないでください。
これで、ゲーム終了後にも得点が加算される、という"不正"を防ぐことができるようになりました。
実際のゲームでは、自分で [終了] ボタンをクリックするのではなく、予め制限時間が決められているのが普通です。そこで、制限時間を30秒として、この制限時間内で得点を競うというゲームにしてください。作成するプログラムの動作内容は次の通りです。
プログラムを起動すると下の画面が現れます。ここで、[ゲーム開始] ボタンをクリックするとゲームが始まります。
30秒経過すると、ゲーム終了と表示され、ゲームは終わります。
ここで、[ゲーム開始] ボタンをクリックすると、初期画面に戻り、再びゲームが開始されます。
残り時間をカウントするために、新たに Timer を加えます。したがってこのプログラムでは、2つの Timer を用います。
今までは、1匹のモグラが3つの穴のどれかから (必ず) 出てくるという設定でした。したがって、常にどれかの穴から1匹 (だけ) モグラが出てきました。
今度は、モグラは3匹でそれぞれの穴から (独立に) 出たり入ったりするというように設定を変えましょう。つまり、ある瞬間には、モグラが1匹も現れなくなり、またある瞬間には次のように複数のモグラが同時に現れることもある、ということです。
このように、【応用課題6-3】のプログラムを改良してください。
3つの乱数 (それぞれ0か1) を発生させ、それぞれを各モグラの表示/非表示の決定に用いればよいのです。