Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ | Generating a pseudo number between 10-20

Tags:

c++

random

I am making a text-based C++ RPG and I am trying to figure out how to work out the amount of damage that the enemy hits you for. My idea is something like this.

Damage done = randomIntBetween10and20*enemyLevel

This way it doesn't always hit for a set amount each time and allows there to be Critical Strikes (For example, if the hit is above 15 I would class that as a Critical Strike)

I'm new to C++ so I'm not quite sure how I can do this, any help would be greatly appreciated.

like image 390
Luke Berry Avatar asked Dec 10 '10 20:12

Luke Berry


2 Answers

You should omit the word "truly" from the title, because you probably don't mean it. You probably just want a pseudorandom number. True randomness is virtually impossible to achieve with a personal computer. The following snippet will give you a pseudorandom number in the range 10..19 inclusive:

#include<cstdlib>
#include<ctime>

// ...
srand(time(0));
int r = rand() % (20 - 10) + 10;

If you want to include 20 in the range then this is a range of 11 numbers:

int r = rand() % (21 - 10) + 10
like image 147
wilhelmtell Avatar answered Oct 12 '22 17:10

wilhelmtell


A good choice would be std::random, the random number generator that’s built-in to C++.

If you don’t have C++11 support yet, use boost::random. The new std::random is based on boost::random, so it’s basically the same thing. The documentation has several examples, including Generating integers in a range.

One of the options offered is the Mersenne Twister (mt19937), which is a good general-purpose pseudo-random number generator.

Like most of the other suggestions, this is pseudo-random. To get true randomness is more difficult—but you don’t need that for an RPG, right? (For cryptographically-strong random numbers, consider OpenSSL or, on Windows, CryptoAPI.)

like image 43
Nate Avatar answered Oct 12 '22 16:10

Nate