Knight's Tour Generator
Tourneys and the Fast Generation and Obfuscation of Closed Knight's Tours
Random.cpp
Go to the documentation of this file.
1 
4 // MIT License
5 //
6 // Copyright (c) 2019 Ian Parberry
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 // IN THE SOFTWARE.
25 
26 #pragma comment(lib,"Winmm.lib")
27 
28 #include "Random.h"
29 #include "Includes.h"
30 #include "Helpers.h"
31 
33 } //constructor
34 
38 
40  for(int i=0; i<4; i++)
41  m_uState[i] = (::rand() << 16)|::rand(); //32-bit kluge (Knuth would cringe)
42 } //srand
43 
48 
50  UINT s = m_uState[3];
51 
52  s ^= s << 11;
53  s ^= s >> 8;
54 
55  m_uState[3] = m_uState[2];
56  m_uState[2] = m_uState[1];
57  m_uState[1] = m_uState[0];
58 
59  s ^= m_uState[0];
60  s ^= m_uState[0] >> 19;
61 
62  m_uState[0] = s;
63 
64  return s;
65 } //randn
66 
71 
73  return randn()%(j - i + 1) + i;
74 } //randn
75 
85 
87  return float((double)randn()/(double)0xFFFFFFFF);
88 } //randf
89 
96 
97 void CRandom::randclr(UINT rgb[3]){
98  float RGB[3]; //RGB color in floating point format
99  HSVtoRGB(randf(), 0.75f, 0.6f, RGB); //generate in HSV and convert to RGB
100 
101  for(int i=0; i<3; i++) //convert from floating point to [0..255]
102  rgb[i] = (UINT)std::round(RGB[i]*255.0f);
103 } //randclr
UINT m_uState[4]
Current state.
Definition: Random.h:40
CRandom()
Constructor.
Definition: Random.cpp:32
Useful includes.
UINT randn()
Get a random unsigned integer.
Definition: Random.cpp:49
float randf()
Get a random floating point number.
Definition: Random.cpp:86
Header for helper functions.
void randclr(UINT rgb[3])
Get a random color.
Definition: Random.cpp:97
unsigned int UINT
Abbreviation for unsigned integer.
Definition: Defines.h:84
Header for the pseudo-random number generator CRandom.
void srand()
Seed the random number generator.
Definition: Random.cpp:39
void HSVtoRGB(float h, float s, float v, float rgb[3])
HSV to RGB color.
Definition: Helpers.cpp:149