diff options
| -rw-r--r-- | src/se/liu/gusso230/tetris/Board.java | 25 | ||||
| -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 | 1 |
5 files changed, 30 insertions, 5 deletions
diff --git a/src/se/liu/gusso230/tetris/Board.java b/src/se/liu/gusso230/tetris/Board.java index 3d1d8d0..dba539a 100644 --- a/src/se/liu/gusso230/tetris/Board.java +++ b/src/se/liu/gusso230/tetris/Board.java @@ -27,6 +27,7 @@ public class Board { private int fallingX; private int fallingY; private int points = 0; + private int lineStreak = 0; private HighscoreList highscores; private File highscoreFile; @@ -35,7 +36,7 @@ public class Board { private int timerDelay; private List<BoardListener> boardListeners; - private FallHandler fallHandler = new Fallthrough(); + private FallHandler fallHandler = new DefaultFallHandler(); private final static Random RND = new Random(); @@ -80,6 +81,7 @@ public class Board { moveFalling(); } checkFullLines(); + updateFallHandler(); } } @@ -191,7 +193,7 @@ public class Board { private void checkFullLines() { int y = height - 1; - int clearedLines = 0; + int linesCleared = 0; while (y >= 0) { boolean hole = false; for (int x = 0; x < width; x++) { @@ -203,11 +205,11 @@ public class Board { if (hole) { y--; } else { - clearedLines++; + linesCleared++; moveDownFrom(y); } } - switch (clearedLines) { + switch (linesCleared) { case 1: points += POINTS_ONE_LINE; break; @@ -223,12 +225,21 @@ public class Board { default: break; } - if (clearedLines > 0) { + if (linesCleared > 0) { timerDelay = (int) (timerDelay * 0.95); timer.setDelay(timerDelay); } } + private void updateFallHandler() { + if (lineStreak >= 4) { + fallHandler = new Fallthrough(); + lineStreak -= 4; + } else { + fallHandler = new DefaultFallHandler(); + } + } + private void moveDownFrom(int line) { for (int y = line; y > 0; y--) { // > since we dont want to copy into the top line for (int x = 0; x < width; x++) { @@ -289,6 +300,10 @@ public class Board { return highscores.getHighscores(); } + public String getPowerupDescription() { + return fallHandler.getDescription(); + } + public void setFalling(final Poly falling) { this.falling = falling; notifyListeners(); diff --git a/src/se/liu/gusso230/tetris/DefaultFallHandler.java b/src/se/liu/gusso230/tetris/DefaultFallHandler.java index 180d8f4..dcf86a8 100644 --- a/src/se/liu/gusso230/tetris/DefaultFallHandler.java +++ b/src/se/liu/gusso230/tetris/DefaultFallHandler.java @@ -5,6 +5,10 @@ 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 ed21d33..682d37f 100644 --- a/src/se/liu/gusso230/tetris/FallHandler.java +++ b/src/se/liu/gusso230/tetris/FallHandler.java @@ -2,5 +2,6 @@ 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 add19fc..cf3d3c7 100644 --- a/src/se/liu/gusso230/tetris/Fallthrough.java +++ b/src/se/liu/gusso230/tetris/Fallthrough.java @@ -5,6 +5,10 @@ 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 9240f69..0ada2e8 100644 --- a/src/se/liu/gusso230/tetris/TetrisComponent.java +++ b/src/se/liu/gusso230/tetris/TetrisComponent.java @@ -71,6 +71,7 @@ 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); break; case SHOWING_HIGHSCORES: List<Highscore> highscores = board.getHighscores(); |
