Bummer! You have been redirected as the page you requested could not be found.
Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
You have completed C# Objects!
You have completed C# Objects!
Preview
Static members are shared by all instances of the class.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
Since we know how many
invaders there are and
0:00
how much health each of them has, the
outcome of the game is fairly predictable.
0:02
There's lots of things we can do
to make the game more interesting.
0:08
For instance, we could break
the game up into multiple rounds or
0:12
limit how many towers
the player can place.
0:16
Or require the player to pay for
0:18
towers using resources that they
acquire while playing the game.
0:20
These are all common elements
in tower defense games.
0:24
One thing that nearly all games have,
0:28
including tower defense games,
is uncertainty.
0:30
Uncertainty means that even if you were
to play the game the exact same way
0:33
every time,
you might get different outcomes.
0:38
One way we can add uncertainty
to treehouse defense
0:41
is by making it possible for
the towers to miss their target.
0:44
Right now, if a tower shoots an invader,
it's always successful.
0:48
This makes the outcome of
the game rather predictable.
0:53
We can make it possible for
the towers to occasionally miss.
0:56
The easiest way to create uncertainty
is to use a random number generator.
1:01
A simple random number generator
produces a randomly created number
1:06
every time it's asked for one.
1:10
The .NET framework contains
a class named random
1:13
that provides a random number generator.
1:16
Let's use the random class to
make our game less predictable.
1:19
To get an idea of how the random class
provided by the .NET framework works,
1:23
let's open the C# repo.
1:28
First, we need to construct
an object of type random.
1:30
Random is in the system namespace,
so we'll type System.Random,
1:33
give it a name equals new,
1:38
System.Random.
1:42
Now that we have a random number generator
object, we can ask it for random numbers.
1:46
We can do this by calling the next method.
1:51
This gives a new random integer.
1:55
Another handy method is NextDouble.
1:58
NextDouble returns a random decimal
number that's between zero and one.
2:00
Notice that every time these methods are
called, they return a different number.
2:07
The random number generator
provided by the .NET framework
2:13
is actually a pseudo
random number generator.
2:16
If you'd like to know more
about what that means,
2:19
then check out the teacher's notes for a
link to the random classes documentation.
2:21
For what we want,
the random class is more than sufficient.
2:26
Using random,
we're going to make it possible for
2:31
a tower to occasionally miss its target.
2:33
Each tower object will need to have access
to an instance of the random class.
2:36
We could instantiate the random class for
each tower object.
2:41
This is unnecessary though.
2:45
The towers actually just need
to share a single random object.
2:47
They'll all call the random's next method,
and each time they'll get a random number.
2:52
There's a way to allow all objects of
a class to share the same objects.
2:57
We can make the random object
a static field of the tower class.
3:03
We've used static members before.
3:08
We used the static square root and
power methods from the math class.
3:10
We also used the static WriteLine
method in the tower class.
3:15
Remember, to use a static method, we don't
have to have an instance of the class.
3:18
We call them on the class itself.
3:23
We can also have static fields and
properties.
3:27
Let's add a static field to the tower
class for the random number generator and
3:30
see what that looks like.
3:35
Static members of a class can
have any accessibility level.
3:37
Math.squareroot is a public method so
that any other class can use it.
3:40
Only the tower class needs access to this,
so we'll make it private.
3:45
Next, and
this is what makes the field static.
3:50
We'll type the static keyword.
3:52
We'll also need to make this field
read only since we don't want
3:55
this field to ever be overridden.
3:58
Now, we'll declare this field
just like any other field and
4:00
initialize it at the same time.
4:03
Because we made this field static,
4:10
there can only be one of these no
matter how many towers are created.
4:12
In contrast, location is not static and
4:17
every tower object has its
own location on the map.
4:20
Which can be different for
every tower object.
4:24
So, random is initialized once and
only once.
4:27
And it's shared by all
the other tower objects.
4:30
In the next video,
4:33
we'll see how to use random to
add some uncertainty to our game.
4:34
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up