Files
Client/Library/dxx8/samples/Multimedia/DirectPlay/Maze/MazeCommon/Random.h
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

67 lines
1.8 KiB
C++

//----------------------------------------------------------------------------
// File: random.h
//
// Desc: see main.cpp
//
// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#ifndef _RANDOM_H
#define _RANDOM_H
//-----------------------------------------------------------------------------
// Name:
// Desc: Random number generator class - a simple linear congruential generator.
// We use this instead of the CRT function because we want to be certain that
// we are using the exact same generator on both server and client side and so
// (a) don't want to be at the mercy of CRT version changes, and (b) may want
// multiple independent generators which we can rely on the sequencing of.
//-----------------------------------------------------------------------------
class CRandom
{
public:
// Constructor. The random formula is X(n+1) = (a*X(n) + b) mod m
// The default values for a,b,m give a maximal period generator that does not
// overflow with 32-bit interger arithmetic.
CRandom( DWORD seed = 31415, DWORD a = 8121,
DWORD b = 28411, DWORD m = 134456 ) :
m_dwSeed(seed),m_dwA(a),m_dwB(b),m_dwM(m) {};
// Grab a random DWORD between 0 and m
DWORD Get()
{
m_dwSeed = ((m_dwA*m_dwSeed)+m_dwB) % m_dwM;
return m_dwSeed;
};
// Grab a random DWORD in the range [0,n-1]
DWORD Get( DWORD n )
{
return (Get() % n);
};
// Grab a random float in the range [0,1]
float GetFloat()
{
return Get() / float(m_dwM-1);
};
// Reset the seed
void Reset( DWORD seed = 31415 )
{
m_dwSeed = seed;
};
protected:
DWORD m_dwA, m_dwB, m_dwM;
DWORD m_dwSeed;
};
#endif