01: /*
02: * Copyright 2001-2007 Geert Bevin <gbevin[remove] at uwyn dot com>
03: * Distributed under the terms of either:
04: * - the common development and distribution license (CDDL), v1.0; or
05: * - the GNU Lesser General Public License, v2.1 or later
06: * $Id: Game.java 3732 2007-05-02 20:45:59Z gbevin $
07: */
08: package tutorial.numberguess.backend;
09:
10: import java.util.Calendar;
11: import java.util.Date;
12: import java.util.Random;
13:
14: /**
15: * The lifecycle of a number guess game is represented by this class.
16: *
17: * @author Geert Bevin (gbevin[remove] at uwyn dot com)
18: * @version $Revision: 3732 $
19: */
20: public class Game {
21: private final static Random randomNumbers = new Random();
22:
23: private Date start;
24: private int answer;
25: private int guesses;
26:
27: /**
28: * When a new instance of the class is created, it's regarded as started
29: * a new game. The answer is randomly generated, the start time is
30: * registered and the number of guesses is initialized to zero.
31: */
32: public Game() {
33: registerStart();
34: generateAnswer();
35: }
36:
37: /**
38: * Registers the start of the game
39: */
40: private synchronized void registerStart() {
41: start = Calendar.getInstance().getTime();
42: }
43:
44: /**
45: * Generates the number that has to be guessed in this game.
46: */
47: private void generateAnswer() {
48: synchronized (randomNumbers) {
49: answer = randomNumbers.nextInt(101);
50: }
51: }
52:
53: /**
54: * Calculates how much seconds that have elapsed since the start of the
55: * game.
56: *
57: * @return A <code>long</code> with the number of elapsed seconds.
58: */
59: public long getDuration() {
60: Date now = Calendar.getInstance().getTime();
61: long duration_milliseconds = now.getTime() - start.getTime();
62: long duration_seconds = duration_milliseconds / 1000;
63:
64: return duration_seconds;
65: }
66:
67: /**
68: * Retrieves the correct answer.
69: *
70: * @return An <code>int</code> with the value of the correct answer.
71: */
72: public int getAnswer() {
73: return answer;
74: }
75:
76: /**
77: * Increases the number of guesses that have been made.
78: */
79: public synchronized void increaseGuesses() {
80: guesses++;
81: }
82:
83: /**
84: * Retrieves the number of guesses that have already been made.
85: *
86: * @return An <code>int</code> with the number of guesses.
87: */
88: public int getGuesses() {
89: return guesses;
90: }
91: }
|