diff --git a/src/game/GameModel.java b/src/game/GameModel.java index 3a911f8bb1b4b4f9a233d607b2d962b667ffed40..27bcc3fcd55e2150beb6f8e6c67e9a9a52d1ee01 100644 --- a/src/game/GameModel.java +++ b/src/game/GameModel.java @@ -6,21 +6,19 @@ public class GameModel extends AbstractTableModel { private GameBoard board; private GameRunner runner; - private GameRunner2 runner2; //TODO runners private boolean editable; public GameModel(int height, int width) { board = new GameBoard(height, width); runner = new GameRunner(this, board); - runner2 = new GameRunner2(this, board); - runner2.start(); + runner.start(); editable = true; } public GameModel(GameBoard board){ this.board = board; - runner2 = new GameRunner2(this, board); - runner2.start(); + runner = new GameRunner(this, board); + runner.start(); editable = true; } @@ -42,24 +40,11 @@ public class GameModel extends AbstractTableModel { public void start() { editable=false; - //runner.start(); - //TODO runners - runner2.resumeRunner(); + runner.resumeRunner(); } public void stop(){ - /* - runner.stopRunner(); - while (runner.isAlive()){ - try { - Thread.sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - */ - //TODO runners - runner2.pauseRunner(); + runner.pauseRunner(); synchronized (board) { editable = true; } diff --git a/src/game/GameRunner.java b/src/game/GameRunner.java index 73899ea9c1b332d6bc426ad1a5a03d14673f35e2..df006630ece5cf55b3addadcf53a8609922ad1de 100644 --- a/src/game/GameRunner.java +++ b/src/game/GameRunner.java @@ -2,30 +2,57 @@ package game; public class GameRunner extends Thread { - private GameModel model; - private GameBoard board; - volatile private boolean stopSignal; - - public GameRunner(GameModel model, GameBoard board) { - this.model=model; - this.board=board; - stopSignal=false; - } - - public void stopRunner(){ - stopSignal=true; - } - - public void run(){ - stopSignal = false; - while (!stopSignal){ - board.step(); - model.fireTableDataChanged(); - try { - sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); + private final GameModel model; + private final GameBoard board; + private volatile boolean paused; + + public GameRunner(GameBoard board) { + this.board = board; + model = null; + paused = true; + } + + public GameRunner(GameModel model, GameBoard board) { + this.model = model; + this.board = board; + paused = true; + } + + public void run() { + synchronized (board) { + while (true) { + while (paused) { + try { + board.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + while (!paused) { + board.step(); + if (model != null) + model.fireTableDataChanged(); + try { + sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + } + + public void pauseRunner() { + paused = true; + } + + public void resumeRunner() { + if (paused) { + synchronized (board) { + paused = false; + board.notify(); } } - } + } } diff --git a/src/game/GameRunner2.java b/src/game/GameRunner2.java deleted file mode 100644 index a646ac06bc5b5a76a6128c92a5dfdf70db49609c..0000000000000000000000000000000000000000 --- a/src/game/GameRunner2.java +++ /dev/null @@ -1,58 +0,0 @@ -package game; - -public class GameRunner2 extends Thread { - - private final GameModel model; - private final GameBoard board; - private volatile boolean paused; - - public GameRunner2(GameBoard board) { - this.board = board; - model = null; - paused = true; - } - - public GameRunner2(GameModel model, GameBoard board) { - this.model = model; - this.board = board; - paused = true; - } - - public void run() { - synchronized (board) { - while (true) { - while (paused) { - try { - board.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - while (!paused) { - board.step(); - if (model != null) - model.fireTableDataChanged(); - try { - sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - } - } - - public void pauseRunner() { - paused = true; - } - - public void resumeRunner() { - if (paused) { - synchronized (board) { - paused = false; - board.notify(); - } - } - } -} diff --git a/src/game/StartModel.java b/src/game/StartModel.java index a3d704806fc3e57281b702da1eb17219fdfcd4f0..0c0c82a2bf9ede4b7c6a7e7f7eca35ae6b4fbeb3 100644 --- a/src/game/StartModel.java +++ b/src/game/StartModel.java @@ -19,6 +19,7 @@ public class StartModel { FileFilter filter = new FileNameExtensionFilter("JSON File (.json)", "json"); fileChooser.setFileFilter(filter); } + //TODO frameinit? public void loadFromFile(){ int returnVal = fileChooser.showOpenDialog(startFrame); @@ -28,6 +29,7 @@ public class StartModel { board = GameBoardJson.loadFromFile(selected); startFrame.setTextFieldMessage(selected.getName() + "loaded."); } catch (FileNotFoundException e) { + board = null; //TODO Kell-e? e.printStackTrace(); } }