0% found this document useful (0 votes)
59 views

Random Gen

The document discusses using random numbers and pseudorandom number generation techniques for various purposes in game development, including: 1) Making random decisions in games to introduce surprises and reduce predictability. 2) Generating maximum length binary sequences (m-sequences) using shift registers and XOR logic gates to efficiently produce pseudorandom numbers. 3) Using random numbers to randomly select moves for an AI opponent like a boxer, with adjustments to probabilities to make the choices more realistic. 4) Procedurally generating star fields and terrain by seeding a random number generator to determine property values like star presence or height at grid points.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
59 views

Random Gen

The document discusses using random numbers and pseudorandom number generation techniques for various purposes in game development, including: 1) Making random decisions in games to introduce surprises and reduce predictability. 2) Generating maximum length binary sequences (m-sequences) using shift registers and XOR logic gates to efficiently produce pseudorandom numbers. 3) Using random numbers to randomly select moves for an AI opponent like a boxer, with adjustments to probabilities to make the choices more realistic. 4) Procedurally generating star fields and terrain by seeding a random number generator to determine property values like star presence or height at grid points.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 31

Random numbers

Why random numbers?


• A random number is one of the easiest
way to make a decision in a game
• The player may see it as random, or try to
guess the reasoning behind your choice!
• Sometimes, games mix logical AI with
some randomness to introduce surprises
and reduce predictability
• Later we can see how randomness may
be shaped
The m-sequence
• The maximum length binary sequence
may be generated in hardware or in
machine code
• It is made from shift-registers and
exclusive-or function(s)
• On a clock event, a shift register will
transfer its input to its output and hold it
there until the next clock pulse
The m-sequence
• An exclusive-or function will output a
binary one if its inputs are different.
• If presented with two ones or two zeroes,
the output will be zero (this is called
modulo-two addition)
• Now let’s see a circuit:
The m-sequence
(copy this down)

a3 a2 a1 a0

b3 b2 b1 b0
(8) (4) (2) (1)
The m-sequence
• We start off by “seeding” the circuit with all
ones on the outputs of the single-bit
memories.
• The input of the exclusive-or gate has two
ones on it, so the output is zero.
• The output of the circuit is 1+2+4+8 = 15
• On the next clock pulse, inputs become
outputs. Output b3 becomes zero. Circuit
output becomes 1+2+4+0 = 7
The m-sequence
• Easy exercise:
• Please work out the 15 numbers in the
sequence, until it starts to repeat.
• Then work out what would happen if we
stupidly seed it with all zeroes and start it
off.
• (5 mins)
The m-sequence
• Now you know what we’re talking about,
let’s talk about it....
• It goes through every possible number
except 0.
• The sequence is (2n -1) long. Here we
have 4 shift-registers, 24-1 = 15. So with
only 16 shift registers we can have a
sequence of 216-1 = 65535. It’s extremely
efficient
The m-sequence
• Balance property: All numbers (except
zero) occur only once.
• The probability of any number (except
zero) is the same.
• Statistically it is smoother than a really
random function.
• This is the mechanism used in most
random number generation in calculators
and languages
The m-sequence
• The sequence is fixed – these are not
random numbers, they are pseudorandom
numbers.
• The generator is sometimes run until
interrupted by an external event (e.g. me
pressing a key), making the next number
unpredictable.
• If we always seed using the same number,
the sequence will always be the same (e.g.
for debugging)
• Many languages seed using the system clock
Random numbers in high level
languages
• “C” has:
• rand() – Produces a random integer
• srand() – Sets up a seed for rand()

• The ANSI C standard only states that rand()


is a random number generator which
generates integers in the range
[0,RAND_MAX] inclusive, with RAND_MAX
being a value defined in stdlib.h, and
RAND_MAX being at least 32767 (= 215 – 1).
Random numbers in high level
languages
• Dice – a bad algorithm:
seed = time(NULL);
srand(seed);
i = (rand() % 6) + 1;

