诸暨麻将添加redis
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

143 wiersze
2.9 KiB

  1. #include "stdafx.h"
  2. #include "GetRandom.h"
  3. #include <shlwapi.h>
  4. #pragma comment(lib,"Shlwapi.lib") //如果没有这行,会出现link错误
  5. STRUCTRANDOMALL GetRandom::RandomData1;
  6. CFile GetRandom::gFile; //文件句柄
  7. BOOL GetRandom::bRun = FALSE; //运行
  8. GetRandom::GetRandom()
  9. {
  10. }
  11. //获取随机数
  12. DWORD GetRandom::GetRandomValue()
  13. {
  14. DWORD dRet = 0;
  15. //左边
  16. if (RandomData1.bPlay >= 90 * 10000 - 1)
  17. {
  18. //重新生成
  19. CreateAllRandomValue();
  20. //更新到备份数据; 把此数据重新生成。 记录更新日志。
  21. dRet = RandomData1.stData[RandomData1.bPlay].dwRandom;
  22. RandomData1.bPlay++;
  23. }
  24. else
  25. {
  26. dRet = RandomData1.stData[RandomData1.bPlay].dwRandom;
  27. RandomData1.bPlay++;
  28. }
  29. return dRet;
  30. }
  31. GetRandom::~GetRandom()
  32. {
  33. }
  34. //重新生成随机数
  35. bool GetRandom::CreateAllRandomValue()
  36. {
  37. DWORD dTime = GetTickCount();
  38. ZeroMemory(&RandomData1, sizeof(STRUCTRANDOMALL));
  39. STRUCTRANDOMALL *p = new STRUCTRANDOMALL();
  40. if (!p) return false;
  41. ZeroMemory(p, sizeof(STRUCTRANDOMALL));
  42. for (int i = 100000; i < 100 * 10000;i++)
  43. {
  44. RandomData1.stData[i - 100000].dwRandom = i;
  45. }
  46. //随机种子
  47. srand(GetTickCount());
  48. int cbMaxCount = 90*10000;
  49. //混乱扑克
  50. int cbRandCount = 0, cbPosition = 0;
  51. do
  52. {
  53. cbPosition = (rand() % 90 * 10000 + rand() % 10000) % (cbMaxCount - cbRandCount);
  54. p->stData[cbRandCount++].dwRandom = RandomData1.stData[cbPosition].dwRandom;
  55. RandomData1.stData[cbPosition].dwRandom = RandomData1.stData[cbMaxCount - cbRandCount].dwRandom;
  56. } while (cbRandCount<cbMaxCount);
  57. CopyMemory(&RandomData1, p, sizeof(STRUCTRANDOMALL));
  58. if (p) delete p;
  59. return true;
  60. }
  61. //加载
  62. bool GetRandom::Load()
  63. {
  64. CFileFind fFind;
  65. if (!PathFileExists(L"RANDOM.D"))
  66. {
  67. //如果没有 则创建
  68. bRun = gFile.Open(L"RANDOM.D", CFile::modeCreate | CFile::modeReadWrite | CFile::typeBinary);
  69. if (!bRun)
  70. {
  71. //不成功
  72. CString str;
  73. str.Format(TEXT("创建随机文件失败。"));
  74. CTraceService::TraceString(str, TraceLevel_Normal);
  75. return false;
  76. }
  77. else
  78. {
  79. CreateAllRandomValue();
  80. gFile.Write(&RandomData1, sizeof(RandomData1));
  81. }
  82. //CString str = TEXT("创建随机文件成功。");
  83. //CTraceService::TraceString(str, TraceLevel_Normal);
  84. }
  85. else
  86. {
  87. //有则读取
  88. bRun = gFile.Open(L"RANDOM.D", CFile::modeReadWrite | CFile::typeBinary);
  89. if (!bRun)
  90. {
  91. //不成功
  92. CString str;
  93. str.Format(TEXT("打开随机文件失败。"));
  94. CTraceService::TraceString(str, TraceLevel_Normal);
  95. return false;
  96. }
  97. else
  98. {
  99. int iRet = gFile.Read((void*)&RandomData1, sizeof(RandomData1));
  100. if (iRet <= 0)
  101. {
  102. CString str;
  103. str.Format(TEXT("读取随机文件失败。"));
  104. CTraceService::TraceString(str, TraceLevel_Normal);
  105. return false;
  106. }
  107. }
  108. }
  109. return true;
  110. }
  111. //保存
  112. bool GetRandom::End()
  113. {
  114. if (bRun)
  115. {
  116. gFile.SeekToBegin();
  117. gFile.Write(&RandomData1, sizeof(RandomData1));
  118. gFile.Close();
  119. bRun = false;
  120. }
  121. return true;
  122. }