タイピングゲーム制作続き
前回の続きでタイピングゲームを作成していきます。
前回の記事を読まれてない方はまずはこちらからお読みいただければと思います。
→
タイピングゲーム制作
今回はタイピングにかかった時間を計測する機能を追加してみます。
時間を計測する手段として、
Calendarクラスを利用する方法があります。
Calendarクラスは日付や時刻を表示・操作するために用意されたクラスですが、ゲームプログラミングでは時間を計測するためによく使われます。
public class typing_applet extends Applet implements KeyListener{
…省略
private Calendar cal; //カレンダークラス
private long startTime; //ゲーム開始時間
private long endTime; //ゲーム終了時間
private String demoStr; //経過時間文字列
…省略
}
まずはメインクラスであるtyping_appletクラスに上記のフィールドを追加します。
public void gameStart(){
qetNum = 0;
gameConfig = GAME_CONFIG_PLAYING;
cal = Calendar.getInstance();
startTime = cal.getTimeInMillis();
}
gameStart()メソッドはゲーム開始時に呼ばれるメソッドです。
ゲーム開始時に開始時刻を取得しておきます。
そのためにまず、
getInstance()メソッドを使用してCalendarオブジェクトを生成します。
ここで少し違和感を感じられたかもしれません。
オブジェクトの生成を、new演算子ではなくメソッドで行っています。
これは、getInstance()メソッドの戻り値が"static Calendar"と、static演算子がついているから可能であり、通常他のクラスではこのようなことはできません。
Calendarクラスは日付や時刻を管理するクラスであり、new演算子を使ってインスタンスをいくつも作成できるようなしくみは必要ないため、特殊な形となっています。
Calendarオブジェクトを生成したら、
getTimeInMillis()メソッドにより現在時刻をlong型で取得します。
public void gameEnd(){
long sumTime;
cal = Calendar.getInstance();
endTime = cal.getTimeInMillis();
gameConfig = GAME_CONFIG_DEMO;
sumTime = (long)(endTime - startTime) / 1000;
demoStr = "TotalTime : " + sumTime + "sec";
}
gameEnd()メソッドはゲーム終了時に呼ばれるメソッドです。
ゲーム終了時にゲーム終了時刻を取得します。
このときもう一度、getInstance()メソッドを呼び出す必要があります。
これはCalendarオブジェクトには、getInstance()メソッドを呼び出した時点での、日付・時刻の情報が格納されるため、もう一度取得し直す必要があるためです。
ゲーム終了までにかかった時間は「ゲーム終了時刻」から「ゲーム開始時間」を減算してやることでわかります。
またこのとき、getTimeInMillis()メソッドは
ミリ秒単位表される現在時刻を返しているので、1000で除算してやる必要があります。
サンプルコードは下記からダウンロードできます。
タイピングゲームサンプルコード
これで、タイピングにかかった時間を計測することができました。
タイピングゲームのサンプルはここまでにしますが、ここからさらにゲーム性を高めるための工夫を考えてみてください。