public void start() {
        logger.info("Stage:" + server.getStage().info().getTitle() + " Loaded.");
        logger.info("Enter \"h\" to show help info.");
        while (!CheckGameSuccess.check(server.getStage()) && !quited) {
            // check if the player could not win.
            if (new CheckDead().check(server.getStage()))
                logger.warn("It seems that you cannot win. History back(b) or Game restart(r) is recommended.");
            logger.info("You have moved " + server.getStage().info().getMoveSteps() + " step(s)");
            dumpStage();
            for (;;) {
                String cmd = Utils.getLine().toLowerCase();
                // Try to handle long command
                if (handleCommand(cmd)) break;
                boolean needBreak = false;
                // Handle every character of the command
                for (Byte x : cmd.getBytes()) {
                    needBreak |= handleSingleCommand((char) x.byteValue());
                }
                if (needBreak) break;
            }
        }
        if (!quited) {
            dumpStage();
            logger.info("You pass this stage in " + server.getStage().info().getMoveSteps() + " step(s)~ Congratulations!");
        }
    }