Click here to Skip to main content
15,885,278 members
Articles / Desktop Programming / MFC
Article

Simple Random Class (EasyRandom)

Rate me:
Please Sign up or sign in to vote.
2.33/5 (5 votes)
4 Jun 20022 min read 98.5K   1.9K   24   14
A simple class to use in your MFC project to generate random numbers within an interval.

Sample Image - EasyRandom.jpg

Introduction

I searched the net for ages looking for sample classes & examples to generate a random number between two values. (Example - between 1 and 100). I wrote a MFC application where riddles are used to check whether a temporary employee, working the evening shift, is awake. The entity must respond within a certain time frame to the riddle, otherwise he is either sleeping or playing Return to Castle Wolfenstein. Sorry! Back to the problem - The riddles are read in from a text file, but I needed to randomize the riddles so that every time the application starts a random riddle is generated.

I developed a very simple class called EasyRandom and can (should) be easily integrated in your project.

The seed for the pseudo-random number is generated using the current local system time and date. This means random numbers generated will always be different, even if the application is scheduled to start at set intervals in a day.

The sample project I include is just to show you the workings and how the class file is added to the MFC project.

Using the class

  • In file view, add the EasyRand.cpp file to your project.
  • Still in file view, double-click on <YourProject>Dlg.cpp and add the following code segment in the declaration section: (in BOLD)
    #include "stdafx.h"
    #include "EasyRand.h"
  • In the In the sample application, I used a Randomize button to generate my random numbers, I'll use the OnRandom function (called when the randomize button is pressed) to demonstrate the class usage:
    void CTestEasyRandomDlg::OnRandom() 
    {
       CString s;
       UpdateData();
       m_cRandomBox.ResetContent();
       EasyRandom RandomX(m_nLow,m_nHigh);
       RandomX.SetTimerSeed();
       for (int i = 0; i < m_nAmount; i++) 
       {
          s.Format("%d", RandomX.DrawRandomNumber());
          m_cRandomBox.AddString(s);
       }
       UpdateData(FALSE);
    }
  • EasyRandom RandomX(m_nLow, m_nHigh); This is the general interface to the EasyRandom class. This line creates the object RandomX and passes the Low and High values to the constructor
  • RandomX.SetTimerSeed(); This statement sets the random seed for object RandomX. (The seed is generated using the local system time + date)
  • RandomX.DrawRandomNumber(); Returns a (one) random number.

Summary

Here is a summary of the public interfaces of the class...

// default conmstructor with defaults of 0 & 1
EasyRandom(int a=0, int b=1);

// Mutator:
// Sets high and low values
void SetInterval(int a, int b);

// Faclitators:
// Display Random numbers...
int DrawRandomNumber();
	
// Set seed using current time
void SetTimerSeed();

Recap - 3 easy steps:

  1. Ceate an EasyRandom object
  2. call SetTimerSeed() to initialise the "random" seed.
  3. call DrawRandomNumber() for output

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
South Africa South Africa
I am an IT security consultant that focuses mainly in Oracle, Microsoft, Citrix, RSA, SUN, and Linux security. What I do is Perimeter security design (firewalls, IDS etc) as well as internal / external network assessments (penetration).

On the programming side I’m sellable on VC++. I’m also strong using c# (asp.net) TSQL, VC++.Net, STL, COM, ATL, Java/VBscript / Coldfusion /

Home page: http://www.starbal.net

Comments and Discussions

 
GeneralCStdLib rand() Pin
Darek Nawrocki9-Sep-06 9:08
Darek Nawrocki9-Sep-06 9:08 
I respect Your solution, but why don't you just use cstdlib rand() function ? Smile | :)

#include <cstdlib>

int v = rand() % radius;



gtx
darek
GeneralRe: CStdLib rand() Pin
Darek Nawrocki9-Sep-06 9:10
Darek Nawrocki9-Sep-06 9:10 
GeneralRe: CStdLib rand() Pin
nums11-Sep-06 6:56
nums11-Sep-06 6:56 
Generalcould just put in a function like this .. Pin
Bill Gates Antimatter Particle23-Aug-02 1:11
Bill Gates Antimatter Particle23-Aug-02 1:11 
GeneralRe: could just put in a function like this .. Pin
Tim Smith23-Aug-02 1:59
Tim Smith23-Aug-02 1:59 
GeneralPoor random number generator Pin
Philippe Lhoste11-Jun-02 2:35
Philippe Lhoste11-Jun-02 2:35 
GeneralRe: Poor random number generator Pin
nums11-Jun-02 3:39
nums11-Jun-02 3:39 
GeneralRe: Poor random number generator Pin
Philippe Lhoste11-Jun-02 3:59
Philippe Lhoste11-Jun-02 3:59 
GeneralRe: Poor random number generator Pin
Tim Smith23-Aug-02 2:01
Tim Smith23-Aug-02 2:01 
GeneralRPG dice Pin
SunKnight5-Jun-02 15:37
SunKnight5-Jun-02 15:37 
GeneralSleeping Employees Pin
Kevnar5-Jun-02 7:02
Kevnar5-Jun-02 7:02 
GeneralRe: Sleeping Employees Pin
nums5-Jun-02 21:06
nums5-Jun-02 21:06 
GeneralRe: Sleeping Employees Pin
Kevnar6-Jun-02 6:10
Kevnar6-Jun-02 6:10 
GeneralRe: Sleeping Employees Pin
nums11-Jun-02 3:51
nums11-Jun-02 3:51 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.