public void handleGameStatus(GameStatus status, GameStatusCaretaker caretaker) {
        handleMemento(status, caretaker);

        status.setRounds(status.getRounds() + 1);
        status.setLevel(handleLevel(status.getLevel()));

        if (isLevelStateChangeRequired()) {
            if (status.getLevel() % EVALUATE_OPERATOR == 0) {
                if (status.getOperator() < MAX_OPERATOR)
                    status.setOperator(handleOperator(status.getOperator()));
            } else if (status.getLevel() % EVALUATE_PARAMETER == 0) {
                if (status.getParameter() < MAX_PARAMETER)
                    status.setParameter(handleParameter(status.getParameter()));
            }

            for (int i = 0; i < ALLOWED_NUMBER.length; i++) {
                if (status.getLevel() == LEVEL_ALLOWED_NUMBER[i]) {
                    status.setNumberAllowed(ALLOWED_NUMBER[i]);
                    i = 100;
                }
            }
        }

        status.setTimeAllowed(handleTimeAllowed(status.getLevel(), status.getTimeAllowed()));
        status.setLoseCount(handleLoseCount(status.getLoseCount()));
        status.setWinCount(handleWinCount(status.getWinCount()));
        status.setWinningStreak(handleWinningStreak(status.getWinningStreak()));
        status.setHighestWinningStreak(handleHighestWinningStreak(status.getHighestWinningStreak(), status.getWinningStreak()));
    }