#include "stdafx.h" #include "GetRandom.h" #include #pragma comment(lib,"Shlwapi.lib") //如果没有这行,会出现link错误 STRUCTRANDOMALL GetRandom::RandomData1; CFile GetRandom::gFile; //文件句柄 BOOL GetRandom::bRun = FALSE; //运行 GetRandom::GetRandom() { } //获取随机数 DWORD GetRandom::GetRandomValue() { DWORD dRet = 0; //左边 if (RandomData1.bPlay >= 90 * 10000 - 1) { //重新生成 CreateAllRandomValue(); //更新到备份数据; 把此数据重新生成。 记录更新日志。 dRet = RandomData1.stData[RandomData1.bPlay].dwRandom; RandomData1.bPlay++; } else { dRet = RandomData1.stData[RandomData1.bPlay].dwRandom; RandomData1.bPlay++; } return dRet; } GetRandom::~GetRandom() { } //重新生成随机数 bool GetRandom::CreateAllRandomValue() { DWORD dTime = GetTickCount(); ZeroMemory(&RandomData1, sizeof(STRUCTRANDOMALL)); STRUCTRANDOMALL *p = new STRUCTRANDOMALL(); if (!p) return false; ZeroMemory(p, sizeof(STRUCTRANDOMALL)); for (int i = 100000; i < 100 * 10000;i++) { RandomData1.stData[i - 100000].dwRandom = i; } //随机种子 srand(GetTickCount()); int cbMaxCount = 90*10000; //混乱扑克 int cbRandCount = 0, cbPosition = 0; do { cbPosition = (rand() % 90 * 10000 + rand() % 10000) % (cbMaxCount - cbRandCount); p->stData[cbRandCount++].dwRandom = RandomData1.stData[cbPosition].dwRandom; RandomData1.stData[cbPosition].dwRandom = RandomData1.stData[cbMaxCount - cbRandCount].dwRandom; } while (cbRandCount