hge source explor 0x9 Power & Random & Ini

Posted YORU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hge source explor 0x9 Power & Random & Ini相关的知识,希望对你有一定的参考价值。

Power

  电源管理部分,会用到的参数为:

    // Power
    int                            nPowerStatus;
    HMODULE                        hKrnl32;
    GetSystemPowerStatusFunc       lpfnGetSystemPowerStatus;

 

_InitPowerStatus()

  初始化电源信息:

  • LoadLibrary("kernel32.dll")
  • 获得函数GetSystemPowerStatus地址
  • 调用_UpdatePowerStatus
void HGE_Impl::_InitPowerStatus()
{
    hKrnl32 = LoadLibrary("kernel32.dll");

    if(hKrnl32 != NULL)
        lpfnGetSystemPowerStatus = (GetSystemPowerStatusFunc)GetProcAddress(hKrnl32, "GetSystemPowerStatus");

    _UpdatePowerStatus();
}
_InitPowerStatus

 

 _UpdatePowerStatus()

  获得电源信息。

void HGE_Impl::_UpdatePowerStatus()
{
    SYSTEM_POWER_STATUS ps;

    if(lpfnGetSystemPowerStatus != NULL && lpfnGetSystemPowerStatus(&ps))
    {
        if(ps.ACLineStatus == 1)
        {
            nPowerStatus = HGEPWR_AC;
        }
        else if(ps.BatteryFlag < 128)
        {
            nPowerStatus = ps.BatteryLifePercent;
        }
        else
        {
            nPowerStatus = HGEPWR_UNSUPPORTED;
        }
    }
    else
    {
        nPowerStatus = HGEPWR_UNSUPPORTED;
    }
}
_UpdatePowerStatus

 

 _DonePowerStatus()

  结束,释放动态链接库。

void HGE_Impl::_DonePowerStatus()
{
    if(hKrnl32 != NULL) FreeLibrary(hKrnl32);
}
_DonePowerStatus

 

Random

   在这个模块中提供随机数,作为唯一的参数的 是随机数的种子。

unsigned int g_seed=0;

 

 Random_Seed(int seed)

  设置随机数的种子。

void CALL HGE_Impl::Random_Seed(int seed)
{
    if(!seed) g_seed=timeGetTime();
    else g_seed=seed;
}
Random_Seed 

 

 Random_Int(int min, int max)

  线性同余法产生一个整型随机数,范围为(min,max)。

int CALL HGE_Impl::Random_Int(int min, int max)
{
    g_seed=214013*g_seed+2531011;
    return min+(g_seed ^ g_seed>>15)%(max-min+1);
}
Random_Int 

 

 Random_Float(float min, float max)

  产生一个浮点型随机数,范围为(min,max)。

float CALL HGE_Impl::Random_Float(float min, float max)
{
    g_seed=214013*g_seed+2531011;
    //return min+g_seed*(1.0f/4294967295.0f)*(max-min);
    return min+(g_seed>>16)*(1.0f/65535.0f)*(max-min);
}
Random_Float

 

Ini

   在这个部分中,从指定的Ini文件中读取、写入数据,所以需要一ini文件。

    char                szIniFile[_MAX_PATH];

 

 

set(const char* section,const char* name,type value);

  写入不同类型的参数。

void CALL HGE_Impl::Ini_SetInt(const char *section, const char *name, int value)
{
    char buf[256];

    if(szIniFile[0]) {
        sprintf(buf,"%d",value);
        WritePrivateProfileString(section, name, buf, szIniFile);
    }
}

void CALL HGE_Impl::Ini_SetFloat(const char *section, const char *name, float value)
{
    char buf[256];

    if(szIniFile[0]) {
        sprintf(buf,"%f",value);
        WritePrivateProfileString(section, name, buf, szIniFile);
    }
}

void CALL HGE_Impl::Ini_SetString(const char *section, const char *name, const char *value)
{
    if(szIniFile[0]) WritePrivateProfileString(section, name, value, szIniFile);
}
Setter

 

get(const char* section,const char* name, type value);

  读取数据。

int CALL HGE_Impl::Ini_GetInt(const char *section, const char *name, int def_val)
{
    char buf[256];

    if(szIniFile[0]) {
        if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
        { return atoi(buf); }
        else { return def_val; }
    }
    return def_val;
}


float CALL HGE_Impl::Ini_GetFloat(const char *section, const char *name, float def_val)
{
    char buf[256];

    if(szIniFile[0]) {
        if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
        { return (float)atof(buf); }
        else { return def_val; }
    }
    return def_val;
}

char* CALL HGE_Impl::Ini_GetString(const char *section, const char *name, const char *def_val)
{
    if(szIniFile[0]) GetPrivateProfileString(section, name, def_val, szIniString, sizeof(szIniString), szIniFile);
    else strcpy(szIniString, def_val);
    return szIniString;
}
Getter

  接下来就是图形了!

 

以上是关于hge source explor 0x9 Power & Random & Ini的主要内容,如果未能解决你的问题,请参考以下文章

hge source explor 0x8 timer

hge source explor 0x4 input module

hge source explor 0x6 input module

hge source explor 0x3 windows module

hge source explor 0xB graphics Ⅱ

hge source explor 0x5 input module