Как сделать счетчик, который будет показывать, сколько времени прошло с начала игры?

Принятый ответ

Автор - ScorpioT1000, код из проекта Jack's Company. с моими незначительными переработками.
раскрыть


library GameClock initializer Init
{
    // CONSTANTS
    #define private LIMIT   = 2147483000    // ~596 hours in milliseconds.
    #define private MS_SEC  = 1000          // One second in milliseconds.
    #define private MS_MIN  = 60000         // One minute in milliseconds.
    #define private MS_HR   = 3600000       // One hour   in milliseconds.
    
    #define private PERIOD  = 0.05          // Tick rate  in milliseconds.
    // END OF CONSTANTS

    private int   msPassed    = 0
    private timer Timer = CreateTimer()


    // Master
    // Count in real seconds.
    float GetTimeInSFloat() {
        return I2R(msPassed) / I2R(MS_SEC)
    }

    // Current hours on clock.
    int GetTimeInH() {
        return msPassed / MS_HR
    }

    // Current minutes on clock.
    int GetTimeInM() {
        if(msPassed >= MS_HR) {
            return ModuloInteger(msPassed, MS_HR) / MS_MIN
        }
        return msPassed / MS_MIN
    }

    // Current seconds on clock.
    int GetTimeInS() {
        if(msPassed >= MS_MIN) {
            return ModuloInteger(msPassed, MS_MIN) / MS_SEC
        }
        if(msPassed >= MS_HR) {
            return ModuloInteger(msPassed, MS_HR) / MS_SEC
        }
        return msPassed / MS_SEC
    }

    // Current milliseconds on clock.
    int GetTimeInMS() {
        if(msPassed >= MS_SEC) {
            return ModuloInteger(msPassed, MS_SEC)
        }
        if(msPassed >= MS_MIN) {
            return ModuloInteger(msPassed, MS_MIN)
        }
        if(msPassed >= MS_HR) {
            return ModuloInteger(msPassed, MS_HR)
        }
        return msPassed
    }

    // Auxillary
    // Total milliseconds passed since game start.
    int GetTimeInAbs() {
        return msPassed
    }

    // Total seconds passed since game start.
    int GetTimeInAbsS() {
        return msPassed / MS_SEC
    }

    // Total minutes passed since game start.
    int GetTimeInAbsM() {
        return msPassed / MS_MIN
    }

    // Total hours passed since game start.
    int GetTimeInAbsH() {
        return msPassed / MS_HR
    }

    // Actual time in formatted string.
    string GetGameCount() {
        string h  = I2S(GetTimeInH ())
        string m  = I2S(GetTimeInM ())
        string s  = I2S(GetTimeInS ())
        string ms = I2S(GetTimeInMS())

        return ( h + ":" + m + ":" + s + "."+ ms )
    }

    private void Increment() {
        if(msPassed > LIMIT) {
            PauseTimer(Timer)
            return
        }
        msPassed = msPassed + R2I(1000*PERIOD)
    }

    private void Init() {
        TimerStart(Timer, PERIOD, true, function Increment)
    }
}
0
20
7 лет назад
0
триггер с событием - время - периодически, каждую 1 сек
действие - прибавить к переменной типа integer 1
второй триггер с событием - игрок вводит что-то в чат
действие - игра - показать сообщение - переводим integer в string
а вообще надо заиметь представление о том, что такое алгоритмы и не задавать крайне неумных вопросов
0
10
7 лет назад
0
либо запустить таймер сначала игры и проверять истекшее время когда тебе нужно
0
30
7 лет назад
0
Автор - ScorpioT1000, код из проекта Jack's Company. с моими незначительными переработками.
раскрыть


library GameClock initializer Init
{
    // CONSTANTS
    #define private LIMIT   = 2147483000    // ~596 hours in milliseconds.
    #define private MS_SEC  = 1000          // One second in milliseconds.
    #define private MS_MIN  = 60000         // One minute in milliseconds.
    #define private MS_HR   = 3600000       // One hour   in milliseconds.
    
    #define private PERIOD  = 0.05          // Tick rate  in milliseconds.
    // END OF CONSTANTS

    private int   msPassed    = 0
    private timer Timer = CreateTimer()


    // Master
    // Count in real seconds.
    float GetTimeInSFloat() {
        return I2R(msPassed) / I2R(MS_SEC)
    }

    // Current hours on clock.
    int GetTimeInH() {
        return msPassed / MS_HR
    }

    // Current minutes on clock.
    int GetTimeInM() {
        if(msPassed >= MS_HR) {
            return ModuloInteger(msPassed, MS_HR) / MS_MIN
        }
        return msPassed / MS_MIN
    }

    // Current seconds on clock.
    int GetTimeInS() {
        if(msPassed >= MS_MIN) {
            return ModuloInteger(msPassed, MS_MIN) / MS_SEC
        }
        if(msPassed >= MS_HR) {
            return ModuloInteger(msPassed, MS_HR) / MS_SEC
        }
        return msPassed / MS_SEC
    }

    // Current milliseconds on clock.
    int GetTimeInMS() {
        if(msPassed >= MS_SEC) {
            return ModuloInteger(msPassed, MS_SEC)
        }
        if(msPassed >= MS_MIN) {
            return ModuloInteger(msPassed, MS_MIN)
        }
        if(msPassed >= MS_HR) {
            return ModuloInteger(msPassed, MS_HR)
        }
        return msPassed
    }

    // Auxillary
    // Total milliseconds passed since game start.
    int GetTimeInAbs() {
        return msPassed
    }

    // Total seconds passed since game start.
    int GetTimeInAbsS() {
        return msPassed / MS_SEC
    }

    // Total minutes passed since game start.
    int GetTimeInAbsM() {
        return msPassed / MS_MIN
    }

    // Total hours passed since game start.
    int GetTimeInAbsH() {
        return msPassed / MS_HR
    }

    // Actual time in formatted string.
    string GetGameCount() {
        string h  = I2S(GetTimeInH ())
        string m  = I2S(GetTimeInM ())
        string s  = I2S(GetTimeInS ())
        string ms = I2S(GetTimeInMS())

        return ( h + ":" + m + ":" + s + "."+ ms )
    }

    private void Increment() {
        if(msPassed > LIMIT) {
            PauseTimer(Timer)
            return
        }
        msPassed = msPassed + R2I(1000*PERIOD)
    }

    private void Init() {
        TimerStart(Timer, PERIOD, true, function Increment)
    }
}
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.