From 41af446f948b9947479611470b9946efc6917380 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 28 Jun 2025 00:01:00 +0200 Subject: [PATCH] feat: add difficulty setting --- .../eu/midnightdust/yaytris/Settings.java | 2 ++ .../java/eu/midnightdust/yaytris/Tetris.java | 15 +++--------- .../eu/midnightdust/yaytris/game/Space.java | 7 ++++-- .../eu/midnightdust/yaytris/ui/TetrisUI.java | 23 +++++++++++++++--- .../midnightdust/yaytris/util/Difficulty.java | 14 +++++++++++ src/main/resources/textures/logo.pxo | Bin 1706 -> 2487 bytes 6 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 src/main/java/eu/midnightdust/yaytris/util/Difficulty.java diff --git a/src/main/java/eu/midnightdust/yaytris/Settings.java b/src/main/java/eu/midnightdust/yaytris/Settings.java index fe7c9d7..3f795ea 100644 --- a/src/main/java/eu/midnightdust/yaytris/Settings.java +++ b/src/main/java/eu/midnightdust/yaytris/Settings.java @@ -1,5 +1,6 @@ package eu.midnightdust.yaytris; +import eu.midnightdust.yaytris.util.Difficulty; import eu.midnightdust.yaytris.util.NightJson; import java.util.HashMap; @@ -11,6 +12,7 @@ public class Settings { public static int musicVolume = 100; public static int soundVolume = 100; public static float guiScale = 3.f; + public static Difficulty difficulty = Difficulty.NORMAL; //public static Map highScores = new HashMap<>(); public static void load() { diff --git a/src/main/java/eu/midnightdust/yaytris/Tetris.java b/src/main/java/eu/midnightdust/yaytris/Tetris.java index 0362bb0..3d58ba7 100644 --- a/src/main/java/eu/midnightdust/yaytris/Tetris.java +++ b/src/main/java/eu/midnightdust/yaytris/Tetris.java @@ -6,12 +6,12 @@ import eu.midnightdust.yaytris.ui.TetrisUI; import javax.swing.*; import java.util.Random; import java.util.Timer; -import java.util.TimerTask; public class Tetris { public static final Random random = new Random(); public static Space space; - static TetrisUI ui; + public static Timer timer; + public static TetrisUI ui; public static void main(String[] args) { try { @@ -19,17 +19,8 @@ public class Tetris { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception | Error e) { System.out.printf("%s: %s\n", "Error setting system look and feel", e); } Settings.load(); + timer = new Timer("Tetris falling pieces"); space = new Space(); ui = new TetrisUI(); - Timer timer = new Timer("Tetris falling pieces"); - timer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - if (Tetris.space.getCurrentTetromino() != null) { - Tetris.space.getCurrentTetromino().fall(1); - Tetris.ui.getGamePanel().repaint(); - } - } - }, 50, 1000); } } diff --git a/src/main/java/eu/midnightdust/yaytris/game/Space.java b/src/main/java/eu/midnightdust/yaytris/game/Space.java index 195649a..bc672ca 100644 --- a/src/main/java/eu/midnightdust/yaytris/game/Space.java +++ b/src/main/java/eu/midnightdust/yaytris/game/Space.java @@ -9,10 +9,12 @@ public class Space { private final Color[][] gameMap; // Bereits abgesetzte Tetrominos werden nur noch als einzelne Farben ('Blobs') auf der Karte abgespeichert private TetrominoShape nextShape; private Tetromino currentTetromino; + private int score; public Space() { gameMap = new Color[12][7]; nextShape = getNextShape(); + score = 0; Tetromino mino = new Tetromino(TetrominoShape.T); mino.move(-2); @@ -62,7 +64,7 @@ public class Space { return gameMap; } - public int onLinesChanged(Tetromino tetromino, int... lines) { + public void onLinesChanged(Tetromino tetromino, int... lines) { int combo = 0; Set completedLines = new TreeSet<>(); for (int line : lines) { @@ -85,7 +87,8 @@ public class Space { gameMap[i] = (i-1 < 0) ? new Color[gameMap[i].length] : gameMap[i-1]; } } - return combo; + this.score += combo; + //System.out.println(score); } public Tetromino getCurrentTetromino() { diff --git a/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java b/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java index c196045..d6073c3 100644 --- a/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java +++ b/src/main/java/eu/midnightdust/yaytris/ui/TetrisUI.java @@ -1,5 +1,6 @@ package eu.midnightdust.yaytris.ui; +import eu.midnightdust.yaytris.Settings; import eu.midnightdust.yaytris.Tetris; import eu.midnightdust.yaytris.game.Space; @@ -11,8 +12,10 @@ import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.IOException; +import java.util.TimerTask; import static eu.midnightdust.yaytris.Settings.guiScale; +import static eu.midnightdust.yaytris.Tetris.timer; public class TetrisUI extends JFrame implements KeyListener { JLabel titleLabel; @@ -74,6 +77,16 @@ public class TetrisUI extends JFrame implements KeyListener { } public void startGame(ActionEvent actionEvent) { + Tetris.space.spawnTetromino(); + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + if (Tetris.space.getCurrentTetromino() != null) { + Tetris.space.getCurrentTetromino().fall(1); + Tetris.ui.getGamePanel().repaint(); + } + } + }, 1, Settings.difficulty.getTimerPeriod()); //this.remove(menuPanel); //menuPanel = null; this.requestFocus(); @@ -134,11 +147,11 @@ public class TetrisUI extends JFrame implements KeyListener { @Override public void keyPressed(KeyEvent e) { //System.out.println("Pressed"); - if (e.getKeyCode() == KeyEvent.VK_W) { + if (e.getKeyCode() == KeyEvent.VK_E) { Tetris.space.spawnTetromino(); //Tetris.space.onLinesChanged(Tetris.space.getCurrentTetromino(), 0, 1, 2, 3); } - else if (e.getKeyCode() == KeyEvent.VK_S) { + else if (e.getKeyCode() == KeyEvent.VK_W) { Tetris.space.getCurrentTetromino().rotate(); //Tetris.space.onLinesChanged(Tetris.space.getCurrentTetromino(), 0, 1, 2, 3); } @@ -150,10 +163,14 @@ public class TetrisUI extends JFrame implements KeyListener { Tetris.space.getCurrentTetromino().move(-1); //Tetris.space.onLinesChanged(Tetris.space.getCurrentTetromino(), 0, 1, 2, 3); } - else if (e.getKeyCode() == KeyEvent.VK_SPACE) { + else if (e.getKeyCode() == KeyEvent.VK_S) { Tetris.space.getCurrentTetromino().fall(1); //Tetris.space.onLinesChanged(Tetris.space.getCurrentTetromino(), 0, 1, 2, 3); } + else if (e.getKeyCode() == KeyEvent.VK_SPACE) { + Tetris.space.getCurrentTetromino().fall(12); + //Tetris.space.onLinesChanged(Tetris.space.getCurrentTetromino(), 0, 1, 2, 3); + } gamePanel.repaint(); } diff --git a/src/main/java/eu/midnightdust/yaytris/util/Difficulty.java b/src/main/java/eu/midnightdust/yaytris/util/Difficulty.java new file mode 100644 index 0000000..0e01e64 --- /dev/null +++ b/src/main/java/eu/midnightdust/yaytris/util/Difficulty.java @@ -0,0 +1,14 @@ +package eu.midnightdust.yaytris.util; + +public enum Difficulty { + NOOB(2000), EASY(1200), NORMAL(1000), HARD(750), EXTREME(500), WTF(100); + private final int timerPeriod; + + Difficulty(int timerPeriod) { + this.timerPeriod = timerPeriod; + } + + public int getTimerPeriod() { + return timerPeriod; + } +} diff --git a/src/main/resources/textures/logo.pxo b/src/main/resources/textures/logo.pxo index 4863d3ed1dee1f3c18e80833cc69734c46c91947..8c9c3c71c8dccbd511f86956f1729d94d634d96d 100644 GIT binary patch delta 1150 zcmZ3*yIr_Gz?+#xgn@yBgW>I-+fmiEeLtEQ85r1E7#KJi7#LC#OA__6iu3dKPQKVT z+d#mzKDBgy)X8pzTP{=Y{}vV9#3m7u-J5$;t+n^l`>C9sX1PoEZK-uMxL!Q7+Rbhu zXK>9^j-PAAGUgUK_O44lv6tcez1AgFxe;IWdZs9xKE7#b{Y1sYI}a2t{N||C@M^TX zuw&P}3!8TC>6x=)vCD+zn;Sk~d9}qM?B|~)SAP|I)M#}F+1T3HIX{Tay#0|Ua^BJS zFRNI0X$D+6m-kkF?PeRFUAvi#wiN7GlF4&BFFBNJi(B>jw+r05@+a8NJi&D5`<-Rk zo3rol*qzxgXf`2UdfT6nddCBw%BNn`T>SR5N4qj*Rxi>jJ8u~HPUOSp-K(n`57@GA)77@U zRB*Tc%KJ5GC+_~+P^&YcUA%EekMi;j8t=En3ciioC$jX0eAgy150e}|&HJ;?SVW#( zwQ$Abv+u%FBR}7NeR}WX?O$`J>A38Bm)RwAg_X@ndz00^XIJm3tvzqgfE-twmoh$K zW_r74ayP4$5ONeU$u4>IjB)Z>MwNP_x3@Ot-U$$K2{b$DF_**OPOriWZq~9_b#vBO zRY=?Lw8hL}_Bp|Cw8Q>UAuzJRVEwy~umA4(G_UT!{r=6n)a&Z)&S}5D`TKu;^_-Kk z-u3(Xif?`U^Z57u$k>S8`F~&6JO8(SyYK7z|GaR@DFi delta 535 zcmdlkyo$Fzz?+#xgn@yBgMo40?WnkwPaKOF85rI&F)(m4FfgPfmL%$B73b%*2E}&Y zHW2uuecWd20^_nBEsMVY>k>M0EAIJ`m)xFyZ@GWIckP=zCv%~`)2)kZ($Y#DrH_9( z$NA}c;DXP`+*51MPpD>`*VG@$duxMK&6X*OuXArsO!bhcum2<<;nZXkvh{$#NxfM8 z7dP&hO*8&Fh4WL9=!ZtDx#=gC-I3oKCD(pr`>s_-PpAFlYxG|ldtNxD)|Tr_@{%=s zqhH2Hi~lfr^)K(#g)<+QEiira>uS921xeYaGWAr=S_i%qA?^?g})p* z=DumkIho6oc+dG>4cUEt%1Q&)Lr>JYLguJ+Cw4`?tlbj{Xa{>fY$He5SQ&iBPq!tSNq%&OW&R(q#kw3{NgzMcU&ZZ>aae8SAcIB)Vlc9Y5HS=l5Qfl-7l z;wA@hXoA#LbI35wWSsn-RfgX%z#CchJf%IWk5Dx&g C2j|=X