// % 6 means modulo 6,
// ie the remainder when the
// number is divided by 6.
// This is not the best way
Random numbers in high level
languages
• Dice – a better algorithm:
seed = time(NULL);
srand(seed);
x := ((rand()/(RAND_MAX+1));
y := (x * 6) + 1;
i = int(y);

// x is a float between 0 and 0.999


// y is a float between 1 and 5.999
// i is the dice output
// I could have done this in one line
Random numbers in high level
languages
• Many languages have a floating point random()
function, which returns a value between 0 and 1.

• In C we can produce one by:

  r = ((double)rand() / ((double)


(RAND_MAX)+(double)(1)));

• Let us assume that we have such a function.


Exercise - Probability Densities
• I throw a coin three times. What is the
chance of:
• Three heads?
• Two heads and a tail?
Probability Densities

Coins
Probability

3 2+1 1+2 3

M-Sequence

Number/Enumeration
Decisions using random numbers
• The Boxer:
• The boxer can use a Jab (j), an Uppercut
(u), a Cross (c) or a Hook (h)
• In this first example, we want all to be
equally likely:
The Boxer
x := int(4*Random());
SELECT CASE (x)
CASE (0)
move := “j”
CASE (1)
move := “u”
CASE (2)
move := “c”
CASE default
move := “h”
END SELECT
The Boxer
• In real life a boxer would use a jab far
more often than any other move
• So we assign our probability space
accordingly. for r being a random number
in the range 0-1.0:
– 0... 0.4 means Jab
– 0.4... 0.6 means uppercut
– 0.6... 0.8 means cross
– 0.8... 1.0 means hook
The Boxer
• What have we just done?
• We’ve used a random number generator
to “decide” on an AI opponent’s next
move.
• We’ve adjusted the probabilities so that
the choice of move is more realistic.
Star Field Generation
• In Elite, there was a 2-D star-field
• The field was based on an N x N grid
• Whether there was a star in a cell or not
was decided by a seeded random number
generator

Star := 0;
IF (random() < 0.1 THEN Star := 1;
Star Field Generation
• Why was the random number seeded?
• Well, the BBC Microcomputer only had
32k of memory.
• Since the generator was seeded, it
produced the same result every time it ran
• So we didn’t need to store the star map in
memory – we just ran the procedure.
• A similar seeded procedure decided on
the planets around the stars
Terrain
• We need to generate terrain for a
landscape in which our hero is to fight
• We don’t especially want to specify and
remember the whole world – it’s easier if
we can generate it on the fly, like our star
map
• There are a number of ways of doing this
Terrain
• A crude way:

FOR each square in the grid


Height = max_height * random()

• Unfortunately, this produces a totally


unrealistic landscape – the world wasn’t
made that way!
Terrain
• The random grid could be cleaned up by
constraining the maximum height
difference between neighbouring cells
• Since the top and left cells are filled in first,
this results in ridges running diagonally top
left – to – bottom right
• Nevertheless, it sort-of works
Terrain
• In the PARTICLE DEPOSITION method, grains are
dropped onto random points on the grid
• The coordinates of the drop point are decided by running
the random number generator twice.
• There is a preset maximum height difference between
cells
• If the landing of a grain causes the height difference to a
neighbouring cell to exceed the maximum, the higher
grain “rolls” into the lower cell.
• Having rolled, the algorithm assesses whether it still
needs to roll one more cell, and does this if necessary
Terrain
• A simple algorithm is to use the star-field
algorithm to allocate the positions of hills.
• The hills have a standard height, width
and shape
• The shape is usually a raised cosine
function
• The height at any point is the sum of the
heights contributed by any overlapping
hill(s)
Terrain

Overlapping hills
Background Sound
• Background game music (extra-diegetic
music) is usually looped because we don’t
know how long the scene will last.
• However, soundscapes cannot be looped
for long. After a while you can predict the
arrival of the cockerel’s crow (again!)
• (Your best bet with a looped soundscape
is to make it complicated and long)
Background Sound
• A better solution is the GRANULAR
SOUND SYNTHESIS technique, where
sound effects are added at random with a
certain probability.
• Sound effects may be randomly altered
also: pitch and playback speed may be
altered to hide the fact that they have the
same source.
Chip Music Percussion
• When there is a game sound chip
(Gameboy), percussion is often generated
using filtered white noise.
• Digital white noise is a random sequence
of numbers.
• This is usually generated on-chip using an
M-sequence generator programmed into
the hardware.

You might also like