今回は、あまりにも簡単すぎるのでゲームの難易度を少し上げようと思います。
全体のソースコードは以下にあります。
https://gist.github.com/mrp1q7z/d42c75408e7a62683428
もぐらは出てきたらずっと同じ位置にいるのでゲームとしては簡単すぎて面白くありません。そこで、出てきて一定時間たったら引っ込み、別の場所に出るというように、神出鬼没にしてみたいと思います。
もぐらを引っ込めるためのタイマーを宣言します。(45行目)
private Timer mMoleTimer = null;
もぐらを表示する際、一定時間経過したら引っ込める処理を記述します。(181行目〜)
if (mMoleTimer != null) {
mMoleTimer.cancel();
}
long delay = (long) (Math.random() * (1000 - 100) + 100);
mMoleTimer = new Timer(true);
mMoleTimer.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
printMole();
}
});
}
}, delay);
ゲームオーバー時にタイマーの終了処理を行います。(134行目〜)
mMoleTimer.cancel();
mMoleTimer = null;
もぐらがヒョコヒョコとあちこちに出てくるようになったと思います。
難易度も上がってなかなかスコアが伸びません。
ただここで問題が...
もぐらを叩こうとがんばっていると、「Game Over」が出てきて
出てきた瞬間にタップしてしまうので、すぐにリプレイされてしまいます。
そこで、「Game Over」をしばらく表示しておくようにします。
画面を修正、「画面タップでリプレイ」という文字にIDを付けます。
<TextView
android:id="@+id/replay_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/game_over_text"
android:layout_centerHorizontal="true"
android:text="画面タップでリプレイ"
android:textSize="20sp"
android:textColor="#888888"/>
この文字を保持する変数を宣言します。(46行目)
private TextView mReplayText;
変数に値をセットします。(64行目)
mReplayText = (TextView) findViewById(R.id.replay_text);
ゲームスタート時に非表示にします。(107行目)
mReplayText.setVisibility(View.INVISIBLE);
ゲームオーバー時に2秒後に表示するようにします。(137行目〜)
Timer timer = new Timer(true);
timer.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
mReplayText.setVisibility(View.VISIBLE);
}
});
}
}, 2000);
Game Over をタップしても「画面タップでリプレイ」が表示されていない場合は、何もしないようにします。(217行目〜)
if (mReplayText.getVisibility() != View.VISIBLE) {
return;
}
「画面タップでリプレイ」が表示されてないときはリプレイしなくなりました。
結構ゲームらしくなりました。
まだまだ改善の余地はあると思いますが、「モグラ叩きゲームで学ぶアンドロイドプログラミング」はこれにて終了とします。
長らくのお付き合いありがとうございました。
アプリは Google Play にて公開しています。
ソースコードは GitHub で公開しています。
https://github.com/mrp1q7z/WhacMole
※ライセンスはGPLv3となっています。
※以下のファイルは「小森平」さん(http://taira-komori.jpn.org/)の著作です。
res/raw/middle_punch1.mp3
res/raw/swing1.mp3