summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-03 19:42:41 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-03-03 19:42:41 +0100
commit763ddc639119bc0bfd46acceb25e43de4a14a244 (patch)
tree204d000e0607d519d1895671259fbe9838282b51
parent3399c537e8dcc9981b2a1157b2f82c717306a0cd (diff)
downloadtdde30-763ddc639119bc0bfd46acceb25e43de4a14a244.tar.gz
ui in boardtester and correct powerup
-rw-r--r--src/se/liu/gusso230/tetris/Board.java34
-rw-r--r--src/se/liu/gusso230/tetris/BoardTester.java18
-rw-r--r--src/se/liu/gusso230/tetris/DefaultFallHandler.java4
-rw-r--r--src/se/liu/gusso230/tetris/FallHandler.java1
-rw-r--r--src/se/liu/gusso230/tetris/Fallthrough.java4
-rw-r--r--src/se/liu/gusso230/tetris/TetrisComponent.java3
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();