public void forceMove() {
        if (currentPiece == null) {
            currentPiece = nextPiece;
            nextPiece = randomShape();
            if (!placeShape(currentPiece)) {
                gameOver = true;
            }
        } else if (currentPiece.getY() + currentPiece.getHeight() == ROWS) {
            leavePiece();
            clearLines();
        } else {
            for (int y = currentPiece.getHeight() - 1; y >= 0; y--) {
                for (int x = 0; x < currentPiece.getWidth(); x++) {
                    if (currentPiece.getBlock(x, y)
                            && getBlock(x + currentPiece.getX(), y + currentPiece.getY() + 1) != BlockType.EMPTY) {
                        leavePiece();
                        clearLines();
                        return;
                    }
                }
            }
            currentPiece.moveDown();
        }
        notifyObservers();
    }