diff --git a/scr/tetris b/scr/tetris new file mode 100644 index 0000000..29c68f0 --- /dev/null +++ b/scr/tetris @@ -0,0 +1,68 @@ +package tetris; + +public class Block { + private final int type; + private int x, y; + private int[][] shape; + private static final int[][][] SHAPES = { + {{1, 1, 1, 1}}, {{1, 1}, {1, 1}}, {{1, 1, 1}, {0, 1, 0}}, + {{1, 1, 1}, {1, 0, 0}}, {{1, 1, 1}, {0, 0, 1}}, + {{0, 1, 1}, {1, 1, 0}}, {{1, 1, 0}, {0, 1, 1}} + }; + + public Block(int type) { + this.type = type; + this.shape = SHAPES[type]; + this.x = (type == 0) ? 3 : 4; + this.y = 0; + } + + public int getType() { + return type; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public int[][] getShape() { + return shape.clone(); + } + + public void moveLeft() { + x--; + } + + public void moveRight() { + x++; + } + + public void moveDown() { + y++; + } + + public void moveTo(int x, int y) { + this.x = x; + this.y = y; + } + + public void rotate() { + int[][] newShape = new int[shape[0].length][shape.length]; + for (int i = 0; i < shape.length; i++) { + for (int j = 0; j < shape[0].length; j++) { + newShape[j][shape.length - 1 - i] = shape[i][j]; + } + } + shape = newShape; + adjustPositionAfterRotation(); + } + + private void adjustPositionAfterRotation() { + int maxWidth = shape[0].length; + x = Math.max(0, Math.min(x, 10 - maxWidth)); + } +} \ No newline at end of file