+ * Creation date: (10/23/01 10:08:07 PM)
+ */
+public void run() {
+ try {
+ MazeDomain domain = MazeDomain.getInstance();
+ Random random = new Random();
+ int size = random.nextInt(maxSize-2)+2;
+ for (int i=0; i
+ * Creation date: (10/20/01 9:08:13 PM)
+ * @author: Rob Greene
+ * @version: RJG 10/29/2001 22:40:54
+ */
+public abstract class ControlledThread implements Runnable {
+ private boolean running = false;
+ private boolean paused = false;
+ private Thread thread;
+ private long delay;
+
+/**
+ * ControlledThread constructor.
+ */
+public ControlledThread() {
+ super();
+ thread = new Thread(this, getThreadName());
+ thread.setDaemon(true);
+}
+
+
+/**
+ * Retrieve the delay that the thread will use.
+ *
+ * Creation date: (10/20/01 9:42:01 PM)
+ * @return long
+ */
+public final long getDelay() {
+ return delay;
+}
+
+
+/**
+ * Returns the name of this thread. By default, it will be the class name.
+ *
+ * Creation date: (10/21/01 2:24:36 PM)
+ */
+protected String getThreadName() {
+ String className = getClass().getName();
+ int pos = className.lastIndexOf(".") + 1;
+ if (pos > -1) return className.substring(pos);
+ else return className;
+}
+
+
+/**
+ * Returns true if the thread is paused.
+ * Note that this does not indicate if the thread is actually running.
+ *
+ * Creation date: (10/20/01 10:20:37 PM)
+ */
+public final boolean isPaused() {
+ return paused;
+}
+
+
+/**
+ * Returns true if this thread is actively running.
+ * Note that this does not indicate if the thread has been paused.
+ *
+ * Creation date: (10/20/01 10:21:07 PM)
+ */
+public final boolean isRunning() {
+ return running;
+}
+
+
+/**
+ * Perform the threadded process.
+ *
+ * Creation date: (10/20/01 10:21:40 PM)
+ */
+protected abstract void process();
+
+
+/**
+ * Resume a paused thread.
+ * Note that the thread must be in a running state.
+ *
+ * Creation date: (10/20/01 10:22:13 PM)
+ */
+public synchronized final void resume() {
+ paused = false;
+ notifyAll();
+}
+
+
+/**
+ * This is the thread control loop.
+ * To customize, implement the process method.
+ *
+ * Creation date: (10/20/01 10:22:32 PM)
+ */
+public final void run() {
+ while (isRunning()) {
+ try {
+ process(); // <-- customize here!!
+ synchronized(this) {
+ while (isRunning() && isPaused()) {
+ wait();
+ }
+ }
+ thread.sleep(getDelay());
+ } catch (Exception ex) {
+ System.out.println("Exception in " + getThreadName());
+ ex.printStackTrace(System.out);
+ }
+ }
+ paused = false;
+ running = false;
+}
+
+
+/**
+ * Set the delay used in the control thread.
+ *
+ * Creation date: (10/20/01 9:42:01 PM)
+ * @param newDelay long
+ */
+public final void setDelay(long newDelay) {
+ delay = newDelay;
+}
+
+
+/**
+ * Start the thread.
+ *
+ * Creation date: (10/20/01 10:24:37 PM)
+ */
+public final void start() {
+ if (isRunning()) {
+ resume();
+ } else {
+ running = true;
+ paused = false;
+ thread.start();
+ }
+}
+
+
+/**
+ * Stop the thread.
+ *
+ * Creation date: (10/20/01 10:24:46 PM)
+ */
+public synchronized final void stop() {
+ running = false;
+ notifyAll();
+}
+
+
+/**
+ * Suspend the thread.
+ *
+ * Creation date: (10/20/01 10:24:58 PM)
+ */
+public final void suspend() {
+ paused = true;
+}
+}
\ No newline at end of file
diff --git a/src/main/java/a2geek/games/mousemaze2001/threads/ExplosionThread.java b/src/main/java/a2geek/games/mousemaze2001/threads/ExplosionThread.java
new file mode 100644
index 0000000..c4d5083
--- /dev/null
+++ b/src/main/java/a2geek/games/mousemaze2001/threads/ExplosionThread.java
@@ -0,0 +1,55 @@
+package a2geek.games.mousemaze2001.threads;
+import java.awt.*;
+
+import a2geek.games.mousemaze2001.MouseMaze2001;
+import a2geek.games.mousemaze2001.domain.MazeDomain;
+import a2geek.games.mousemaze2001.mazeobjects.*;
+
+/**
+ * This thread runs until the explosion effect is done.
+ *
+ * Creation date: (10/23/01 10:08:07 PM)
+ * @author: Rob Greene
+ * @version: RJG 10/29/2001 22:40:54
+ */
+public class ExplosionThread extends Thread {
+ private int delay = 100;
+ private int loops = 3;
+ private Point pt = null;
+
+/**
+ * ExplosionThread constructor comment.
+ */
+public ExplosionThread(Point pt) {
+ super("ExplosionThread");
+ this.pt = pt;
+ this.setPriority(2);
+}
+
+
+/**
+ * Perform the threadded process.
+ *
+ * Creation date: (10/23/01 10:08:07 PM)
+ */
+public void run() {
+ try {
+ MazeDomain domain = MazeDomain.getInstance();
+ domain.shoot(pt);
+ for (int i=0; i
+ * Creation date: (10/21/01 2:00:35 PM)
+ */
+protected void process() {
+ MazeDomain.getInstance().explodeBombsRandomly();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/a2geek/games/mousemaze2001/threads/IntroThread.java b/src/main/java/a2geek/games/mousemaze2001/threads/IntroThread.java
new file mode 100644
index 0000000..c431f8c
--- /dev/null
+++ b/src/main/java/a2geek/games/mousemaze2001/threads/IntroThread.java
@@ -0,0 +1,32 @@
+package a2geek.games.mousemaze2001.threads;
+
+import a2geek.games.mousemaze2001.IntroPanel;
+
+/**
+ * Manage the Intro (demo) control thread.
+ *
+ * Creation date: (10/20/01 9:08:13 PM)
+ * @author: Rob Greene
+ * @version: RJG 10/23/2001 23:16:23
+ */
+public class IntroThread extends ControlledThread {
+/**
+ * IntroThread constructor comment.
+ */
+public IntroThread() {
+ super();
+ setDelay(15);
+}
+
+
+/**
+ * Instruct the IntroPanel to perform another "tick".
+ *
+ * Creation date: (10/20/01 10:25:15 PM)
+ */
+protected void process() {
+ IntroPanel introPanel = IntroPanel.getInstance();
+ introPanel.incrementTicker();
+ introPanel.repaint();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/a2geek/games/mousemaze2001/threads/LevelTranslationThread.java b/src/main/java/a2geek/games/mousemaze2001/threads/LevelTranslationThread.java
new file mode 100644
index 0000000..f25d149
--- /dev/null
+++ b/src/main/java/a2geek/games/mousemaze2001/threads/LevelTranslationThread.java
@@ -0,0 +1,68 @@
+package a2geek.games.mousemaze2001.threads;
+
+import a2geek.games.mousemaze2001.MouseMaze2001;
+import a2geek.games.mousemaze2001.domain.MazeDomain;
+import a2geek.games.mousemaze2001.mazeobjects.*;
+
+/**
+ * This thread will pause the game while the map is redrawn; semi artistically.
+ *
+ * Creation date: (10/25/01 11:45:57 PM)
+ * @author: Rob Greene
+ * @version: RJG 11/05/2001 22:35:58
+ */
+public class LevelTranslationThread extends Thread {
+ private int delay;
+ private MazeObject[][] newMap;
+
+/**
+ * LevelTranslationThread constructor comment.
+ */
+public LevelTranslationThread(String message, MazeObject[][] map) {
+ this(message, 5, map);
+}
+
+
+/**
+ * LevelTranslationThread constructor comment.
+ */
+public LevelTranslationThread(String message, int delay, MazeObject[][] map) {
+ super();
+ MazeDomain.getInstance().setPause(message);
+ MouseMaze2001.getInstance().repaintNeeded();
+ this.newMap = map;
+ this.delay = delay;
+}
+
+
+/**
+ * Pause for a short period of time and then disable the game pause.
+ *
+ * Creation date: (10/25/01 11:49:16 PM)
+ */
+public void run() {
+ MazeDomain domain = MazeDomain.getInstance();
+ MouseMaze2001 controller = MouseMaze2001.getInstance();
+ GreenTile greenTile = new GreenTile();
+ PurpleTile purpleTile = new PurpleTile();
+ try {
+ for (int x=0; x
+ * Creation date: (10/20/01 10:24:37 PM)
+ */
+public void start() {
+ thread.start();
+}
+}
\ No newline at end of file
diff --git a/src/main/resources/images/CancelButton.gif b/src/main/resources/images/CancelButton.gif
new file mode 100644
index 0000000..1ed4c91
Binary files /dev/null and b/src/main/resources/images/CancelButton.gif differ
diff --git a/src/main/resources/images/DefaultButton.gif b/src/main/resources/images/DefaultButton.gif
new file mode 100644
index 0000000..adf1c98
Binary files /dev/null and b/src/main/resources/images/DefaultButton.gif differ
diff --git a/src/main/resources/images/EasyButton.gif b/src/main/resources/images/EasyButton.gif
new file mode 100644
index 0000000..4512c1d
Binary files /dev/null and b/src/main/resources/images/EasyButton.gif differ
diff --git a/src/main/resources/images/HardButton.gif b/src/main/resources/images/HardButton.gif
new file mode 100644
index 0000000..d018875
Binary files /dev/null and b/src/main/resources/images/HardButton.gif differ
diff --git a/src/main/resources/images/ImageManager.properties b/src/main/resources/images/ImageManager.properties
new file mode 100644
index 0000000..45dfa3b
--- /dev/null
+++ b/src/main/resources/images/ImageManager.properties
@@ -0,0 +1,52 @@
+# Logo
+MouseMazeLogo.gif
+
+# Buttons
+CancelButton.gif
+DefaultButton.gif
+EasyButton.gif
+HardButton.gif
+OkButton.gif
+PreferencesButton.gif
+QuitButton.gif
+StartButton.gif
+
+# Intro sequence images
+OriginalMouseMazeGameShot.gif
+OriginalMouseMazeHelp.gif
+OriginalMouseMazeLogo.gif
+OriginalMouseMazeWin.gif
+
+# Mouse used for lives left
+InvertedMouse.gif
+
+# Static game images
+OriginalBomb.gif
+OriginalExit.gif
+OriginalMine.gif
+OriginalMouse.gif
+OriginalRobot.gif
+OriginalSkull.gif
+
+# Animated game image sequences
+OriginalBomb0.gif
+OriginalBomb1.gif
+OriginalBomb2.gif
+OriginalBomb3.gif
+OriginalMouse0.gif
+OriginalMouse1.gif
+OriginalMouse2.gif
+OriginalMouse3.gif
+OriginalMouse4.gif
+OriginalRobot0.gif
+OriginalRobot0shield1.gif
+OriginalRobot0shield2.gif
+OriginalRobot1.gif
+OriginalRobot1shield1.gif
+OriginalRobot1shield2.gif
+OriginalRobot2.gif
+OriginalRobot2shield1.gif
+OriginalRobot2shield2.gif
+OriginalRobot3.gif
+OriginalRobot3shield1.gif
+OriginalRobot3shield2.gif
diff --git a/src/main/resources/images/InvertedMouse.gif b/src/main/resources/images/InvertedMouse.gif
new file mode 100644
index 0000000..91c109b
Binary files /dev/null and b/src/main/resources/images/InvertedMouse.gif differ
diff --git a/src/main/resources/images/MouseMazeLogo.gif b/src/main/resources/images/MouseMazeLogo.gif
new file mode 100644
index 0000000..cc67aee
Binary files /dev/null and b/src/main/resources/images/MouseMazeLogo.gif differ
diff --git a/src/main/resources/images/OkButton.gif b/src/main/resources/images/OkButton.gif
new file mode 100644
index 0000000..3809cb4
Binary files /dev/null and b/src/main/resources/images/OkButton.gif differ
diff --git a/src/main/resources/images/OriginalBomb.gif b/src/main/resources/images/OriginalBomb.gif
new file mode 100644
index 0000000..d5abb4c
Binary files /dev/null and b/src/main/resources/images/OriginalBomb.gif differ
diff --git a/src/main/resources/images/OriginalBomb0.gif b/src/main/resources/images/OriginalBomb0.gif
new file mode 100644
index 0000000..d5abb4c
Binary files /dev/null and b/src/main/resources/images/OriginalBomb0.gif differ
diff --git a/src/main/resources/images/OriginalBomb1.gif b/src/main/resources/images/OriginalBomb1.gif
new file mode 100644
index 0000000..52c045a
Binary files /dev/null and b/src/main/resources/images/OriginalBomb1.gif differ
diff --git a/src/main/resources/images/OriginalBomb2.gif b/src/main/resources/images/OriginalBomb2.gif
new file mode 100644
index 0000000..3b29cb7
Binary files /dev/null and b/src/main/resources/images/OriginalBomb2.gif differ
diff --git a/src/main/resources/images/OriginalBomb3.gif b/src/main/resources/images/OriginalBomb3.gif
new file mode 100644
index 0000000..b83d9f2
Binary files /dev/null and b/src/main/resources/images/OriginalBomb3.gif differ
diff --git a/src/main/resources/images/OriginalExit.gif b/src/main/resources/images/OriginalExit.gif
new file mode 100644
index 0000000..bb64607
Binary files /dev/null and b/src/main/resources/images/OriginalExit.gif differ
diff --git a/src/main/resources/images/OriginalMine.gif b/src/main/resources/images/OriginalMine.gif
new file mode 100644
index 0000000..8b68f5d
Binary files /dev/null and b/src/main/resources/images/OriginalMine.gif differ
diff --git a/src/main/resources/images/OriginalMouse.gif b/src/main/resources/images/OriginalMouse.gif
new file mode 100644
index 0000000..9fbaa65
Binary files /dev/null and b/src/main/resources/images/OriginalMouse.gif differ
diff --git a/src/main/resources/images/OriginalMouse0.gif b/src/main/resources/images/OriginalMouse0.gif
new file mode 100644
index 0000000..9fbaa65
Binary files /dev/null and b/src/main/resources/images/OriginalMouse0.gif differ
diff --git a/src/main/resources/images/OriginalMouse1.gif b/src/main/resources/images/OriginalMouse1.gif
new file mode 100644
index 0000000..5635409
Binary files /dev/null and b/src/main/resources/images/OriginalMouse1.gif differ
diff --git a/src/main/resources/images/OriginalMouse2.gif b/src/main/resources/images/OriginalMouse2.gif
new file mode 100644
index 0000000..e6a1fee
Binary files /dev/null and b/src/main/resources/images/OriginalMouse2.gif differ
diff --git a/src/main/resources/images/OriginalMouse3.gif b/src/main/resources/images/OriginalMouse3.gif
new file mode 100644
index 0000000..26301b9
Binary files /dev/null and b/src/main/resources/images/OriginalMouse3.gif differ
diff --git a/src/main/resources/images/OriginalMouse4.gif b/src/main/resources/images/OriginalMouse4.gif
new file mode 100644
index 0000000..a120c73
Binary files /dev/null and b/src/main/resources/images/OriginalMouse4.gif differ
diff --git a/src/main/resources/images/OriginalMouseMazeGameShot.gif b/src/main/resources/images/OriginalMouseMazeGameShot.gif
new file mode 100644
index 0000000..fe1585f
Binary files /dev/null and b/src/main/resources/images/OriginalMouseMazeGameShot.gif differ
diff --git a/src/main/resources/images/OriginalMouseMazeHelp.gif b/src/main/resources/images/OriginalMouseMazeHelp.gif
new file mode 100644
index 0000000..324ed36
Binary files /dev/null and b/src/main/resources/images/OriginalMouseMazeHelp.gif differ
diff --git a/src/main/resources/images/OriginalMouseMazeLogo.gif b/src/main/resources/images/OriginalMouseMazeLogo.gif
new file mode 100644
index 0000000..e2fe039
Binary files /dev/null and b/src/main/resources/images/OriginalMouseMazeLogo.gif differ
diff --git a/src/main/resources/images/OriginalMouseMazeWin.gif b/src/main/resources/images/OriginalMouseMazeWin.gif
new file mode 100644
index 0000000..db3a427
Binary files /dev/null and b/src/main/resources/images/OriginalMouseMazeWin.gif differ
diff --git a/src/main/resources/images/OriginalPlayer.gif b/src/main/resources/images/OriginalPlayer.gif
new file mode 100644
index 0000000..237af01
Binary files /dev/null and b/src/main/resources/images/OriginalPlayer.gif differ
diff --git a/src/main/resources/images/OriginalRobot.gif b/src/main/resources/images/OriginalRobot.gif
new file mode 100644
index 0000000..4d46528
Binary files /dev/null and b/src/main/resources/images/OriginalRobot.gif differ
diff --git a/src/main/resources/images/OriginalRobot0.gif b/src/main/resources/images/OriginalRobot0.gif
new file mode 100644
index 0000000..5e5d712
Binary files /dev/null and b/src/main/resources/images/OriginalRobot0.gif differ
diff --git a/src/main/resources/images/OriginalRobot0shield1.gif b/src/main/resources/images/OriginalRobot0shield1.gif
new file mode 100644
index 0000000..29e89a2
Binary files /dev/null and b/src/main/resources/images/OriginalRobot0shield1.gif differ
diff --git a/src/main/resources/images/OriginalRobot0shield2.gif b/src/main/resources/images/OriginalRobot0shield2.gif
new file mode 100644
index 0000000..dbe31bb
Binary files /dev/null and b/src/main/resources/images/OriginalRobot0shield2.gif differ
diff --git a/src/main/resources/images/OriginalRobot1.gif b/src/main/resources/images/OriginalRobot1.gif
new file mode 100644
index 0000000..0b170e1
Binary files /dev/null and b/src/main/resources/images/OriginalRobot1.gif differ
diff --git a/src/main/resources/images/OriginalRobot1shield1.gif b/src/main/resources/images/OriginalRobot1shield1.gif
new file mode 100644
index 0000000..74a287c
Binary files /dev/null and b/src/main/resources/images/OriginalRobot1shield1.gif differ
diff --git a/src/main/resources/images/OriginalRobot1shield2.gif b/src/main/resources/images/OriginalRobot1shield2.gif
new file mode 100644
index 0000000..0fed1f4
Binary files /dev/null and b/src/main/resources/images/OriginalRobot1shield2.gif differ
diff --git a/src/main/resources/images/OriginalRobot2.gif b/src/main/resources/images/OriginalRobot2.gif
new file mode 100644
index 0000000..09c1394
Binary files /dev/null and b/src/main/resources/images/OriginalRobot2.gif differ
diff --git a/src/main/resources/images/OriginalRobot2shield1.gif b/src/main/resources/images/OriginalRobot2shield1.gif
new file mode 100644
index 0000000..04d0065
Binary files /dev/null and b/src/main/resources/images/OriginalRobot2shield1.gif differ
diff --git a/src/main/resources/images/OriginalRobot2shield2.gif b/src/main/resources/images/OriginalRobot2shield2.gif
new file mode 100644
index 0000000..d994f39
Binary files /dev/null and b/src/main/resources/images/OriginalRobot2shield2.gif differ
diff --git a/src/main/resources/images/OriginalRobot3.gif b/src/main/resources/images/OriginalRobot3.gif
new file mode 100644
index 0000000..a05fd5a
Binary files /dev/null and b/src/main/resources/images/OriginalRobot3.gif differ
diff --git a/src/main/resources/images/OriginalRobot3shield1.gif b/src/main/resources/images/OriginalRobot3shield1.gif
new file mode 100644
index 0000000..3ede296
Binary files /dev/null and b/src/main/resources/images/OriginalRobot3shield1.gif differ
diff --git a/src/main/resources/images/OriginalRobot3shield2.gif b/src/main/resources/images/OriginalRobot3shield2.gif
new file mode 100644
index 0000000..7ccb0b6
Binary files /dev/null and b/src/main/resources/images/OriginalRobot3shield2.gif differ
diff --git a/src/main/resources/images/OriginalSkull.gif b/src/main/resources/images/OriginalSkull.gif
new file mode 100644
index 0000000..52d2b4c
Binary files /dev/null and b/src/main/resources/images/OriginalSkull.gif differ
diff --git a/src/main/resources/images/PreferencesButton.gif b/src/main/resources/images/PreferencesButton.gif
new file mode 100644
index 0000000..aee1601
Binary files /dev/null and b/src/main/resources/images/PreferencesButton.gif differ
diff --git a/src/main/resources/images/QuitButton.gif b/src/main/resources/images/QuitButton.gif
new file mode 100644
index 0000000..df8090b
Binary files /dev/null and b/src/main/resources/images/QuitButton.gif differ
diff --git a/src/main/resources/images/StartButton.gif b/src/main/resources/images/StartButton.gif
new file mode 100644
index 0000000..b6ae110
Binary files /dev/null and b/src/main/resources/images/StartButton.gif differ
diff --git a/src/main/resources/images/robot.gif b/src/main/resources/images/robot.gif
new file mode 100644
index 0000000..54011ea
Binary files /dev/null and b/src/main/resources/images/robot.gif differ
diff --git a/src/main/resources/settings/default.properties b/src/main/resources/settings/default.properties
new file mode 100644
index 0000000..f1a5e3e
--- /dev/null
+++ b/src/main/resources/settings/default.properties
@@ -0,0 +1,14 @@
+animatedImages=true
+bombsPerLevel=2
+fixedRobotShotRange=true
+maxBombsPerLevel=5
+maxRobotShotRange=4
+maxRobotVisibilityRange=5
+robotMineFrequency=10
+robotShootFrequency=80
+robotShotRange=2
+robotVisibilityRange=4
+shootingMouse=true
+unlimitedGameLevels=false
+unlimitedLives=false
+shieldedRobots=true
\ No newline at end of file
diff --git a/src/main/resources/settings/easy.properties b/src/main/resources/settings/easy.properties
new file mode 100644
index 0000000..d414639
--- /dev/null
+++ b/src/main/resources/settings/easy.properties
@@ -0,0 +1,14 @@
+animatedImages=true
+bombsPerLevel=1
+fixedRobotShotRange=true
+maxBombsPerLevel=5
+maxRobotShotRange=4
+maxRobotVisibilityRange=5
+robotMineFrequency=5
+robotShootFrequency=30
+robotShotRange=1
+robotVisibilityRange=2
+shootingMouse=true
+unlimitedGameLevels=false
+unlimitedLives=false
+shieldedRobots=false
\ No newline at end of file
diff --git a/src/main/resources/settings/hard.properties b/src/main/resources/settings/hard.properties
new file mode 100644
index 0000000..a3e3250
--- /dev/null
+++ b/src/main/resources/settings/hard.properties
@@ -0,0 +1,14 @@
+animatedImages=true
+bombsPerLevel=4
+fixedRobotShotRange=false
+maxBombsPerLevel=5
+maxRobotShotRange=4
+maxRobotVisibilityRange=5
+robotMineFrequency=40
+robotShootFrequency=90
+robotShotRange=3
+robotVisibilityRange=4
+shootingMouse=true
+unlimitedGameLevels=false
+unlimitedLives=false
+shieldedRobots=true
diff --git a/src/main/resources/sounds/boing.wav b/src/main/resources/sounds/boing.wav
new file mode 100644
index 0000000..a640363
Binary files /dev/null and b/src/main/resources/sounds/boing.wav differ
diff --git a/src/main/resources/sounds/clickfast.wav b/src/main/resources/sounds/clickfast.wav
new file mode 100644
index 0000000..8657d4e
Binary files /dev/null and b/src/main/resources/sounds/clickfast.wav differ
diff --git a/src/main/resources/sounds/explode.wav b/src/main/resources/sounds/explode.wav
new file mode 100644
index 0000000..63f0389
Binary files /dev/null and b/src/main/resources/sounds/explode.wav differ
diff --git a/src/main/resources/sounds/explosion.wav b/src/main/resources/sounds/explosion.wav
new file mode 100644
index 0000000..1084c23
Binary files /dev/null and b/src/main/resources/sounds/explosion.wav differ
diff --git a/src/main/resources/sounds/explosion2.wav b/src/main/resources/sounds/explosion2.wav
new file mode 100644
index 0000000..442dc90
Binary files /dev/null and b/src/main/resources/sounds/explosion2.wav differ