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 4863d3e..8c9c3c7 100644 Binary files a/src/main/resources/textures/logo.pxo and b/src/main/resources/textures/logo.pxo differ