From af68db873cbece0aeebcfa000a1756eb8657f475 Mon Sep 17 00:00:00 2001 From: Cagdas Date: Wed, 18 Nov 2020 21:47:13 +0300 Subject: [PATCH 01/59] Add mvn exec:java target --- README.md | 6 ++++++ pom.xml | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/README.md b/README.md index c2c0ff8..68885d3 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,12 @@ You will need a Java JDK 8+ and maven 3+. Execute **mvn clean package assembly:single** to build the release package. +# How to run it ? + +**mvn clean** +**mvn package** +**mvn exec:java** + ## How to play ? - SPACE - Start a new game diff --git a/pom.xml b/pom.xml index c8fd6d0..9e992f8 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,14 @@ @{project.version} + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + spypunk.tetris.Main + + From 80665808fc63a4f0bced13ba191fdce07c8709b1 Mon Sep 17 00:00:00 2001 From: Cagdas Date: Wed, 18 Nov 2020 21:54:18 +0300 Subject: [PATCH 02/59] Update jdk14 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9bcf999..42fe87f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,3 @@ language: java jdk: - - oraclejdk8 + - oraclejdk14 From 5586e523dffc58a051296419b16b02b3441c0244 Mon Sep 17 00:00:00 2001 From: Cagdas Date: Sun, 6 Dec 2020 18:10:17 +0300 Subject: [PATCH 03/59] Minor format update --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 68885d3..a3303fa 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,14 @@ You will need a Java JDK 8+ and maven 3+. Execute **mvn clean package assembly:single** to build the release package. # How to run it ? +``` +mvn clean -**mvn clean** -**mvn package** -**mvn exec:java** +mvn package + +mvn exec:java + +``` ## How to play ? From bf14533296fd17c244268ef9de64e20c3a3594d9 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 13:13:14 +0300 Subject: [PATCH 04/59] Command type SHOW_SCORES is added. --- .../controller/command/cache/TetrisControllerCommandCache.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCache.java b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCache.java index b9c5027..4951daa 100644 --- a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCache.java +++ b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCache.java @@ -26,7 +26,8 @@ public enum TetrisControllerCommandType { OPEN_PROJECT_URL, SHAPE_LOCKED, GAME_OVER, - ROWS_COMPLETED + ROWS_COMPLETED, + SHOW_SCORES } TetrisControllerCommand getTetrisControllerCommand(TetrisControllerCommandType tetrisControllerCommandType); From 3889d357943864c7b268aabc75fd224b7b600e4f Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 13:39:16 +0300 Subject: [PATCH 05/59] createShowScoresCommand added.(temporarily its content is same as pauseCommand) --- .../cache/TetrisControllerCommandCacheImpl.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java index 16a5019..c22a6c5 100644 --- a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java +++ b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java @@ -64,6 +64,8 @@ public TetrisControllerCommandCacheImpl(final TetrisService tetrisService, tetrisControllerCommands.put(TetrisControllerCommandType.SHAPE_LOCKED, createShapeLockedCommand()); tetrisControllerCommands.put(TetrisControllerCommandType.GAME_OVER, createGameOverCommand()); tetrisControllerCommands.put(TetrisControllerCommandType.ROWS_COMPLETED, createRowsCompletedCommand()); + tetrisControllerCommands.put(TetrisControllerCommandType.SHOW_SCORES, createShowScoresCommand()); + } @Override @@ -93,6 +95,19 @@ private TetrisControllerCommand createPauseCommand() { } }; } + private TetrisControllerCommand createShowScoresCommand() { + return () -> { + tetrisService.pause(); + + final State state = tetris.getState(); + + if (State.PAUSED.equals(state)) { + soundService.pauseMusic(); + } else if (State.RUNNING.equals(state)) { + soundService.resumeMusic(); + } + }; + } private TetrisControllerCommand createMoveCommand(final Movement movement) { return () -> tetrisService.move(movement); From 41862e5b42ae89f8b076fe350059f08ad75a4489 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 13:42:15 +0300 Subject: [PATCH 06/59] SHOW_SCORES command assigned to the H key. --- .../ui/controller/input/TetrisControllerInputHandlerImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/spypunk/tetris/ui/controller/input/TetrisControllerInputHandlerImpl.java b/src/main/java/spypunk/tetris/ui/controller/input/TetrisControllerInputHandlerImpl.java index 37caee4..191fd53 100644 --- a/src/main/java/spypunk/tetris/ui/controller/input/TetrisControllerInputHandlerImpl.java +++ b/src/main/java/spypunk/tetris/ui/controller/input/TetrisControllerInputHandlerImpl.java @@ -48,6 +48,8 @@ public TetrisControllerInputHandlerImpl(final TetrisControllerCommandCache tetri releasedKeyEventCommandTypes.put(KeyEvent.VK_PAGE_UP, TetrisControllerCommandType.INCREASE_VOLUME); releasedKeyEventCommandTypes.put(KeyEvent.VK_PAGE_DOWN, TetrisControllerCommandType.DECREASE_VOLUME); releasedKeyEventCommandTypes.put(KeyEvent.VK_CONTROL, TetrisControllerCommandType.HARD_DROP); + releasedKeyEventCommandTypes.put(KeyEvent.VK_H, TetrisControllerCommandType.SHOW_SCORES); + } @Override From 7030a2d20d1dca90bb04d2502112c469b2b3d97b Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 14:16:48 +0300 Subject: [PATCH 07/59] empty openTable method is added. --- src/main/java/spypunk/tetris/service/TetrisService.java | 2 ++ src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 6 +++++- .../java/spypunk/tetris/ui/view/TetrisMainViewImpl.java | 1 - 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisService.java b/src/main/java/spypunk/tetris/service/TetrisService.java index 24aa953..b461068 100644 --- a/src/main/java/spypunk/tetris/service/TetrisService.java +++ b/src/main/java/spypunk/tetris/service/TetrisService.java @@ -23,4 +23,6 @@ public interface TetrisService { void pause(); void mute(); + + void openTable(); } diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 7b14c0e..5a2310f 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -79,7 +79,11 @@ public void update() { public void pause() { tetris.setState(tetris.getState().onPause()); } - + @Override + public void openTable() { + + + } @Override public void move(final Movement movement) { if (isMovementAllowed()) { diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisMainViewImpl.java b/src/main/java/spypunk/tetris/ui/view/TetrisMainViewImpl.java index 245c98e..7e86f52 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisMainViewImpl.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisMainViewImpl.java @@ -163,7 +163,6 @@ public TetrisMainViewImpl(final TetrisController tetrisController, frame.add(centerPanel, BorderLayout.CENTER); frame.add(bottomPanel, BorderLayout.SOUTH); frame.pack(); - frame.setLocationRelativeTo(null); } From f38f65fbf0722d1cc73b078bdf294fac87ff3767 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 14:17:56 +0300 Subject: [PATCH 08/59] openTable method is renamed --- src/main/java/spypunk/tetris/service/TetrisService.java | 2 +- src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisService.java b/src/main/java/spypunk/tetris/service/TetrisService.java index b461068..836a752 100644 --- a/src/main/java/spypunk/tetris/service/TetrisService.java +++ b/src/main/java/spypunk/tetris/service/TetrisService.java @@ -24,5 +24,5 @@ public interface TetrisService { void mute(); - void openTable(); + void showScores(); } diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 5a2310f..bdc7e89 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -80,7 +80,7 @@ public void pause() { tetris.setState(tetris.getState().onPause()); } @Override - public void openTable() { + public void showScores() { } From 67774ba41d5843051c6327f4d19e28de845d8b7f Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 14:26:23 +0300 Subject: [PATCH 09/59] showScores is filled, now it creates a new empty window when pressed key-H --- src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 5 ++++- .../command/cache/TetrisControllerCommandCacheImpl.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index bdc7e89..f01276f 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -21,6 +21,7 @@ import javax.inject.Inject; import javax.inject.Singleton; +import javax.swing.JFrame; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -81,7 +82,9 @@ public void pause() { } @Override public void showScores() { - + tetris.setState(tetris.getState().onPause()); + JFrame frame =new JFrame(); + frame.setVisible(true); } @Override diff --git a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java index c22a6c5..b2c4b18 100644 --- a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java +++ b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java @@ -97,7 +97,7 @@ private TetrisControllerCommand createPauseCommand() { } private TetrisControllerCommand createShowScoresCommand() { return () -> { - tetrisService.pause(); + tetrisService.showScores(); final State state = tetris.getState(); From b3f5fefdc270d3613d1d2444341b09d5100afe0c Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 15:38:09 +0300 Subject: [PATCH 10/59] High-Scores window will open only while game is running --- .../spypunk/tetris/service/TetrisServiceImpl.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index f01276f..e1469ad 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -80,12 +80,19 @@ public void update() { public void pause() { tetris.setState(tetris.getState().onPause()); } + JFrame frame=new JFrame("High scores"); @Override public void showScores() { - tetris.setState(tetris.getState().onPause()); - JFrame frame =new JFrame(); - frame.setVisible(true); + if(tetris.getState().equals(State.RUNNING)){ + tetris.setState(tetris.getState().onPause()); + frame.setBounds(500, 500, 500, 500); + if(frame.isVisible()) + frame.setVisible(false); + else + frame.setVisible(true); + } + } @Override public void move(final Movement movement) { From 3556c0b689783675ad9fa56d7290cbe841f100d6 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 15:57:17 +0300 Subject: [PATCH 11/59] High-Scores window will open every time pressed H --- src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index e1469ad..5830c11 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -11,6 +11,7 @@ import static spypunk.tetris.constants.TetrisConstants.HEIGHT; import static spypunk.tetris.constants.TetrisConstants.WIDTH; +import java.awt.Color; import java.awt.Point; import java.awt.Rectangle; import java.util.List; @@ -85,12 +86,12 @@ public void pause() { public void showScores() { if(tetris.getState().equals(State.RUNNING)){ tetris.setState(tetris.getState().onPause()); + } frame.setBounds(500, 500, 500, 500); if(frame.isVisible()) frame.setVisible(false); else frame.setVisible(true); - } } From 14fd3d550dacb15af9404f09bfdf100f21fd0e11 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 16:07:08 +0300 Subject: [PATCH 12/59] Dimensions and background color changed. --- src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 5830c11..6385a6b 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -12,6 +12,7 @@ import static spypunk.tetris.constants.TetrisConstants.WIDTH; import java.awt.Color; +import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.util.List; @@ -87,7 +88,10 @@ public void showScores() { if(tetris.getState().equals(State.RUNNING)){ tetris.setState(tetris.getState().onPause()); } - frame.setBounds(500, 500, 500, 500); + frame.getContentPane().setBackground(Color.BLACK); + frame.setPreferredSize(new Dimension(400, 300)); + frame.pack(); + frame.setLocationRelativeTo(null); if(frame.isVisible()) frame.setVisible(false); else From 3c20b8dcbda78a756ac939706ee9b0c4ea004346 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 19:47:06 +0300 Subject: [PATCH 13/59] Makefile is added --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..51d8115 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +build: + mvn clean package assembly:single + mvn clean + mvn package + mvn exec:java + From a849ff575b44a7728f13dcf6b8fb7890d1b7ad08 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 19:56:08 +0300 Subject: [PATCH 14/59] TetrisScoresView is created for high-score window. --- .../tetris/ui/view/TetrisScoresView.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java new file mode 100644 index 0000000..dc793bf --- /dev/null +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -0,0 +1,18 @@ +package spypunk.tetris.ui.view; + +import javax.swing.JFrame; +import java.awt.Color; +import java.awt.Dimension; + +public class TetrisScoresView { + JFrame frame; + public TetrisScoresView(){ + frame=new JFrame("High scores"); + } + public void show(){ + frame.getContentPane().setBackground(Color.BLACK); + frame.setPreferredSize(new Dimension(400, 300)); + frame.pack(); + frame.setLocationRelativeTo(null); + } +} From 5db1de1e8ac40f3f16c3a0ef618d8799b24722fa Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 19:58:08 +0300 Subject: [PATCH 15/59] showScores's content is moved to TetrisScoresView. --- .../tetris/service/TetrisServiceImpl.java | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 6385a6b..d586106 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -11,8 +11,6 @@ import static spypunk.tetris.constants.TetrisConstants.HEIGHT; import static spypunk.tetris.constants.TetrisConstants.WIDTH; -import java.awt.Color; -import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.util.List; @@ -23,7 +21,6 @@ import javax.inject.Inject; import javax.inject.Singleton; -import javax.swing.JFrame; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -36,6 +33,7 @@ import spypunk.tetris.model.ShapeType; import spypunk.tetris.model.Tetris; import spypunk.tetris.model.Tetris.State; +import spypunk.tetris.ui.view.TetrisScoresView; import spypunk.tetris.model.TetrisEvent; import spypunk.tetris.model.TetrisInstance; @@ -82,22 +80,14 @@ public void update() { public void pause() { tetris.setState(tetris.getState().onPause()); } - JFrame frame=new JFrame("High scores"); + + TetrisScoresView tetrisScoresView=new TetrisScoresView(); @Override public void showScores() { if(tetris.getState().equals(State.RUNNING)){ tetris.setState(tetris.getState().onPause()); } - frame.getContentPane().setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(400, 300)); - frame.pack(); - frame.setLocationRelativeTo(null); - if(frame.isVisible()) - frame.setVisible(false); - else - frame.setVisible(true); - - + tetrisScoresView.show(); } @Override public void move(final Movement movement) { From ab7bef369f41d8ecaded93fcde583ebae7c4ef74 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 20:02:52 +0300 Subject: [PATCH 16/59] Visibility bug fixed. --- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index dc793bf..6eba95f 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -14,5 +14,6 @@ public void show(){ frame.setPreferredSize(new Dimension(400, 300)); frame.pack(); frame.setLocationRelativeTo(null); + frame.setVisible(true); } } From 0a0a7f314c1e7c7bb4f412f584f54e08236202ab Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 20:06:28 +0300 Subject: [PATCH 17/59] Minor changes. --- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 6eba95f..97c9df4 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -8,12 +8,12 @@ public class TetrisScoresView { JFrame frame; public TetrisScoresView(){ frame=new JFrame("High scores"); - } - public void show(){ frame.getContentPane().setBackground(Color.BLACK); frame.setPreferredSize(new Dimension(400, 300)); frame.pack(); frame.setLocationRelativeTo(null); + } + public void show(){ frame.setVisible(true); } } From 2ad25e25bcaa85441db35da4eece6f0249a844d4 Mon Sep 17 00:00:00 2001 From: Bugra Date: Wed, 31 Mar 2021 20:50:06 +0300 Subject: [PATCH 18/59] A test label added to score window. --- .../spypunk/tetris/ui/view/TetrisScoresView.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 97c9df4..bfc89c2 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -3,17 +3,28 @@ import javax.swing.JFrame; import java.awt.Color; import java.awt.Dimension; +import javax.swing.JLabel; + + +public class TetrisScoresView{ -public class TetrisScoresView { JFrame frame; + public TetrisScoresView(){ frame=new JFrame("High scores"); - frame.getContentPane().setBackground(Color.BLACK); + frame.getContentPane().setBackground(Color.WHITE); frame.setPreferredSize(new Dimension(400, 300)); frame.pack(); frame.setLocationRelativeTo(null); + } public void show(){ + print(); frame.setVisible(true); } + public void print(){ + final JLabel firstLabel = new JLabel("Test"); + firstLabel.setForeground(Color.BLACK); + frame.add(firstLabel); + } } From 860810bbba9dad4366fe86cf401b8da719396cdf Mon Sep 17 00:00:00 2001 From: Bugra Date: Sat, 3 Apr 2021 00:45:13 +0300 Subject: [PATCH 19/59] Background and font color changed. --- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index bfc89c2..bd1335d 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -5,14 +5,14 @@ import java.awt.Dimension; import javax.swing.JLabel; +import static spypunk.tetris.ui.constants.TetrisUIConstants.DEFAULT_FONT_COLOR; public class TetrisScoresView{ JFrame frame; - public TetrisScoresView(){ frame=new JFrame("High scores"); - frame.getContentPane().setBackground(Color.WHITE); + frame.getContentPane().setBackground(Color.BLACK); frame.setPreferredSize(new Dimension(400, 300)); frame.pack(); frame.setLocationRelativeTo(null); @@ -24,7 +24,7 @@ public void show(){ } public void print(){ final JLabel firstLabel = new JLabel("Test"); - firstLabel.setForeground(Color.BLACK); + firstLabel.setForeground(DEFAULT_FONT_COLOR); frame.add(firstLabel); } } From ee4341c5cc4b5606bdb5fb5b7aaf58fcca1af96a Mon Sep 17 00:00:00 2001 From: Bugra Date: Sat, 3 Apr 2021 00:51:37 +0300 Subject: [PATCH 20/59] Score table is added. --- score_table.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 score_table.txt diff --git a/score_table.txt b/score_table.txt new file mode 100644 index 0000000..d5df3e8 --- /dev/null +++ b/score_table.txt @@ -0,0 +1,3 @@ +A 500 +B 100 +C 200 From 2499da68b1c82df3fa53fc78512c65ad660a40db Mon Sep 17 00:00:00 2001 From: Bugra Date: Sat, 3 Apr 2021 00:52:23 +0300 Subject: [PATCH 21/59] Score table reader method is added. --- .../tetris/ui/view/TetrisScoresView.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index bd1335d..f6aea7d 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -3,6 +3,11 @@ import javax.swing.JFrame; import java.awt.Color; import java.awt.Dimension; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Scanner; + import javax.swing.JLabel; import static spypunk.tetris.ui.constants.TetrisUIConstants.DEFAULT_FONT_COLOR; @@ -10,12 +15,14 @@ public class TetrisScoresView{ JFrame frame; + ArrayList lines; public TetrisScoresView(){ frame=new JFrame("High scores"); frame.getContentPane().setBackground(Color.BLACK); frame.setPreferredSize(new Dimension(400, 300)); frame.pack(); frame.setLocationRelativeTo(null); + lines=new ArrayList<>(); } public void show(){ @@ -27,4 +34,18 @@ public void print(){ firstLabel.setForeground(DEFAULT_FONT_COLOR); frame.add(firstLabel); } + public void readScores(){ + try { + File myObj = new File("score_table.txt"); + Scanner myReader = new Scanner(myObj); + while (myReader.hasNextLine()) { + String data = myReader.nextLine(); + lines.add(data); + } + myReader.close(); + } catch (FileNotFoundException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + } + } } From 70a34ff41df70d518c071f72c7b6f2f28ad440d4 Mon Sep 17 00:00:00 2001 From: Bugra Date: Sat, 3 Apr 2021 00:59:12 +0300 Subject: [PATCH 22/59] Score table type is changed to hash-map --- .../java/spypunk/tetris/ui/view/TetrisScoresView.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index f6aea7d..7d88550 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -6,6 +6,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; +import java.util.HashMap; import java.util.Scanner; import javax.swing.JLabel; @@ -15,14 +16,15 @@ public class TetrisScoresView{ JFrame frame; - ArrayList lines; + HashMap lines; public TetrisScoresView(){ frame=new JFrame("High scores"); frame.getContentPane().setBackground(Color.BLACK); frame.setPreferredSize(new Dimension(400, 300)); frame.pack(); frame.setLocationRelativeTo(null); - lines=new ArrayList<>(); + lines=new HashMap<>(); + readScores(); } public void show(){ @@ -40,7 +42,10 @@ public void readScores(){ Scanner myReader = new Scanner(myObj); while (myReader.hasNextLine()) { String data = myReader.nextLine(); - lines.add(data); + String name=data.substring(0,data.indexOf(" ")); + String score_s=data.substring(data.indexOf(" ")+1); + Integer score=Integer.parseInt(score_s); + lines.put(name, score); } myReader.close(); } catch (FileNotFoundException e) { From fcde1c683526c8455661fdc49e7ee9f755649480 Mon Sep 17 00:00:00 2001 From: Bugra Date: Sat, 3 Apr 2021 23:56:53 +0300 Subject: [PATCH 23/59] Some changes in the High-Score window. --- .../tetris/ui/view/TetrisScoresView.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 7d88550..a6ec0e1 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -2,28 +2,38 @@ import javax.swing.JFrame; import java.awt.Color; +import java.awt.Container; import java.awt.Dimension; +import java.awt.Font; import java.io.File; import java.io.FileNotFoundException; -import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; -import javax.swing.JLabel; +import javax.swing.JTextArea; + import static spypunk.tetris.ui.constants.TetrisUIConstants.DEFAULT_FONT_COLOR; +import spypunk.tetris.ui.font.cache.FontCacheImpl; public class TetrisScoresView{ JFrame frame; HashMap lines; + Container contentPane; + public TetrisScoresView(){ + lines=new HashMap<>(); + frame=new JFrame("High scores"); - frame.getContentPane().setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(400, 300)); + contentPane=frame.getContentPane(); + + contentPane.setBackground(Color.BLACK); + frame.setPreferredSize(new Dimension(300, 300)); + frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); - lines=new HashMap<>(); + readScores(); } @@ -32,9 +42,26 @@ public void show(){ frame.setVisible(true); } public void print(){ - final JLabel firstLabel = new JLabel("Test"); - firstLabel.setForeground(DEFAULT_FONT_COLOR); - frame.add(firstLabel); + int counter=1; + String s=""; + for ( String key : lines.keySet() ) { + s+="\n "+counter+") "+key+" "+lines.get(key); + counter++; + } + System.out.println(s); + final JTextArea textArea = new JTextArea(s); + textArea.setBackground(Color.BLACK); + textArea.setForeground(DEFAULT_FONT_COLOR); + textArea.setEditable(false); + + FontCacheImpl obj=new FontCacheImpl(); + + Font font=obj.getDefaultFont(); + float size=font.getSize()+8.0f; + textArea.setFont(font.deriveFont(size)); + frame.add(textArea); + + } public void readScores(){ try { From 0a84c043fbef54b110b18be56456c5b1e60b584c Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 00:56:46 +0300 Subject: [PATCH 24/59] Sort method added. --- .../tetris/ui/view/TetrisScoresView.java | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index a6ec0e1..a65c542 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -7,9 +7,14 @@ import java.awt.Font; import java.io.File; import java.io.FileNotFoundException; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; import java.util.Scanner; - import javax.swing.JTextArea; @@ -19,11 +24,11 @@ public class TetrisScoresView{ JFrame frame; - HashMap lines; + HashMap hm; Container contentPane; public TetrisScoresView(){ - lines=new HashMap<>(); + hm=new HashMap<>(); frame=new JFrame("High scores"); contentPane=frame.getContentPane(); @@ -42,13 +47,13 @@ public void show(){ frame.setVisible(true); } public void print(){ + hm=sort(hm); int counter=1; String s=""; - for ( String key : lines.keySet() ) { - s+="\n "+counter+") "+key+" "+lines.get(key); + for ( String key : hm.keySet() ) { + s+="\n "+counter+") "+key+" "+hm.get(key); counter++; } - System.out.println(s); final JTextArea textArea = new JTextArea(s); textArea.setBackground(Color.BLACK); textArea.setForeground(DEFAULT_FONT_COLOR); @@ -72,7 +77,7 @@ public void readScores(){ String name=data.substring(0,data.indexOf(" ")); String score_s=data.substring(data.indexOf(" ")+1); Integer score=Integer.parseInt(score_s); - lines.put(name, score); + hm.put(name, score); } myReader.close(); } catch (FileNotFoundException e) { @@ -80,4 +85,19 @@ public void readScores(){ e.printStackTrace(); } } + public HashMap sort(HashMap hashMap){ + List>list=new LinkedList>(hashMap.entrySet()); + Collections.sort(list,new Comparator>(){ + + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }); + HashMap temp=new LinkedHashMap<>(); + for(Map.Entry aa:list){ + temp.put(aa.getKey(),aa.getValue()); + } + return temp; + } } From eba3d756e27cb44d99f21fd9fc952b848966c41f Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 18:49:17 +0300 Subject: [PATCH 25/59] Minor changes. --- .../spypunk/tetris/ui/view/TetrisScoresView.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index a65c542..965d611 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -30,9 +30,8 @@ public class TetrisScoresView{ public TetrisScoresView(){ hm=new HashMap<>(); - frame=new JFrame("High scores"); + frame=new JFrame(); contentPane=frame.getContentPane(); - contentPane.setBackground(Color.BLACK); frame.setPreferredSize(new Dimension(300, 300)); frame.setResizable(false); @@ -49,19 +48,19 @@ public void show(){ public void print(){ hm=sort(hm); int counter=1; - String s=""; + String s=" HIGH SCORES\n"; for ( String key : hm.keySet() ) { s+="\n "+counter+") "+key+" "+hm.get(key); counter++; } - final JTextArea textArea = new JTextArea(s); + JTextArea textArea = new JTextArea(s); textArea.setBackground(Color.BLACK); textArea.setForeground(DEFAULT_FONT_COLOR); textArea.setEditable(false); - FontCacheImpl obj=new FontCacheImpl(); + FontCacheImpl fontCache=new FontCacheImpl(); - Font font=obj.getDefaultFont(); + Font font=fontCache.getDefaultFont(); float size=font.getSize()+8.0f; textArea.setFont(font.deriveFont(size)); frame.add(textArea); @@ -91,7 +90,7 @@ public HashMap sort(HashMap hashMap){ @Override public int compare(Map.Entry o1, Map.Entry o2) { - return o1.getValue().compareTo(o2.getValue()); + return o2.getValue().compareTo(o1.getValue()); } }); HashMap temp=new LinkedHashMap<>(); From f8be09911a857515e9bffecc7067e3b27fd17aa0 Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 20:48:48 +0300 Subject: [PATCH 26/59] getMinScore added. --- .../java/spypunk/tetris/ui/view/TetrisScoresView.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 965d611..ca4f6dd 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -38,7 +38,7 @@ public TetrisScoresView(){ frame.pack(); frame.setLocationRelativeTo(null); - readScores(); + readFile(); } public void show(){ @@ -67,7 +67,7 @@ public void print(){ } - public void readScores(){ + public void readFile(){ try { File myObj = new File("score_table.txt"); Scanner myReader = new Scanner(myObj); @@ -99,4 +99,8 @@ public int compare(Map.Entry o1, Map.Entry o2) } return temp; } + public Integer getMinScore(){ + Integer min = Collections.min(hm.values()); + return min; + } } From 9c04fe1ff0b1daa1caa678a3b63b55217d1e39ce Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 20:58:53 +0300 Subject: [PATCH 27/59] Refactoring and detecting of game over state. --- .../command/cache/TetrisControllerCommandCacheImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java index b2c4b18..1896760 100644 --- a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java +++ b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java @@ -129,7 +129,10 @@ private TetrisControllerCommand createMuteCommand() { } private TetrisControllerCommand createGameOverCommand() { - return () -> soundService.playMusic(Sound.GAME_OVER); + return () -> { + soundService.playMusic(Sound.GAME_OVER); + System.out.println("Game is over."); + }; } private TetrisControllerCommand createRowsCompletedCommand() { From ad98323dedebf69d0c8a1857996693d14bccb4c8 Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 21:10:21 +0300 Subject: [PATCH 28/59] NameInputView has been added. --- .../tetris/ui/view/TetrisNameInputView.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java new file mode 100644 index 0000000..df279a8 --- /dev/null +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -0,0 +1,34 @@ +package spypunk.tetris.ui.view; + +import javax.swing.JFrame; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; + + +public class TetrisNameInputView{ + + JFrame frame; + Container contentPane; + + public TetrisNameInputView(){ + frame=new JFrame(); + contentPane=frame.getContentPane(); + contentPane.setBackground(Color.BLACK); + frame.setPreferredSize(new Dimension(300, 300)); + frame.setResizable(false); + frame.pack(); + frame.setLocationRelativeTo(null); + + + } + public void show(){ + print(); + frame.setVisible(true); + } + public void print(){ + + + } + +} From f2df628f69c0883f85a30b50eb206b09df54977b Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 21:11:39 +0300 Subject: [PATCH 29/59] Preparation for a new method. --- src/main/java/spypunk/tetris/service/TetrisService.java | 3 +++ src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/spypunk/tetris/service/TetrisService.java b/src/main/java/spypunk/tetris/service/TetrisService.java index 836a752..621699b 100644 --- a/src/main/java/spypunk/tetris/service/TetrisService.java +++ b/src/main/java/spypunk/tetris/service/TetrisService.java @@ -25,4 +25,7 @@ public interface TetrisService { void mute(); void showScores(); + + void takeName(); + } diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index d586106..651e8b5 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -341,4 +341,9 @@ private int getLevelSpeed(final int level) { private boolean isMovementAllowed() { return isTetrisRunning() && !isCurrentShapeLocked(); } + + @Override + public void takeName() { + + } } From 58f81a45a4eaf23ee0d2cd1bcfeb35fa3d97e71a Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 21:12:39 +0300 Subject: [PATCH 30/59] Minor changes to increase readability. --- .../tetris/service/TetrisServiceImpl.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 651e8b5..818b305 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -81,14 +81,6 @@ public void pause() { tetris.setState(tetris.getState().onPause()); } - TetrisScoresView tetrisScoresView=new TetrisScoresView(); - @Override - public void showScores() { - if(tetris.getState().equals(State.RUNNING)){ - tetris.setState(tetris.getState().onPause()); - } - tetrisScoresView.show(); - } @Override public void move(final Movement movement) { if (isMovementAllowed()) { @@ -342,8 +334,17 @@ private boolean isMovementAllowed() { return isTetrisRunning() && !isCurrentShapeLocked(); } + TetrisScoresView tetrisScoresView=new TetrisScoresView(); + @Override + public void showScores() { + if(tetris.getState().equals(State.RUNNING)){ + tetris.setState(tetris.getState().onPause()); + } + tetrisScoresView.show(); + } + @Override public void takeName() { - + } } From cc2bb96827e5b48676e9c0364e623ab50f9e8bd4 Mon Sep 17 00:00:00 2001 From: Bugra Date: Sun, 4 Apr 2021 21:25:17 +0300 Subject: [PATCH 31/59] To show NameInputView when game is over. --- src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 5 +++-- .../command/cache/TetrisControllerCommandCacheImpl.java | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 818b305..7015568 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -33,6 +33,7 @@ import spypunk.tetris.model.ShapeType; import spypunk.tetris.model.Tetris; import spypunk.tetris.model.Tetris.State; +import spypunk.tetris.ui.view.TetrisNameInputView; import spypunk.tetris.ui.view.TetrisScoresView; import spypunk.tetris.model.TetrisEvent; import spypunk.tetris.model.TetrisInstance; @@ -342,9 +343,9 @@ public void showScores() { } tetrisScoresView.show(); } - + TetrisNameInputView tetrisNameInputView=new TetrisNameInputView(); @Override public void takeName() { - + tetrisNameInputView.show(); } } diff --git a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java index 1896760..585b459 100644 --- a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java +++ b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java @@ -132,6 +132,7 @@ private TetrisControllerCommand createGameOverCommand() { return () -> { soundService.playMusic(Sound.GAME_OVER); System.out.println("Game is over."); + tetrisService.takeName(); }; } From 53750216f3756fea3771ae8e2160d7564e55d58a Mon Sep 17 00:00:00 2001 From: Bugra Date: Mon, 5 Apr 2021 00:32:58 +0300 Subject: [PATCH 32/59] Condition added. --- src/main/java/spypunk/tetris/service/TetrisServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 7015568..7e08618 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -346,6 +346,7 @@ public void showScores() { TetrisNameInputView tetrisNameInputView=new TetrisNameInputView(); @Override public void takeName() { - tetrisNameInputView.show(); + if(tetris.getScore()>tetrisScoresView.getMinScore()) + tetrisNameInputView.show(); } } From da36ba153d3c28001a35ab5cf3a8526d6fc70699 Mon Sep 17 00:00:00 2001 From: Bugra Date: Mon, 5 Apr 2021 00:34:03 +0300 Subject: [PATCH 33/59] A text field and a button are added. --- .../tetris/ui/view/TetrisNameInputView.java | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index df279a8..5c89264 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -1,34 +1,85 @@ package spypunk.tetris.ui.view; import javax.swing.JFrame; +import javax.swing.JLabel; + import java.awt.Color; import java.awt.Container; import java.awt.Dimension; +import javax.swing.JPanel; +import javax.swing.JButton; +import javax.swing.JTextField; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.BorderLayout; +import java.awt.Font; +import static spypunk.tetris.ui.constants.TetrisUIConstants.DEFAULT_FONT_COLOR; +import spypunk.tetris.ui.font.cache.FontCacheImpl; public class TetrisNameInputView{ - JFrame frame; - Container contentPane; + private final JFrame frame; + private final Container contentPane; + private final JPanel firstPanel; + private final JButton submitButton; + private final JTextField textField; + private final JLabel label; + + private final FontCacheImpl fontCache; + private final Font font; public TetrisNameInputView(){ + frame=new JFrame(); contentPane=frame.getContentPane(); contentPane.setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(300, 300)); + frame.setPreferredSize(new Dimension(350, 100)); + frame.setLayout(new BorderLayout()); frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); - + firstPanel=new JPanel(); + textField = new JTextField(10); + submitButton = new JButton("SUBMIT"); + label=new JLabel(); + + fontCache=new FontCacheImpl(); + font=fontCache.getDefaultFont(); } + public void show(){ print(); frame.setVisible(true); } + public void print(){ + + submitButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.out.println(textField.getText()); + } + }); + + submitButton.setBackground(Color.BLACK); + submitButton.setForeground(DEFAULT_FONT_COLOR); + submitButton.setFont(font); + + textField.setBackground(Color.BLACK); + textField.setForeground(DEFAULT_FONT_COLOR); + textField.setFont(font); + + label.setForeground(DEFAULT_FONT_COLOR); + label.setFont(font); + label.setText("PLEASE ENTER\nYOUR NAME"); + firstPanel.setBackground(Color.BLACK); + firstPanel.add(textField); + firstPanel.add(submitButton); - + frame.add(firstPanel,BorderLayout.CENTER); + frame.add(label,BorderLayout.NORTH); } } From 63deb0950761ea55c1ac0a25adf712233277ae64 Mon Sep 17 00:00:00 2001 From: Bugra Date: Mon, 5 Apr 2021 00:49:31 +0300 Subject: [PATCH 34/59] To print score in the name input view. --- .../tetris/service/TetrisServiceImpl.java | 4 +++- .../tetris/ui/view/TetrisNameInputView.java | 24 +++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 7e08618..ef95c1c 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -346,7 +346,9 @@ public void showScores() { TetrisNameInputView tetrisNameInputView=new TetrisNameInputView(); @Override public void takeName() { - if(tetris.getScore()>tetrisScoresView.getMinScore()) + if(tetris.getScore()>tetrisScoresView.getMinScore()){ + tetrisNameInputView.setScore(tetris.getScore()); tetrisNameInputView.show(); + } } } diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index 5c89264..f490c49 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -7,6 +7,7 @@ import java.awt.Container; import java.awt.Dimension; import javax.swing.JPanel; +import javax.swing.JTextArea; import javax.swing.JButton; import javax.swing.JTextField; import java.awt.event.ActionEvent; @@ -24,17 +25,19 @@ public class TetrisNameInputView{ private final JPanel firstPanel; private final JButton submitButton; private final JTextField textField; - private final JLabel label; + private final JTextArea textArea; private final FontCacheImpl fontCache; private final Font font; + private int score; + public TetrisNameInputView(){ frame=new JFrame(); contentPane=frame.getContentPane(); contentPane.setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(350, 100)); + frame.setPreferredSize(new Dimension(370, 150)); frame.setLayout(new BorderLayout()); frame.setResizable(false); frame.pack(); @@ -43,7 +46,7 @@ public TetrisNameInputView(){ firstPanel=new JPanel(); textField = new JTextField(10); submitButton = new JButton("SUBMIT"); - label=new JLabel(); + textArea=new JTextArea(); fontCache=new FontCacheImpl(); font=fontCache.getDefaultFont(); @@ -71,15 +74,22 @@ public void actionPerformed(ActionEvent e) { textField.setForeground(DEFAULT_FONT_COLOR); textField.setFont(font); - label.setForeground(DEFAULT_FONT_COLOR); - label.setFont(font); - label.setText("PLEASE ENTER\nYOUR NAME"); + textArea.setBackground(Color.BLACK); + textArea.setForeground(DEFAULT_FONT_COLOR); + textArea.setFont(font); + + textArea.setText("\n YOUR SCORE IS "+score+"\n PLEASE ENTER\n YOUR NAME"); + textArea.setEditable(false); + firstPanel.setBackground(Color.BLACK); firstPanel.add(textField); firstPanel.add(submitButton); frame.add(firstPanel,BorderLayout.CENTER); - frame.add(label,BorderLayout.NORTH); + frame.add(textArea,BorderLayout.NORTH); + } + public void setScore(int score){ + this.score=score; } } From 84ab4ad9ccd4ddcc4bde80bc2f261df0de5cb3a0 Mon Sep 17 00:00:00 2001 From: Bugra Date: Mon, 5 Apr 2021 00:58:33 +0300 Subject: [PATCH 35/59] Submit button action is changed. --- .../spypunk/tetris/ui/view/TetrisNameInputView.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index f490c49..41279b8 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -1,8 +1,6 @@ package spypunk.tetris.ui.view; import javax.swing.JFrame; -import javax.swing.JLabel; - import java.awt.Color; import java.awt.Container; import java.awt.Dimension; @@ -31,6 +29,7 @@ public class TetrisNameInputView{ private final Font font; private int score; + private String name; public TetrisNameInputView(){ @@ -62,7 +61,8 @@ public void print(){ submitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - System.out.println(textField.getText()); + name=textField.getText(); + frame.setVisible(false); } }); @@ -73,6 +73,7 @@ public void actionPerformed(ActionEvent e) { textField.setBackground(Color.BLACK); textField.setForeground(DEFAULT_FONT_COLOR); textField.setFont(font); + textField.setText(""); textArea.setBackground(Color.BLACK); textArea.setForeground(DEFAULT_FONT_COLOR); @@ -91,5 +92,8 @@ public void actionPerformed(ActionEvent e) { public void setScore(int score){ this.score=score; } + public String getName(){ + return name; + } } From c06444f58095c13dc223f7b701a34046cc83b76b Mon Sep 17 00:00:00 2001 From: Bugra Date: Mon, 5 Apr 2021 01:23:21 +0300 Subject: [PATCH 36/59] removeMin and putEntry methods are added. --- .../tetris/ui/view/TetrisScoresView.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index ca4f6dd..8676a7f 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -10,11 +10,14 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Scanner; +import java.util.Map.Entry; + import javax.swing.JTextArea; @@ -103,4 +106,18 @@ public Integer getMinScore(){ Integer min = Collections.min(hm.values()); return min; } + public void putScoreAndName(String name,Integer score){ + removeMinScoreElement(); + hm.put(name, score); + hm=sort(hm); + } + public void removeMinScoreElement(){ + Iterator> itr = hm.entrySet().iterator(); + + while(itr.hasNext()) { + itr.next(); + } + itr.remove(); + + } } From e38975d9b9f159ed7ad4ec1553818ffe72522a58 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 00:25:27 +0300 Subject: [PATCH 37/59] Small changes. --- .../spypunk/tetris/ui/view/TetrisNameInputView.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index 41279b8..65594bd 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -28,8 +28,7 @@ public class TetrisNameInputView{ private final FontCacheImpl fontCache; private final Font font; - private int score; - private String name; + private String name=""; public TetrisNameInputView(){ @@ -51,12 +50,12 @@ public TetrisNameInputView(){ font=fontCache.getDefaultFont(); } - public void show(){ - print(); + public void show(int score){ + print(score); frame.setVisible(true); } - public void print(){ + public void print(int score){ submitButton.addActionListener(new ActionListener() { @Override @@ -89,9 +88,6 @@ public void actionPerformed(ActionEvent e) { frame.add(firstPanel,BorderLayout.CENTER); frame.add(textArea,BorderLayout.NORTH); } - public void setScore(int score){ - this.score=score; - } public String getName(){ return name; } From 4522e6796853a5d5f3839631a040ef5a5448292c Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 01:10:41 +0300 Subject: [PATCH 38/59] Update method is added. --- .../tetris/ui/view/TetrisScoresView.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 8676a7f..312b38b 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -29,6 +29,7 @@ public class TetrisScoresView{ JFrame frame; HashMap hm; Container contentPane; + JTextArea textArea; public TetrisScoresView(){ hm=new HashMap<>(); @@ -40,7 +41,7 @@ public TetrisScoresView(){ frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); - + textArea = new JTextArea(); readFile(); } @@ -56,7 +57,7 @@ public void print(){ s+="\n "+counter+") "+key+" "+hm.get(key); counter++; } - JTextArea textArea = new JTextArea(s); + textArea.setText(s); textArea.setBackground(Color.BLACK); textArea.setForeground(DEFAULT_FONT_COLOR); textArea.setEditable(false); @@ -69,6 +70,17 @@ public void print(){ frame.add(textArea); + } + public void update(){ + + int counter=1; + String s=" HIGH SCORES\n"; + for ( String key : hm.keySet() ) { + s+="\n "+counter+") "+key+" "+hm.get(key); + counter++; + } + + textArea.setText(s); } public void readFile(){ try { @@ -91,10 +103,10 @@ public HashMap sort(HashMap hashMap){ List>list=new LinkedList>(hashMap.entrySet()); Collections.sort(list,new Comparator>(){ - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return o2.getValue().compareTo(o1.getValue()); - } + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return o2.getValue().compareTo(o1.getValue()); + } }); HashMap temp=new LinkedHashMap<>(); for(Map.Entry aa:list){ @@ -109,7 +121,7 @@ public Integer getMinScore(){ public void putScoreAndName(String name,Integer score){ removeMinScoreElement(); hm.put(name, score); - hm=sort(hm); + update(); } public void removeMinScoreElement(){ Iterator> itr = hm.entrySet().iterator(); From 5ad08569810ca933402455b0ca7f238c5f89b3d1 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 18:06:05 +0300 Subject: [PATCH 39/59] Clean-up and some minor changes. --- .../tetris/ui/view/TetrisScoresView.java | 75 ++++++++++--------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 312b38b..58378d2 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -17,44 +17,50 @@ import java.util.Map; import java.util.Scanner; import java.util.Map.Entry; - import javax.swing.JTextArea; - import static spypunk.tetris.ui.constants.TetrisUIConstants.DEFAULT_FONT_COLOR; import spypunk.tetris.ui.font.cache.FontCacheImpl; public class TetrisScoresView{ - JFrame frame; - HashMap hm; - Container contentPane; - JTextArea textArea; + private final JFrame frame; + private HashMap hashMap; + private final Container contentPane; + private final JTextArea textArea; + private final FontCacheImpl fontCache; + private final Font font ; public TetrisScoresView(){ - hm=new HashMap<>(); - frame=new JFrame(); + hashMap=new HashMap<>(); + contentPane=frame.getContentPane(); contentPane.setBackground(Color.BLACK); + frame.setPreferredSize(new Dimension(300, 300)); frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); + textArea = new JTextArea(); + fontCache=new FontCacheImpl(); + font=fontCache.getDefaultFont(); + readFile(); - } + public void show(){ print(); frame.setVisible(true); } - public void print(){ - hm=sort(hm); + + private void print(){ + hashMap=sort(hashMap); int counter=1; String s=" HIGH SCORES\n"; - for ( String key : hm.keySet() ) { - s+="\n "+counter+") "+key+" "+hm.get(key); + for ( String key : hashMap.keySet() ) { + s+="\n "+counter+") "+key+" "+hashMap.get(key); counter++; } textArea.setText(s); @@ -62,27 +68,23 @@ public void print(){ textArea.setForeground(DEFAULT_FONT_COLOR); textArea.setEditable(false); - FontCacheImpl fontCache=new FontCacheImpl(); - - Font font=fontCache.getDefaultFont(); float size=font.getSize()+8.0f; textArea.setFont(font.deriveFont(size)); frame.add(textArea); - - } - public void update(){ + private void update(){ + hashMap=sort(hashMap); int counter=1; String s=" HIGH SCORES\n"; - for ( String key : hm.keySet() ) { - s+="\n "+counter+") "+key+" "+hm.get(key); + for ( String key : hashMap.keySet() ) { + s+="\n "+counter+") "+key+" "+hashMap.get(key); counter++; } - textArea.setText(s); } - public void readFile(){ + + private void readFile(){ try { File myObj = new File("score_table.txt"); Scanner myReader = new Scanner(myObj); @@ -91,7 +93,7 @@ public void readFile(){ String name=data.substring(0,data.indexOf(" ")); String score_s=data.substring(data.indexOf(" ")+1); Integer score=Integer.parseInt(score_s); - hm.put(name, score); + hashMap.put(name, score); } myReader.close(); } catch (FileNotFoundException e) { @@ -99,7 +101,8 @@ public void readFile(){ e.printStackTrace(); } } - public HashMap sort(HashMap hashMap){ + + private HashMap sort(HashMap hashMap){ List>list=new LinkedList>(hashMap.entrySet()); Collections.sort(list,new Comparator>(){ @@ -109,27 +112,27 @@ public int compare(Map.Entry o1, Map.Entry o2) } }); HashMap temp=new LinkedHashMap<>(); - for(Map.Entry aa:list){ - temp.put(aa.getKey(),aa.getValue()); + for(Map.Entry e:list){ + temp.put(e.getKey(),e.getValue()); } return temp; } + public Integer getMinScore(){ - Integer min = Collections.min(hm.values()); - return min; + return Collections.min(hashMap.values()); } + public void putScoreAndName(String name,Integer score){ removeMinScoreElement(); - hm.put(name, score); + hashMap.put(name, score); update(); } - public void removeMinScoreElement(){ - Iterator> itr = hm.entrySet().iterator(); - while(itr.hasNext()) { + private void removeMinScoreElement(){ + Iterator> itr = hashMap.entrySet().iterator(); + while(itr.hasNext()) itr.next(); - } - itr.remove(); - + + itr.remove(); } } From 14ebafea8101bc6ca36f684cec7bcfef90c44cfa Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 18:24:32 +0300 Subject: [PATCH 40/59] Exception handling --- .../tetris/ui/view/TetrisScoresView.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 58378d2..88feae1 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -119,7 +119,14 @@ public int compare(Map.Entry o1, Map.Entry o2) } public Integer getMinScore(){ - return Collections.min(hashMap.values()); + + try { + return Collections.min(hashMap.values()); + } catch (Exception e) { + return 0; + } + + } public void putScoreAndName(String name,Integer score){ @@ -129,10 +136,15 @@ public void putScoreAndName(String name,Integer score){ } private void removeMinScoreElement(){ - Iterator> itr = hashMap.entrySet().iterator(); - while(itr.hasNext()) - itr.next(); - - itr.remove(); + try { + Iterator> itr = hashMap.entrySet().iterator(); + while(itr.hasNext()) + itr.next(); + + itr.remove(); + } catch (Exception e) { + System.err.println("Empty hashmap error"); + } + } } From d0affd3c1bf90b7a2d86538be943dd1565bbcaf0 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 18:35:55 +0300 Subject: [PATCH 41/59] max size is added. --- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 88feae1..2244fd7 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -30,6 +30,7 @@ public class TetrisScoresView{ private final JTextArea textArea; private final FontCacheImpl fontCache; private final Font font ; + private final int SIZE=5; public TetrisScoresView(){ frame=new JFrame(); @@ -119,18 +120,17 @@ public int compare(Map.Entry o1, Map.Entry o2) } public Integer getMinScore(){ - try { return Collections.min(hashMap.values()); } catch (Exception e) { return 0; } - } public void putScoreAndName(String name,Integer score){ - removeMinScoreElement(); + if(hashMap.size()+1>SIZE) + removeMinScoreElement(); hashMap.put(name, score); update(); } @@ -140,7 +140,6 @@ private void removeMinScoreElement(){ Iterator> itr = hashMap.entrySet().iterator(); while(itr.hasNext()) itr.next(); - itr.remove(); } catch (Exception e) { System.err.println("Empty hashmap error"); From 192e17bbcbccdc008458c7ff727628374ebe1912 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 18:38:15 +0300 Subject: [PATCH 42/59] control whether the name is added or not. --- .../java/spypunk/tetris/ui/view/TetrisNameInputView.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index 65594bd..a42ae0b 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -29,6 +29,7 @@ public class TetrisNameInputView{ private final Font font; private String name=""; + public boolean isAdded=false;; public TetrisNameInputView(){ @@ -55,12 +56,14 @@ public void show(int score){ frame.setVisible(true); } - public void print(int score){ + private void print(int score){ submitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { name=textField.getText(); + if(isAdded) + isAdded=false; frame.setVisible(false); } }); From 4bf1e613f2882e31704ebae39d495af163631a0d Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 19:03:44 +0300 Subject: [PATCH 43/59] Submit only works when name is not empty --- .../java/spypunk/tetris/ui/view/TetrisNameInputView.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index a42ae0b..b0977e0 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -62,9 +62,11 @@ private void print(int score){ @Override public void actionPerformed(ActionEvent e) { name=textField.getText(); - if(isAdded) - isAdded=false; - frame.setVisible(false); + if(!name.equals("")){ + if(isAdded) + isAdded=false; + frame.setVisible(false); + } } }); From 18ada9bd0b8909b98764c896f048a95d9e53361a Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 19:04:34 +0300 Subject: [PATCH 44/59] isAdded control --- .../spypunk/tetris/service/TetrisServiceImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index ef95c1c..7578a3f 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -341,14 +341,20 @@ public void showScores() { if(tetris.getState().equals(State.RUNNING)){ tetris.setState(tetris.getState().onPause()); } - tetrisScoresView.show(); + if(tetrisNameInputView.isAdded==false && !tetrisNameInputView.getName().equals("")){ + String name=tetrisNameInputView.getName(); + Integer score=tetris.getScore(); + tetrisScoresView.putScoreAndName(name, score); + tetrisNameInputView.isAdded=true; + } + tetrisScoresView.show(); } + TetrisNameInputView tetrisNameInputView=new TetrisNameInputView(); @Override public void takeName() { if(tetris.getScore()>tetrisScoresView.getMinScore()){ - tetrisNameInputView.setScore(tetris.getScore()); - tetrisNameInputView.show(); + tetrisNameInputView.show(tetris.getScore()); } } } From 367f348e573ee11689a65f4e566b222000ae92c5 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 19:18:15 +0300 Subject: [PATCH 45/59] Making the list persistent. --- .../tetris/ui/view/TetrisScoresView.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 2244fd7..f3759f7 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -7,6 +7,8 @@ import java.awt.Font; import java.io.File; import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -87,21 +89,35 @@ private void update(){ private void readFile(){ try { - File myObj = new File("score_table.txt"); - Scanner myReader = new Scanner(myObj); - while (myReader.hasNextLine()) { - String data = myReader.nextLine(); + File file = new File("score_table.txt"); + Scanner fileScanner= new Scanner(file); + while (fileScanner.hasNextLine()) { + String data = fileScanner.nextLine(); String name=data.substring(0,data.indexOf(" ")); String score_s=data.substring(data.indexOf(" ")+1); Integer score=Integer.parseInt(score_s); hashMap.put(name, score); } - myReader.close(); + fileScanner.close(); } catch (FileNotFoundException e) { System.out.println("An error occurred."); e.printStackTrace(); } } + private void writeFile(){ + try { + FileWriter fileWriter = new FileWriter("score_table.txt"); + String str=""; + for ( String key : hashMap.keySet() ) { + str+=key+" "+hashMap.get(key); + } + fileWriter.write(str); + fileWriter.close(); + } catch (IOException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + } + } private HashMap sort(HashMap hashMap){ List>list=new LinkedList>(hashMap.entrySet()); @@ -133,6 +149,7 @@ public void putScoreAndName(String name,Integer score){ removeMinScoreElement(); hashMap.put(name, score); update(); + writeFile(); } private void removeMinScoreElement(){ From e4caf8e0cc39d48f0d0a8bbe35e791432f728189 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 19:31:04 +0300 Subject: [PATCH 46/59] isFull method is added --- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index f3759f7..212af7d 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -163,4 +163,8 @@ private void removeMinScoreElement(){ } } + + public boolean isFull(){ + return hashMap.size()==SIZE; + } } From 2515adaf957db89ff0e7b9730cb691f532d73c21 Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 19:52:04 +0300 Subject: [PATCH 47/59] bugfix --- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 212af7d..c8ae704 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -109,7 +109,7 @@ private void writeFile(){ FileWriter fileWriter = new FileWriter("score_table.txt"); String str=""; for ( String key : hashMap.keySet() ) { - str+=key+" "+hashMap.get(key); + str+=key+" "+hashMap.get(key)+"\n"; } fileWriter.write(str); fileWriter.close(); @@ -163,7 +163,7 @@ private void removeMinScoreElement(){ } } - + public boolean isFull(){ return hashMap.size()==SIZE; } From 061e3ce75ca3df6c3bd5cc7f6df4fef4411f868a Mon Sep 17 00:00:00 2001 From: Bugra Date: Tue, 6 Apr 2021 19:56:12 +0300 Subject: [PATCH 48/59] bugfix --- .../java/spypunk/tetris/service/TetrisServiceImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java index 7578a3f..faf4db3 100644 --- a/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java +++ b/src/main/java/spypunk/tetris/service/TetrisServiceImpl.java @@ -353,8 +353,14 @@ public void showScores() { TetrisNameInputView tetrisNameInputView=new TetrisNameInputView(); @Override public void takeName() { - if(tetris.getScore()>tetrisScoresView.getMinScore()){ + if(tetrisScoresView.isFull()){ + if(tetris.getScore()>tetrisScoresView.getMinScore()){ + tetrisNameInputView.show(tetris.getScore()); + } + } + else{ tetrisNameInputView.show(tetris.getScore()); } + } } From 051b2160a16d827bbe58f5dbdeea0c346ce5feb7 Mon Sep 17 00:00:00 2001 From: Bugra Date: Thu, 8 Apr 2021 23:58:17 +0300 Subject: [PATCH 49/59] Test cases are deleted. --- score_table.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/score_table.txt b/score_table.txt index d5df3e8..e69de29 100644 --- a/score_table.txt +++ b/score_table.txt @@ -1,3 +0,0 @@ -A 500 -B 100 -C 200 From 65dab72d8cb627cb7f759dbd3d5fe65653609139 Mon Sep 17 00:00:00 2001 From: Bugra Date: Thu, 8 Apr 2021 23:59:45 +0300 Subject: [PATCH 50/59] Test dependency added. --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 9e992f8..5224cb3 100644 --- a/pom.xml +++ b/pom.xml @@ -154,5 +154,11 @@ commons-lang3 3.6 + + org.junit.jupiter + junit-jupiter-api + 5.4.2 + + From f9f70e65b6bcc04b30b6595e7e2e4fc3b079a3ff Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:00:27 +0300 Subject: [PATCH 51/59] Minor changes. --- src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index b0977e0..7a7e5bf 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -63,8 +63,9 @@ private void print(int score){ public void actionPerformed(ActionEvent e) { name=textField.getText(); if(!name.equals("")){ - if(isAdded) + if(isAdded){ isAdded=false; + } frame.setVisible(false); } } From bad6a3cd8eeb228047ad7ac9dc9efa69df7cd7d0 Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:00:59 +0300 Subject: [PATCH 52/59] Minor changes. --- .../tetris/ui/view/TetrisScoresView.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index c8ae704..52f5781 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -27,7 +27,7 @@ public class TetrisScoresView{ private final JFrame frame; - private HashMap hashMap; + public HashMap hashMap; private final Container contentPane; private final JTextArea textArea; private final FontCacheImpl fontCache; @@ -41,7 +41,7 @@ public TetrisScoresView(){ contentPane=frame.getContentPane(); contentPane.setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(300, 300)); + frame.setPreferredSize(new Dimension(350, 300)); frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); @@ -61,9 +61,9 @@ public void show(){ private void print(){ hashMap=sort(hashMap); int counter=1; - String s=" HIGH SCORES\n"; + String s="\n HIGH SCORES\n"; for ( String key : hashMap.keySet() ) { - s+="\n "+counter+") "+key+" "+hashMap.get(key); + s+="\n "+counter+") "+key+" "+hashMap.get(key); counter++; } textArea.setText(s); @@ -71,7 +71,7 @@ private void print(){ textArea.setForeground(DEFAULT_FONT_COLOR); textArea.setEditable(false); - float size=font.getSize()+8.0f; + float size=font.getSize()+10.0f; textArea.setFont(font.deriveFont(size)); frame.add(textArea); } @@ -128,11 +128,11 @@ public int compare(Map.Entry o1, Map.Entry o2) return o2.getValue().compareTo(o1.getValue()); } }); - HashMap temp=new LinkedHashMap<>(); + HashMap sorted=new LinkedHashMap<>(); for(Map.Entry e:list){ - temp.put(e.getKey(),e.getValue()); + sorted.put(e.getKey(),e.getValue()); } - return temp; + return sorted; } public Integer getMinScore(){ @@ -152,7 +152,7 @@ public void putScoreAndName(String name,Integer score){ writeFile(); } - private void removeMinScoreElement(){ + public void removeMinScoreElement(){ try { Iterator> itr = hashMap.entrySet().iterator(); while(itr.hasNext()) From 767b3edeb4d31d643ea3eb969cc680fa93b0c2e5 Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:01:14 +0300 Subject: [PATCH 53/59] Unit tests are added. --- .../tetris/ui/view/TetrisScoresTest.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/main/java/spypunk/tetris/ui/view/TetrisScoresTest.java diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresTest.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresTest.java new file mode 100644 index 0000000..706b4c1 --- /dev/null +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresTest.java @@ -0,0 +1,64 @@ +package spypunk.tetris.ui.view; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeEach; + +public class TetrisScoresTest { + + private TetrisScoresView tsv; + @BeforeEach + public void setUp(){ + tsv=new TetrisScoresView(); + } + @Test + public void testGetMin(){ + tsv.hashMap.put("A",2); + tsv.hashMap.put("B",1); + tsv.hashMap.put("C",3); + assertEquals(1,tsv.getMinScore()); + } + @Test + public void testGetMinWithEmptyList(){ + //If list is empty then minimum score is 0. + assertEquals(0,tsv.getMinScore()); + } + @Test + public void testPutScoreAndName(){ + //When the number of elements in the list is less than 5. + tsv.putScoreAndName("A",5); + assertTrue(tsv.hashMap.containsKey("A")); + } + @Test + public void testPutScoreAndNameWithFullList(){ + //We expect that when list is full, if F is added then the element + // has minimum score is removed. + tsv.hashMap.put("A",1); + tsv.hashMap.put("B",2); + tsv.hashMap.put("C",3); + tsv.hashMap.put("D",4); + tsv.hashMap.put("E",5); + tsv.putScoreAndName("F",6); + assertTrue(tsv.hashMap.containsKey("F")); + assertFalse(tsv.hashMap.containsKey("A")); + } + @Test + public void testIsFull(){ + //When the number of elements in the list is equal to 5. + tsv.hashMap.put("A",1); + tsv.hashMap.put("B",2); + tsv.hashMap.put("C",3); + tsv.hashMap.put("D",4); + tsv.hashMap.put("E",5); + assertTrue(tsv.isFull()); + } + @Test + public void testRemoveMinScoreElement(){ + tsv.hashMap.put("A",1); + tsv.hashMap.put("B",2); + tsv.hashMap.put("C",3); + tsv.removeMinScoreElement(); + assertFalse(tsv.hashMap.containsKey("A")); + } + +} From a3130adc12bb90f0ea592c8ffe070701a244585c Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:17:47 +0300 Subject: [PATCH 54/59] unnecessary print deleted. --- .../command/cache/TetrisControllerCommandCacheImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java index 585b459..4a50558 100644 --- a/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java +++ b/src/main/java/spypunk/tetris/ui/controller/command/cache/TetrisControllerCommandCacheImpl.java @@ -131,7 +131,6 @@ private TetrisControllerCommand createMuteCommand() { private TetrisControllerCommand createGameOverCommand() { return () -> { soundService.playMusic(Sound.GAME_OVER); - System.out.println("Game is over."); tetrisService.takeName(); }; } From 720b3d7b19a937eebe23e69e06cacbbe78054b3b Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:18:14 +0300 Subject: [PATCH 55/59] New option shortcut is added. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a3303fa..66c7d44 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,8 @@ mvn exec:java - P - Pause the current game +- H - Show the high scores + - M - Mute sound - PAGE UP - Increase the volume From 79e5a39b52cfaf3b57c2312b12dd4227e5d408c3 Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:18:23 +0300 Subject: [PATCH 56/59] Comments --- .../java/spypunk/tetris/ui/view/TetrisScoresView.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 52f5781..7436a2e 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -35,6 +35,7 @@ public class TetrisScoresView{ private final int SIZE=5; public TetrisScoresView(){ + //Initilizations. frame=new JFrame(); hashMap=new HashMap<>(); @@ -54,6 +55,7 @@ public TetrisScoresView(){ } public void show(){ + //Set visibility true. print(); frame.setVisible(true); } @@ -77,6 +79,7 @@ private void print(){ } private void update(){ + //When new element is added, sort the list and update the textArea. hashMap=sort(hashMap); int counter=1; String s=" HIGH SCORES\n"; @@ -88,6 +91,7 @@ private void update(){ } private void readFile(){ + //Reads from file, separates name and score and add to list. try { File file = new File("score_table.txt"); Scanner fileScanner= new Scanner(file); @@ -105,6 +109,7 @@ private void readFile(){ } } private void writeFile(){ + //Writes to file. try { FileWriter fileWriter = new FileWriter("score_table.txt"); String str=""; @@ -120,6 +125,7 @@ private void writeFile(){ } private HashMap sort(HashMap hashMap){ + //Sorts the list by using a new comparator. List>list=new LinkedList>(hashMap.entrySet()); Collections.sort(list,new Comparator>(){ @@ -136,6 +142,7 @@ public int compare(Map.Entry o1, Map.Entry o2) } public Integer getMinScore(){ + //If list is empty then return 0. try { return Collections.min(hashMap.values()); } catch (Exception e) { @@ -145,6 +152,7 @@ public Integer getMinScore(){ } public void putScoreAndName(String name,Integer score){ + //If list is full then remove element has minimum score. if(hashMap.size()+1>SIZE) removeMinScoreElement(); hashMap.put(name, score); @@ -153,6 +161,7 @@ public void putScoreAndName(String name,Integer score){ } public void removeMinScoreElement(){ + //Since the list is sorted when this is called, it removes the last element of the list. try { Iterator> itr = hashMap.entrySet().iterator(); while(itr.hasNext()) From 4462c7de419166cae6b970f974b46e82bd2f5561 Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 00:52:42 +0300 Subject: [PATCH 57/59] Changes on gui --- src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java | 4 ++-- src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java index 7a7e5bf..bf0f792 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisNameInputView.java @@ -36,7 +36,7 @@ public TetrisNameInputView(){ frame=new JFrame(); contentPane=frame.getContentPane(); contentPane.setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(370, 150)); + frame.setPreferredSize(new Dimension(400, 200)); frame.setLayout(new BorderLayout()); frame.setResizable(false); frame.pack(); @@ -84,7 +84,7 @@ public void actionPerformed(ActionEvent e) { textArea.setForeground(DEFAULT_FONT_COLOR); textArea.setFont(font); - textArea.setText("\n YOUR SCORE IS "+score+"\n PLEASE ENTER\n YOUR NAME"); + textArea.setText("\n YOU ARE IN TOP 5 !\n\n SCORE : "+score+"\n\n PLEASE ENTER YOUR NAME\n"); textArea.setEditable(false); firstPanel.setBackground(Color.BLACK); diff --git a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java index 7436a2e..8ba5265 100644 --- a/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java +++ b/src/main/java/spypunk/tetris/ui/view/TetrisScoresView.java @@ -42,7 +42,7 @@ public TetrisScoresView(){ contentPane=frame.getContentPane(); contentPane.setBackground(Color.BLACK); - frame.setPreferredSize(new Dimension(350, 300)); + frame.setPreferredSize(new Dimension(400, 300)); frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); From 4459bc54a954b25caba61ec5d3d84c60ffb5689a Mon Sep 17 00:00:00 2001 From: Bugra Date: Fri, 9 Apr 2021 13:19:34 +0300 Subject: [PATCH 58/59] New screenshots are added. --- README.md | 4 ++++ img/screenshot_name_input.png | Bin 0 -> 71123 bytes img/screenshot_score_table.png | Bin 0 -> 69968 bytes 3 files changed, 4 insertions(+) create mode 100644 img/screenshot_name_input.png create mode 100644 img/screenshot_score_table.png diff --git a/README.md b/README.md index 66c7d44..7fd057b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ ![alt tag](img/screenshot_gameover.png) +![alt tag](img/screenshot_name_input.png) + +![alt tag](img/screenshot_score_table.png) + ## How to build it ? You will need a Java JDK 8+ and maven 3+. diff --git a/img/screenshot_name_input.png b/img/screenshot_name_input.png new file mode 100644 index 0000000000000000000000000000000000000000..f33502fbc4bc1a7f954c67184714a01508da156c GIT binary patch literal 71123 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 literal 0 HcmV?d00001 diff --git a/img/screenshot_score_table.png b/img/screenshot_score_table.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0fdd2e44be4cb77a2a59ee19f777e9f011766f GIT binary patch literal 69968 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 z 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 Date: Fri, 9 Apr 2021 13:20:32 +0300 Subject: [PATCH 59/59] Makefile is deleted. --- Makefile | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 51d8115..0000000 --- a/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -build: - mvn clean package assembly:single - mvn clean - mvn package - mvn exec:java -