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)); } }