DragonNest/Common/Utility/PrandGen.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

58 lines
No EOL
1.3 KiB
C++

/* Copyright (C) Guy W. Lecky-Thompson, 2000.
* All rights reserved worldwide.
*
* This software is provided "as is" without express or implied
* warranties. You may freely copy and compile this source into
* applications you distribute provided that the copyright text
* below is included in the resulting source code, for example:
* "Portions Copyright (C) Guy W. Lecky-Thompson, 2000"
*/
// Pseudo-Random Number Generator
// (C) 2000 Guy W. Lecky-Thompson
#include <stdlib.h>
// Standard ANSI C header file
#include <limits.h>
#include "stdafx.h"
// Standard ANSI C header for type limits
#include "PrandGen.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
// The constructor implementation
CPseudoRandom::CPseudoRandom()
{
m_lSeed = 0;
m_lGen1 = 0;
m_lGen2 = 0;
}
// The destructor implementation
CPseudoRandom::~CPseudoRandom()
{
m_lSeed = 0;
}
long CPseudoRandom::rand(long lMax)
{
long lNewSeed = m_lSeed;
long lReturn;
lNewSeed = (m_lGen1 * lNewSeed) + m_lGen2;
// Use modulo operator to ensure < ulMax
m_lSeed = lNewSeed;
lReturn = m_lSeed % lMax;
if (lReturn < 1) lReturn = lReturn * -1; // Keep it positive
return lReturn;
}
void CPseudoRandom::srand(long lSeed)
{
m_lSeed = lSeed;
// Pick two large integers such that
// one is double the other
m_lGen2 = 3719;
m_lGen1 = (m_lGen2 / 2);
}