summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-02-02 18:04:13 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-02-08 08:51:33 +0100
commit64d9b21780d4a3b760ff699611c16781f6b0dbab (patch)
tree845d9efbd8dcbac50cc0664b8e3f11070fbab697
parent433f21dea0626f3744341a468efd99857a7342dc (diff)
downloadtdde30-64d9b21780d4a3b760ff699611c16781f6b0dbab.tar.gz
4.3
-rw-r--r--src/se/liu/gusso230/tetris/Board.java19
-rw-r--r--src/se/liu/gusso230/tetris/BoardListener.java5
-rw-r--r--src/se/liu/gusso230/tetris/BoardTester.java1
-rw-r--r--src/se/liu/gusso230/tetris/TetrisComponent.java6
-rw-r--r--src/se/liu/gusso230/tetris/TetrisViewer.java1
5 files changed, 30 insertions, 2 deletions
diff --git a/src/se/liu/gusso230/tetris/Board.java b/src/se/liu/gusso230/tetris/Board.java
index 7a70673..ee791ac 100644
--- a/src/se/liu/gusso230/tetris/Board.java
+++ b/src/se/liu/gusso230/tetris/Board.java
@@ -1,5 +1,7 @@
package se.liu.gusso230.tetris;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Random;
public class Board {
@@ -11,6 +13,8 @@ public class Board {
private int fallingX;
private int fallingY;
+ private List<BoardListener> boardListeners;
+
private final static Random RND = new Random();
public static void main(String[] args) {
@@ -26,6 +30,7 @@ public class Board {
squares[y][x] = SquareType.EMPTY;
}
}
+ boardListeners = new ArrayList<>();
}
public int getWidth() {
@@ -58,14 +63,17 @@ public class Board {
public void setFalling(final Poly falling) {
this.falling = falling;
+ notifyListeners();
}
public void setFallingX(final int fallingX) {
this.fallingX = fallingX;
+ notifyListeners();
}
public void setFallingY(final int fallingY) {
this.fallingY = fallingY;
+ notifyListeners();
}
/**
@@ -79,5 +87,16 @@ public class Board {
squares[y][x] = values[RND.nextInt(numValues)];
}
}
+ notifyListeners();
+ }
+
+ public void addListener(BoardListener bl) {
+ boardListeners.add(bl);
+ }
+
+ private void notifyListeners() {
+ for (BoardListener bl: boardListeners) {
+ bl.boardChanged();
+ }
}
}
diff --git a/src/se/liu/gusso230/tetris/BoardListener.java b/src/se/liu/gusso230/tetris/BoardListener.java
new file mode 100644
index 0000000..34d8352
--- /dev/null
+++ b/src/se/liu/gusso230/tetris/BoardListener.java
@@ -0,0 +1,5 @@
+package se.liu.gusso230.tetris;
+
+public interface BoardListener {
+ public void boardChanged();
+}
diff --git a/src/se/liu/gusso230/tetris/BoardTester.java b/src/se/liu/gusso230/tetris/BoardTester.java
index 0ee7f2e..7d7770c 100644
--- a/src/se/liu/gusso230/tetris/BoardTester.java
+++ b/src/se/liu/gusso230/tetris/BoardTester.java
@@ -17,7 +17,6 @@ public class BoardTester {
final Action doOneStep = new AbstractAction() {
@Override public void actionPerformed(final ActionEvent actionEvent) {
board.randomize();
- viewer.update();
}
};
diff --git a/src/se/liu/gusso230/tetris/TetrisComponent.java b/src/se/liu/gusso230/tetris/TetrisComponent.java
index cecce16..fcc6834 100644
--- a/src/se/liu/gusso230/tetris/TetrisComponent.java
+++ b/src/se/liu/gusso230/tetris/TetrisComponent.java
@@ -4,7 +4,7 @@ import javax.swing.*;
import java.awt.*;
import java.util.EnumMap;
-public class TetrisComponent extends JComponent {
+public class TetrisComponent extends JComponent implements BoardListener {
private static final int TILE_SIZE = 28;
private static final int TILE_GAP = 4;
private static final EnumMap<SquareType, Color> SQUARE_TYPE_COLORS = getDefaultColors();
@@ -31,6 +31,10 @@ public class TetrisComponent extends JComponent {
return SQUARE_TYPE_COLORS.get(board.getSquareAt(x, y));
}
+ @Override public void boardChanged() {
+ repaint();
+ }
+
public Dimension getPreferredSize() {
return new Dimension(board.getWidth(), board.getHeight());
}
diff --git a/src/se/liu/gusso230/tetris/TetrisViewer.java b/src/se/liu/gusso230/tetris/TetrisViewer.java
index a386ee1..c1e6098 100644
--- a/src/se/liu/gusso230/tetris/TetrisViewer.java
+++ b/src/se/liu/gusso230/tetris/TetrisViewer.java
@@ -8,6 +8,7 @@ public class TetrisViewer {
public TetrisViewer(Board board) {
tetrisComponent = new TetrisComponent(board);
+ board.addListener(tetrisComponent);
}
public void show() {