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.
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
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.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With