diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-03-03 19:42:41 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-03-03 19:42:41 +0100 |
| commit | 763ddc639119bc0bfd46acceb25e43de4a14a244 (patch) | |
| tree | 204d000e0607d519d1895671259fbe9838282b51 | |
| parent | 3399c537e8dcc9981b2a1157b2f82c717306a0cd (diff) | |
| download | tdde30-763ddc639119bc0bfd46acceb25e43de4a14a244.tar.gz | |
ui in boardtester and correct powerup
| -rw-r--r-- | src/se/liu/gusso230/tetris/Board.java | 34 | ||||
| -rw-r--r-- | src/se/liu/gusso230/tetris/BoardTester.java | 18 | ||||
| -rw-r--r-- | src/se/liu/gusso230/tetris/DefaultFallHandler.java | 4 | ||||
| -rw-r--r-- | src/se/liu/gusso230/tetris/FallHandler.java | 1 | ||||
| -rw-r--r-- | src/se/liu/gusso230/tetris/Fallthrough.java | 4 | ||||
| -rw-r--r-- | src/se/liu/gusso230/tetris/TetrisComponent.java | 3 |
6 files changed, 36 insertions, 28 deletions
diff --git a/src/se/liu/gusso230/tetris/Board.java b/src/se/liu/gusso230/tetris/Board.java index dba539a..5e0ca08 100644 --- a/src/se/liu/gusso230/tetris/Board.java +++ b/src/se/liu/gusso230/tetris/Board.java @@ -28,6 +28,7 @@ public class Board { private int fallingY; private int points = 0; private int lineStreak = 0; + private static final int LINE_STREAK_TARGET = 1; private HighscoreList highscores; private File highscoreFile; @@ -35,6 +36,7 @@ public class Board { private Timer timer; private int timerDelay; private List<BoardListener> boardListeners; + private BoardInterface boardInterface; private FallHandler fallHandler = new DefaultFallHandler(); @@ -45,7 +47,7 @@ public class Board { private final static int POINTS_THREE_LINES = 500; private final static int POINTS_FOUR_LINES = 800; - public Board(int width, int height, HighscoreList highscores) { + public Board(int width, int height, HighscoreList highscores, BoardInterface boardInterface) { this.height = height; this.width = width; squares = new SquareType[height][width]; @@ -55,13 +57,11 @@ public class Board { } } boardListeners = new ArrayList<>(); + this.boardInterface = boardInterface; tetrominoMaker = new TetrominoMaker(); this.highscores = highscores; highscoreFile = new File("highscores.json"); readHighscores(); - // highscores.addHighscore(new Highscore("a", 100)); - // highscores.addHighscore(new Highscore("c", 300)); - // highscores.addHighscore(new Highscore("b", 200)); final Action tick = new AbstractAction() { @Override public void actionPerformed(final ActionEvent actionEvent) { @@ -98,12 +98,7 @@ public class Board { highscores.saveToFile(highscoreFile); return; } catch (SecurityException | IOException ignored) { - if (JOptionPane.showConfirmDialog(null, - "Couldn't write highscore file. Try again?", - "", - JOptionPane.YES_NO_OPTION) - == JOptionPane.NO_OPTION) - { + if (boardInterface.promptUserYesNo("Couldn't write highscore file. Try again?")) { return; } } @@ -112,8 +107,7 @@ public class Board { private void setGameOver() { state = GameState.GAME_OVER; - //highscores.addHighscore(new Highscore(JOptionPane.showInputDialog("Your name: "), points)); - highscores.addHighscore(new Highscore("woo", points)); + highscores.addHighscore(new Highscore(boardInterface.promptUserString("Your name"), points)); highscores.sort(new HighscoreComparator()); writeHighscores(); state = GameState.SHOWING_HIGHSCORES; @@ -125,6 +119,7 @@ public class Board { fallingY -= 1; placeAt(falling, fallingX, fallingY); falling = null; + fallHandler = new DefaultFallHandler(); } notifyListeners(); } @@ -229,14 +224,13 @@ public class Board { timerDelay = (int) (timerDelay * 0.95); timer.setDelay(timerDelay); } + lineStreak += linesCleared; } private void updateFallHandler() { - if (lineStreak >= 4) { + if (lineStreak >= LINE_STREAK_TARGET) { fallHandler = new Fallthrough(); - lineStreak -= 4; - } else { - fallHandler = new DefaultFallHandler(); + lineStreak -= LINE_STREAK_TARGET; } } @@ -304,6 +298,14 @@ public class Board { return fallHandler.getDescription(); } + public int getLineStreak() { + return lineStreak; + } + + public int getLineStreakTarget() { + return LINE_STREAK_TARGET; + } + public void setFalling(final Poly falling) { this.falling = falling; notifyListeners(); diff --git a/src/se/liu/gusso230/tetris/BoardTester.java b/src/se/liu/gusso230/tetris/BoardTester.java index 00c036d..82c225e 100644 --- a/src/se/liu/gusso230/tetris/BoardTester.java +++ b/src/se/liu/gusso230/tetris/BoardTester.java @@ -1,13 +1,27 @@ package se.liu.gusso230.tetris; -public class BoardTester { +import javax.swing.*; + +public class BoardTester implements BoardInterface { public static void main(String[] args) { HighscoreList highscores = new HighscoreList(); - Board board = new Board(10, 20, highscores); + Board board = new Board(10, 20, highscores, new BoardTester()); TetrisViewer viewer = new TetrisViewer(board); viewer.show(); board.getTimer().start(); } + + @Override public boolean promptUserYesNo(final String prompt) { + return JOptionPane.showConfirmDialog(null, + prompt, + "", + JOptionPane.YES_NO_OPTION) + == JOptionPane.NO_OPTION; + } + + @Override public String promptUserString(final String prompt) { + return JOptionPane.showInputDialog(prompt); + } } diff --git a/src/se/liu/gusso230/tetris/DefaultFallHandler.java b/src/se/liu/gusso230/tetris/DefaultFallHandler.java index dcf86a8..180d8f4 100644 --- a/src/se/liu/gusso230/tetris/DefaultFallHandler.java +++ b/src/se/liu/gusso230/tetris/DefaultFallHandler.java @@ -5,10 +5,6 @@ public class DefaultFallHandler implements FallHandler { return !board.getFalling().onlyCoversEmpty(board.getFallingX(), board.getFallingY(), board); } - @Override public boolean isRepeatable() { - return true; - } - @Override public String getDescription() { return "No powerup"; } diff --git a/src/se/liu/gusso230/tetris/FallHandler.java b/src/se/liu/gusso230/tetris/FallHandler.java index 682d37f..ed21d33 100644 --- a/src/se/liu/gusso230/tetris/FallHandler.java +++ b/src/se/liu/gusso230/tetris/FallHandler.java @@ -2,6 +2,5 @@ package se.liu.gusso230.tetris; public interface FallHandler { boolean hasFallingCollision(Board board); - boolean isRepeatable(); String getDescription(); } diff --git a/src/se/liu/gusso230/tetris/Fallthrough.java b/src/se/liu/gusso230/tetris/Fallthrough.java index cf3d3c7..add19fc 100644 --- a/src/se/liu/gusso230/tetris/Fallthrough.java +++ b/src/se/liu/gusso230/tetris/Fallthrough.java @@ -5,10 +5,6 @@ public class Fallthrough implements FallHandler { return !board.getFalling().isAtOrAbove(board.getFallingY(), board.getHeight()); } - @Override public boolean isRepeatable() { - return false; - } - @Override public String getDescription() { return "Fallthrough"; } diff --git a/src/se/liu/gusso230/tetris/TetrisComponent.java b/src/se/liu/gusso230/tetris/TetrisComponent.java index 0ada2e8..d2093ea 100644 --- a/src/se/liu/gusso230/tetris/TetrisComponent.java +++ b/src/se/liu/gusso230/tetris/TetrisComponent.java @@ -71,7 +71,8 @@ public class TetrisComponent extends JComponent implements BoardListener { g.setColor(Color.BLACK); g.setFont(new Font("serif", Font.PLAIN, 22)); g.drawString(Integer.toString(board.getPoints()), LEFT_MARGIN, LINE_HEIGHT); - g.drawString(board.getPowerupDescription(), LEFT_MARGIN, TILE_SIZE * board.getHeight() + (2 * TILE_SIZE) + LINE_HEIGHT); + g.drawString(board.getPowerupDescription() + String.format(" (%d/%d)", board.getLineStreak(), board.getLineStreakTarget()), + LEFT_MARGIN, TILE_SIZE * board.getHeight() + (2 * TILE_SIZE) + LINE_HEIGHT); break; case SHOWING_HIGHSCORES: List<Highscore> highscores = board.getHighscores(); |
