summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-09 20:29:14 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-03-09 20:29:14 +0100
commite2c067eb64ab3825351e928adc4ae30b25465292 (patch)
tree34bfb4c9734dbe4b2805a2789f1f792cc5a8e657
parent09ad68845a77ddc04e9f1ea4f58625646ddeb059 (diff)
downloadtdde30-e2c067eb64ab3825351e928adc4ae30b25465292.tar.gz
redovisning
-rw-r--r--src/se/liu/gusso230/tetris/BoardInterface.java1
-rw-r--r--src/se/liu/gusso230/tetris/BoardListener.java1
-rw-r--r--src/se/liu/gusso230/tetris/BoardTester.java2
-rw-r--r--src/se/liu/gusso230/tetris/Heavy.java5
-rw-r--r--src/se/liu/gusso230/tetris/TetrisComponent.java41
-rw-r--r--src/se/liu/gusso230/tetris/TetrisViewer.java7
6 files changed, 33 insertions, 24 deletions
diff --git a/src/se/liu/gusso230/tetris/BoardInterface.java b/src/se/liu/gusso230/tetris/BoardInterface.java
index 8f9ec0a..76d4964 100644
--- a/src/se/liu/gusso230/tetris/BoardInterface.java
+++ b/src/se/liu/gusso230/tetris/BoardInterface.java
@@ -1,5 +1,6 @@
package se.liu.gusso230.tetris;
+// Used by Board to prompt the user in some way.
public interface BoardInterface {
boolean promptUserYesNo(String prompt);
String promptUserString(String prompt);
diff --git a/src/se/liu/gusso230/tetris/BoardListener.java b/src/se/liu/gusso230/tetris/BoardListener.java
index 7ed7380..34d8352 100644
--- a/src/se/liu/gusso230/tetris/BoardListener.java
+++ b/src/se/liu/gusso230/tetris/BoardListener.java
@@ -2,5 +2,4 @@ package se.liu.gusso230.tetris;
public interface BoardListener {
public void boardChanged();
- //public void onGameOver(); //TODO
}
diff --git a/src/se/liu/gusso230/tetris/BoardTester.java b/src/se/liu/gusso230/tetris/BoardTester.java
index 82c225e..8c8dacd 100644
--- a/src/se/liu/gusso230/tetris/BoardTester.java
+++ b/src/se/liu/gusso230/tetris/BoardTester.java
@@ -7,7 +7,7 @@ public class BoardTester implements BoardInterface {
HighscoreList highscores = new HighscoreList();
Board board = new Board(10, 20, highscores, new BoardTester());
- TetrisViewer viewer = new TetrisViewer(board);
+ TetrisViewer viewer = new TetrisViewer(board, ClassLoader.getSystemResource("images/hello_world.png"));
viewer.show();
board.getTimer().start();
diff --git a/src/se/liu/gusso230/tetris/Heavy.java b/src/se/liu/gusso230/tetris/Heavy.java
index 85666b6..519d812 100644
--- a/src/se/liu/gusso230/tetris/Heavy.java
+++ b/src/se/liu/gusso230/tetris/Heavy.java
@@ -1,9 +1,9 @@
package se.liu.gusso230.tetris;
-public class Heavy implements FallHandler {
+public class Heavy extends DefaultFallHandler {
@Override public boolean hasFallingCollision(final Board board, final int dx, final int dy) {
if (dx != 0) {
- return new DefaultFallHandler().hasFallingCollision(board, dx, dy); //inget new
+ return super.hasFallingCollision(board, dx, dy);
}
for (Point point: board.getFalling().getPoints()) {
@@ -27,6 +27,7 @@ public class Heavy implements FallHandler {
}
}
+ // move points
for (Point point: board.getFalling().getPoints()) {
int x = board.getFallingX() + point.getX();
int y = board.getFallingY() + point.getY();
diff --git a/src/se/liu/gusso230/tetris/TetrisComponent.java b/src/se/liu/gusso230/tetris/TetrisComponent.java
index f5720f1..b3d0884 100644
--- a/src/se/liu/gusso230/tetris/TetrisComponent.java
+++ b/src/se/liu/gusso230/tetris/TetrisComponent.java
@@ -29,33 +29,31 @@ public class TetrisComponent extends JComponent implements BoardListener {
this.getInputMap().put(KeyStroke.getKeyStroke('q'), "fallthrough");
this.getInputMap().put(KeyStroke.getKeyStroke('e'), "heavy");
- this.getActionMap().put("moveLeft", new MoveAction(Direction.LEFT));
- this.getActionMap().put("moveRight", new MoveAction(Direction.RIGHT));
- this.getActionMap().put("rotateLeft", new RotateAction(Direction.LEFT));
- this.getActionMap().put("rotateRight", new RotateAction(Direction.RIGHT));
+ this.getActionMap().put("moveLeft", new MoveAction(MoveActionType.MOVE, Direction.LEFT));
+ this.getActionMap().put("moveRight", new MoveAction(MoveActionType.MOVE, Direction.RIGHT));
+ this.getActionMap().put("rotateLeft", new MoveAction(MoveActionType.ROTATE, Direction.LEFT));
+ this.getActionMap().put("rotateRight", new MoveAction(MoveActionType.ROTATE, Direction.RIGHT));
this.getActionMap().put("fallthrough", new PowerUpAction(new Fallthrough()));
this.getActionMap().put("heavy", new PowerUpAction(new Heavy()));
}
private class MoveAction extends AbstractAction {
+ private MoveActionType type;
private Direction dir;
- private MoveAction(Direction dir) {
+ private MoveAction(MoveActionType type, Direction dir) {
+ this.type = type;
this.dir = dir;
}
@Override public void actionPerformed(final ActionEvent actionEvent) {
- board.move(dir);
- }
- }
- //TODO join move and rotate
- private class RotateAction extends AbstractAction {
- private Direction dir;
- private RotateAction(Direction dir) {
- this.dir = dir;
- }
-
- @Override public void actionPerformed(final ActionEvent actionEvent) {
- board.rotate(dir);
+ switch (type) {
+ case MOVE:
+ board.move(dir);
+ break;
+ case ROTATE:
+ board.rotate(dir);
+ break;
+ }
}
}
@@ -105,6 +103,10 @@ public class TetrisComponent extends JComponent implements BoardListener {
requestFocus();
}
+ @Override public void onGameOver() {
+
+ }
+
public Color getColor(int x, int y) {
return SQUARE_TYPE_COLORS.get(board.getSquareAt(x, y, true));
}
@@ -129,4 +131,9 @@ public class TetrisComponent extends JComponent implements BoardListener {
map.put(SquareType.L, Color.PINK);
return map;
}
+
+ private enum MoveActionType {
+ MOVE,
+ ROTATE,
+ }
}
diff --git a/src/se/liu/gusso230/tetris/TetrisViewer.java b/src/se/liu/gusso230/tetris/TetrisViewer.java
index fb824f9..0406c7c 100644
--- a/src/se/liu/gusso230/tetris/TetrisViewer.java
+++ b/src/se/liu/gusso230/tetris/TetrisViewer.java
@@ -3,6 +3,7 @@ package se.liu.gusso230.tetris;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
+import java.net.URL;
public class TetrisViewer {
private JMenuBar menuBar;
@@ -10,12 +11,11 @@ public class TetrisViewer {
private TetrisComponent tetrisComponent;
private Board board;
- public TetrisViewer(final Board board) {
+ public TetrisViewer(final Board board, URL image) {
menuBar = setUpMenuBar();
- imageComponent = new ImageComponent(ClassLoader.getSystemResource("images/hello_world.png")); //TODO arg
+ imageComponent = new ImageComponent(image);
tetrisComponent = new TetrisComponent(board);
this.board = board;
- board.addListener(tetrisComponent); //TODO move
}
private JMenuBar setUpMenuBar() {
@@ -67,6 +67,7 @@ public class TetrisViewer {
frame.remove(imageComponent);
frame.add(tetrisComponent, BorderLayout.CENTER);
frame.pack();
+ board.addListener(tetrisComponent);
update();
}