private void scoreGame() {
        int roundScore = 0;
        int lineMultiples = 0;
        boolean scored = false;
        boolean hasBonus = false;
        List<Integer> rowsToKill = new ArrayList<>();
        for (int r = 0; r < boardState.length; r++) {
            boolean isComplete = true;
            for (int c = 0; c < boardState[r].length; c++) {
                if (boardState[r][c] == 0) {
                    roundScore += scoreMultiples(lineMultiples);
                    lineMultiples = 0;
                    isComplete = false;
                    break;
                }
            }
            if (isComplete) {
                rowsToKill.add(r);
                scored = true;
                lineMultiples++;
                lines++;
                linesThisLevel++;
            }
            if (lineMultiples == 4) {
                roundScore += scoreMultiples(lineMultiples);
                hasBonus = true;
                lineMultiples = 0;
            }
        }
        if (!scored) {
            return;
        }
        score += roundScore + scoreMultiples(lineMultiples);
        fireStateChangeListners(scoreListeners);
        killRows(rowsToKill);
        if (playSound) {
            if (hasBonus) {
                bonusSound.play();
            } else {
                linesSound.play();
            }
        }
    }