diff --git a/src/main/java/eu/midnightdust/yaytris/HighScores.java b/src/main/java/eu/midnightdust/yaytris/HighScores.java
index 13f8ff7..e07aded 100644
--- a/src/main/java/eu/midnightdust/yaytris/HighScores.java
+++ b/src/main/java/eu/midnightdust/yaytris/HighScores.java
@@ -1,6 +1,6 @@
package eu.midnightdust.yaytris;
-import eu.midnightdust.yaytris.util.NightJson;
+import eu.midnightdust.yaytris.util.json.NightJson;
import java.util.HashMap;
import java.util.Map;
diff --git a/src/main/java/eu/midnightdust/yaytris/Settings.java b/src/main/java/eu/midnightdust/yaytris/Settings.java
index 259deac..6d37365 100644
--- a/src/main/java/eu/midnightdust/yaytris/Settings.java
+++ b/src/main/java/eu/midnightdust/yaytris/Settings.java
@@ -2,24 +2,26 @@ package eu.midnightdust.yaytris;
import eu.midnightdust.yaytris.util.Difficulty;
import eu.midnightdust.yaytris.util.Language;
-import eu.midnightdust.yaytris.util.NightJson;
+import eu.midnightdust.yaytris.util.json.Comment;
+import eu.midnightdust.yaytris.util.json.NightJson;
import java.util.Arrays;
+@SuppressWarnings("unused") // Comments are unused in code, but are added to the JSON file for readability
public class Settings {
private static final NightJson json = new NightJson(Settings.class, "tetris_settings.json5");
- public static NightJson.Comment c1 = new NightJson.Comment("Volume of theme music (0-100)");
+ public static Comment c1 = new Comment("Volume of theme music (0-100)");
public static int musicVolume = 100;
- public static NightJson.Comment c2 = new NightJson.Comment("Volume of sound effects (0-100)");
+ public static Comment c2 = new Comment("Volume of sound effects (0-100)");
public static int soundVolume = 100;
- public static NightJson.Comment c3 = new NightJson.Comment("Amount the user interface should be scaled");
+ public static Comment c3 = new Comment("Amount the user interface should be scaled");
public static float guiScale = 3.f;
- public static NightJson.Comment c4 = new NightJson.Comment("Whether speed should scale with level (true/false)");
+ public static Comment c4 = new Comment("Whether speed should scale with level (true/false)");
public static boolean shouldScaleSpeed = true;
- public static NightJson.Comment c5 = new NightJson.Comment("One of %s", Arrays.toString(Difficulty.values()));
+ public static Comment c5 = new Comment("One of %s", Arrays.toString(Difficulty.values()));
public static Difficulty difficulty = Difficulty.NORMAL;
- public static NightJson.Comment c6 = new NightJson.Comment("One of %s", Arrays.toString(Language.values()));
+ public static Comment c6 = new Comment("One of %s", Arrays.toString(Language.values()));
public static Language language = Language.ENGLISH;
public static void load() {
diff --git a/src/main/java/eu/midnightdust/yaytris/Translation.java b/src/main/java/eu/midnightdust/yaytris/Translation.java
index 3ebdb30..c6bb578 100644
--- a/src/main/java/eu/midnightdust/yaytris/Translation.java
+++ b/src/main/java/eu/midnightdust/yaytris/Translation.java
@@ -1,6 +1,6 @@
package eu.midnightdust.yaytris;
-import eu.midnightdust.yaytris.util.NightJson;
+import eu.midnightdust.yaytris.util.json.NightJson;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java b/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java
index f3a98be..0932281 100644
--- a/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java
+++ b/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java
@@ -33,7 +33,7 @@ public class TetrisUI extends JFrame implements KeyListener {
this.setResizable(false);
this.getContentPane().setBackground(CatppuccinColor.MANTLE.getColor());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setWindowPosition(this, 0);
+ this.setLocationRelativeTo(null);
titleLabel = new JLabel("Tetris");
titleLabel.setForeground(Color.WHITE);
@@ -66,6 +66,7 @@ public class TetrisUI extends JFrame implements KeyListener {
titleLabel.setBounds(scale(225), scale(7), scale(110), scale(30));
titleLabel.setIcon(new ImageIcon(new ImageIcon(titleImage).getImage().getScaledInstance(scale(110), scale(30), Image.SCALE_DEFAULT)));
gamePanel.setBounds(scale(10), scale(10), scale(150), scale(282));
+ this.setLocationRelativeTo(null);
}
/**
@@ -102,7 +103,7 @@ public class TetrisUI extends JFrame implements KeyListener {
*
* @param actionEvent unnecessary, but allows for more elegant lambda statements :)
*/
- public void openMainMenu(ActionEvent actionEvent) {
+ public void openMainMenu(@SuppressWarnings("unused") ActionEvent actionEvent) {
if (this.menuPanel != null) this.remove(menuPanel);
Tetris.resetSpace();
rescale();
@@ -120,7 +121,7 @@ public class TetrisUI extends JFrame implements KeyListener {
*
* @param actionEvent unnecessary, but allows for more elegant lambda statements :)
*/
- public void openSettings(ActionEvent actionEvent) {
+ public void openSettings(@SuppressWarnings("unused") ActionEvent actionEvent) {
if (this.menuPanel != null) this.remove(menuPanel);
menuPanel = new SettingsMenu(scale(170), scale(40), scale(220), scale(252), this);
menuPanel.setBackground(CatppuccinColor.BASE.getColor());
@@ -134,7 +135,7 @@ public class TetrisUI extends JFrame implements KeyListener {
*
* @param actionEvent unnecessary, but allows for more elegant lambda statements :)
*/
- public void openScoreMenu(ActionEvent actionEvent) {
+ public void openScoreMenu(@SuppressWarnings("unused") ActionEvent actionEvent) {
if (this.menuPanel != null) this.remove(menuPanel);
menuPanel = new ScoreMenu(scale(170), scale(40), scale(220), scale(252), this);
menuPanel.setBackground(CatppuccinColor.BASE.getColor());
@@ -148,7 +149,7 @@ public class TetrisUI extends JFrame implements KeyListener {
*
* @param actionEvent unnecessary, but allows for more elegant lambda statements :)
*/
- public void openHighscores(ActionEvent actionEvent) {
+ public void openHighscores(@SuppressWarnings("unused") ActionEvent actionEvent) {
if (this.menuPanel != null) this.remove(menuPanel);
menuPanel = new HighScoreMenu(scale(170), scale(40), scale(220), scale(252), this);
menuPanel.setBackground(CatppuccinColor.BASE.getColor());
@@ -167,40 +168,6 @@ public class TetrisUI extends JFrame implements KeyListener {
HighScores.addScore(playerName, score);
}
-
- /**
- * Centers the game window on the given screen.
- * Source: Miss Chanandler Bong & Peter Szabo on StackOverflow
- *
- * @param window the window to center
- * @param screen the screen to center it on
- */
- private void setWindowPosition(JFrame window, int screen) {
- GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
- GraphicsDevice[] allDevices = env.getScreenDevices();
- int topLeftX, topLeftY, screenX, screenY, windowPosX, windowPosY;
-
- if (screen < allDevices.length && screen > -1) {
- topLeftX = allDevices[screen].getDefaultConfiguration().getBounds().x;
- topLeftY = allDevices[screen].getDefaultConfiguration().getBounds().y;
-
- screenX = allDevices[screen].getDefaultConfiguration().getBounds().width;
- screenY = allDevices[screen].getDefaultConfiguration().getBounds().height;
- }
- else {
- topLeftX = allDevices[0].getDefaultConfiguration().getBounds().x;
- topLeftY = allDevices[0].getDefaultConfiguration().getBounds().y;
-
- screenX = allDevices[0].getDefaultConfiguration().getBounds().width;
- screenY = allDevices[0].getDefaultConfiguration().getBounds().height;
- }
-
- windowPosX = ((screenX - window.getWidth()) / 2) + topLeftX;
- windowPosY = ((screenY - window.getHeight()) / 2) + topLeftY;
-
- window.setLocation(windowPosX, windowPosY);
- }
-
/**
* Capture keyboard inputs during a game session.
*
diff --git a/src/main/java/eu/midnightdust/yaytris/util/FileUtil.java b/src/main/java/eu/midnightdust/yaytris/util/FileUtil.java
index 77c0674..34b64c0 100644
--- a/src/main/java/eu/midnightdust/yaytris/util/FileUtil.java
+++ b/src/main/java/eu/midnightdust/yaytris/util/FileUtil.java
@@ -1,9 +1,6 @@
package eu.midnightdust.yaytris.util;
import javax.imageio.ImageIO;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
@@ -17,21 +14,4 @@ public class FileUtil {
throw new RuntimeException(ex);
}
}
-
- public static AudioInputStream loadAudio(String location) {
- try (InputStream fileStream = FileUtil.class.getResourceAsStream(location)) {
- assert fileStream != null;
- return AudioSystem.getAudioInputStream(fileStream);
- } catch (IOException | NullPointerException | UnsupportedAudioFileException ex) {
- throw new RuntimeException(ex);
- }
- }
-
- public static InputStream getFileStream(String location) {
- try (InputStream fileStream = FileUtil.class.getResourceAsStream(location)) {
- return fileStream;
- } catch (IOException | NullPointerException ex) {
- throw new RuntimeException(ex);
- }
- }
}
diff --git a/src/main/java/eu/midnightdust/yaytris/util/json/Comment.java b/src/main/java/eu/midnightdust/yaytris/util/json/Comment.java
new file mode 100644
index 0000000..735c935
--- /dev/null
+++ b/src/main/java/eu/midnightdust/yaytris/util/json/Comment.java
@@ -0,0 +1,19 @@
+package eu.midnightdust.yaytris.util.json;
+
+/**
+ * Add comments to your json files.
+ * If you decide to use this, it's best to save with the .json5 extension, as regular json does not officially support comments.
+ */
+public class Comment {
+ final String commentString;
+
+ /**
+ * Add a comment to spice-up the json file :)
+ *
+ * @param commentString the string you want to write as a comment
+ * @param args optional formatting arguments, calls {@link String#format(String, Object...)}
+ */
+ public Comment(String commentString, Object... args) {
+ this.commentString = String.format(commentString, args);
+ }
+}
diff --git a/src/main/java/eu/midnightdust/yaytris/util/NightJson.java b/src/main/java/eu/midnightdust/yaytris/util/json/NightJson.java
similarity index 78%
rename from src/main/java/eu/midnightdust/yaytris/util/NightJson.java
rename to src/main/java/eu/midnightdust/yaytris/util/json/NightJson.java
index de2efca..532e612 100644
--- a/src/main/java/eu/midnightdust/yaytris/util/NightJson.java
+++ b/src/main/java/eu/midnightdust/yaytris/util/json/NightJson.java
@@ -1,4 +1,4 @@
-package eu.midnightdust.yaytris.util;
+package eu.midnightdust.yaytris.util.json;
import java.io.File;
import java.io.FileWriter;
@@ -12,8 +12,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
- * NightJson v0.2 by Martin Prokoph
- * Extremely lightweight (and incomplete) JSON library
+ * NightJson v0.3 by Martin Prokoph
+ * Extremely lightweight JSON library
* Concept inspired by GSON
*/
public class NightJson {
@@ -39,28 +39,11 @@ public class NightJson {
/**
* Convert the current state of the java json class to actual json and save it to disk.
*/
- @SuppressWarnings("unchecked")
public void writeJson() {
if (fileLocation == null) return;
try {
FileWriter jsonFile = new FileWriter(fileLocation);
-
- jsonFile.write("{\n");
- Iterator it = Arrays.stream(jsonClass.getFields()).iterator();
- while (it.hasNext()) {
- Field field = it.next();
- if (field != jsonMap) writeElement(jsonFile, field.get(null), field.getType(), field.getName(), it.hasNext());
- }
- if (jsonMap != null) {
- Iterator mapIt = ((Map)jsonMap.get(null)).keySet().iterator();
- while (mapIt.hasNext()) {
- String key = mapIt.next();
- Object value = jsonMap.get(key);
- writeElement(jsonFile, value, value.getClass(), key, mapIt.hasNext());
- }
- }
- jsonFile.write("}");
- jsonFile.close();
+ writeJsonToFile(jsonFile);
} catch (IOException | IllegalAccessException e) {
System.out.println("Oh no! An Error occurred whilst writing the JSON file :(");
//noinspection CallToPrintStackTrace
@@ -68,10 +51,30 @@ public class NightJson {
}
}
+ @SuppressWarnings("unchecked")
+ private void writeJsonToFile(FileWriter jsonFile) throws IOException, IllegalAccessException {
+ jsonFile.write("{\n");
+ Iterator it = Arrays.stream(jsonClass.getFields()).iterator();
+ while (it.hasNext()) {
+ Field field = it.next();
+ if (field != jsonMap) writeElement(jsonFile, field.get(null), field.getType(), field.getName(), it.hasNext());
+ }
+ if (jsonMap != null) {
+ Iterator mapIt = ((Map)jsonMap.get(null)).keySet().iterator();
+ while (mapIt.hasNext()) {
+ String key = mapIt.next();
+ Object value = jsonMap.get(key);
+ writeElement(jsonFile, value, value.getClass(), key, mapIt.hasNext());
+ }
+ }
+ jsonFile.write("}");
+ jsonFile.close();
+ }
+
/**
* Write the desired element into the file.
*/
- private void writeElement(FileWriter jsonFile, Object value, Class> type, String name, boolean hasNext) throws IOException, IllegalAccessException {
+ private void writeElement(FileWriter jsonFile, Object value, Class> type, String name, boolean hasNext) throws IOException {
jsonFile.write("\t");
if (type == Comment.class) {
jsonFile.write(String.format("// %s\n", ((Comment) value).commentString));
@@ -120,23 +123,9 @@ public class NightJson {
/**
* Read the json file from disk and overwrite the json class's field values.
*/
- @SuppressWarnings("unchecked")
public void readJsonFromString(String jsonString) {
try {
- Map asMap = jsonToMap(
- jsonString.replaceAll("(//)+.*\n", ""), // Replace comment lines (Json5)
- (key) -> getField(key).isPresent() ? getField(key).get().getType() : String.class); // Determine data type
-
- for (String key : asMap.keySet()) {
- Object value = asMap.get(key);
- Optional field = getField(key);
- if (field.isPresent()) {
- field.get().set(null, value);
- }
- else if (jsonMap != null) {
- ((Map)jsonMap.get(null)).put(key, value);
- }
- }
+ readJsonString(jsonString);
} catch (IllegalAccessException | NoSuchElementException | ClassCastException e) {
System.out.println("Oh no! An Error occurred whilst reading the JSON file :(");
//noinspection CallToPrintStackTrace
@@ -144,6 +133,24 @@ public class NightJson {
}
}
+ @SuppressWarnings("unchecked")
+ private void readJsonString(String jsonString) throws IllegalAccessException {
+ Map asMap = jsonToMap(
+ jsonString.replaceAll("(//)+.*\n", ""), // Replace comment lines (Json5)
+ (key) -> getField(key).isPresent() ? getField(key).get().getType() : String.class); // Determine data type
+
+ for (String key : asMap.keySet()) {
+ Object value = asMap.get(key);
+ Optional field = getField(key);
+ if (field.isPresent()) {
+ field.get().set(null, value);
+ }
+ else if (jsonMap != null) {
+ ((Map)jsonMap.get(null)).put(key, value);
+ }
+ }
+ }
+
/**
* Read the json file as key-value pairs and save it as a map.
*/
@@ -249,20 +256,4 @@ public class NightJson {
return Optional.empty();
}
}
-
- /**
- * Add comments to your json files.
- * If you decide to use this, it's best to save with the .json5 extension, as regular json does not officially support comments.
- */
- public static class Comment {
- final String commentString;
- /**
- * Add a comment to spice-up the json file :)
- * @param commentString the string you want to write as a comment
- * @param args optional formatting arguments, calls {@link String#format(String, Object...)}
- */
- public Comment(String commentString, Object... args) {
- this.commentString = String.format(commentString, args);
- }
- }
}