public void moveDown(boolean isUserTriggered) {
        if (freezing || !isGameOn) {
            return;
        }
        if (!checkMovable("DOWN")) {
            for (int i = 0; i < currentTokens.length; i++) {
                int x = currentTokens[i][0];
                int y = currentTokens[i][1];
                tokens[y][x].setFrozen(true);
            }

            if (!checkBlowLines()) {
                placeTokenWithFlash();
                nextMove(0);
                setChanged();
                notifyObservers("Place");
            }
            return;
        }
        setCurrentTokens(0);

        if (isUserTriggered) {
            increaseScore(1);
            setChanged();
            notifyObservers("Move");
        }

        for (int i = 0; i < currentTokens.length; i++) {
            int x = currentTokens[i][0];
            int y = currentTokens[i][1] + 1;
            tokens[y][x].setType(currentType);
            currentTokens[i][1] = y;// move position down 1 point
        }
        refresh();
    }