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

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


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


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


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



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

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

各ボタンコンポーネントの Name プロパティを
次の通り指定してください。
ボタン Name
左のモグラ jButtonMogura1
中央のモグラ jButtonMogura2
右のモグラ jButtonMogura3
ゲーム開始 jButtonStart
ゲーム終了 jButtonStop

さて、前節と同様、[ゲーム開始] および [ゲーム終了] ボタンのイベントハンドラにおいて、
スレッド
の作動開始と停止を記述します

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

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

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


 ここで、Math.abs( rand.nextInt() % 3 ) というのが出てきましたね。 
これ(rand.nextInt())は、0〜1の値が乱数で出ます。そして3で割った余りを・・・0・1・2に当てているのです。

 以前(4章の分岐処理)に勉強しているので、わかりますよね?
これで完成です。早速実行してみてください。モグラが現れては消える、という動作が再現されると思います。


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


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

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

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


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

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

このように得点をつけることで、ようやくゲームらしくなりました。
基礎課題6−2の解答


基礎課題6−3

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

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


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

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

基礎課題6−3の解答


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

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

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

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

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

応用課題6−3の解答