summaryrefslogtreecommitdiffstats
path: root/src/se
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-02 11:54:48 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-03-02 11:54:48 +0100
commit3399c537e8dcc9981b2a1157b2f82c717306a0cd (patch)
tree5e057d70c7bd49d7c3197926dd726e5d65b533f0 /src/se
parent4da6e1a41918c478f60dbafb547b2173d4d4b2cf (diff)
downloadtdde30-3399c537e8dcc9981b2a1157b2f82c717306a0cd.tar.gz
award powerup with linestreaks, show powerup below board
Diffstat (limited to 'src/se')
-rw-r--r--src/se/liu/gusso230/tetris/Board.java25
-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.java1
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();