A game engine for Windows games is that it allows you to hide the messy
details of Windows-specific code that doesn't necessarily have anything
to do with a game.
In case you're wondering, there's nothing magical or mysterious about a
game engine. A game engine represents an organization of the code for a
game so that general application tasks are separated from game-specific
tasks. The benefit to the game developer is that you can add features
to a game engine that you will be able to reuse in all of your future
games. Additionally, using a game engine allows you to simplify the
code for your games and focus your attention on the game code that
matters most. Once you get accustomed to using a game engine, you'll
wonder how games could be created any other way. In reality, most
commercial game developers do have their own custom game engines that
they've developed over years of learning what common features most
games require. Your own game engine will likely improve and expand upon
the game engine in this book as you design and develop more demanding
games.
It is the responsibility of a game engine to handle the chores of
setting up a game, making sure that it runs properly, and then shutting
it down. Although it is true that these tasks are required of any
program, certain aspects of initializing, running, and cleaning up
after games are truly unique to games. Therefore, it is important for a
game engine to address the unique needs of games and help make the
process of building games around the engine as simple and
straightforward as possible. With a well-designed game engine, you'll
find that creating a game requires a lot less code than if you had not
relied on a game engine. The idea is to develop certain core game
routines once, stick them in the game engine, and then never bother
with them again unless absolutely necessary. For example, once you've
written code to load an image and draw it on the screen, there is never
a reason to rewrite the code again. Loading and drawing images is a
basic feature required of all game engines.
Breaking a Game Down into Events
Every Windows program can be broken down into events, which are things
that take place while a program is running, such as mouse clicks and
window resizes. Just as Windows programs have events that they must
handle, games have their own unique set of events that must be taken
into consideration during development. The initialization process of a
game can be considered an event, and its responsibilities are to load
graphics and sounds for the game, clear the playing field, zero out the
score, and so on. Similarly, user input carries over to games as well,
meaning that mouse clicks and key presses are events that games
certainly must concern themselves with. Additionally, keep in mind
that, in Windows, it's possible for some games to be minimized or
otherwise placed into the background, which means that you'll probably
want to pause the game. This activation and reactivation process can be
represented by a couple of events.
Although many other events could certainly factor into a game engine,
the following are some of the core events applicable to just about any
game:
*
Initialization
*
Start
*
End
*
Activation
*
Deactivation
*
Paint
*
Cycle
The initialization event occurs when a game is first launched and gives
a game a chance to perform critical initial setup tasks, including
creating the game engine itself. The start and end events correspond to
the start and end of a game, and they provide good places to perform
initialization and cleanup tasks associated with a specific game
session. The activation and deactivation events come into play when a
game is minimized or sent to the background and then later restored.
The paint event is sent when a game needs to draw itself and is similar
to the Windows WM_PAINT message. Finally, the cycle event enables a
game to perform a single game cycle, which is very important, as you
learn next.
Establishing the Timing for Games
If you've never taken a look at a game from a programming perspective,
it might surprise you to learn how all the movement and the animation
in a game are orchestrated. You will learn all the details of animated
graphics in Chapter 9, "Making Things Move with Sprite Animation," but
for now, I want to touch on the importance of game timing as it applies
to animation and other facets of games. Every game, except extremely
simple card games, relies on some sort of timing mechanism to enable
the game to break down its execution into frames or cycles. A cycle of
a game is one slice of time, which usually corresponds to a snapshot of
the game's graphics and data. If you think of a game as a movie playing
on a VCR or DVD player, pressing Pause allows you to view a single
cycle. Stepping forward one frame in the video is like moving to the
next cycle of the game. In any given cycle, a game takes care of
updating its graphics, as well as performing any other calculations and
processing related to how characters and objects are moving and
interacting with each other.
A good way to get a grasp on the importance of game cycles is to take a
practical game as an example. The classic Space Invaders game was
mentioned in the opener of this chapter, so let's use it as an example
to demonstrate game cycles. When Space Invaders first starts, the ship
is created, along with several rows of alien invaders. Each of these
objects has an initial position and velocity. If Space Invaders had no
timing or game cycles, the game would be forever frozen in its initial
state, as if you had pressed a permanent Pause button when the game
started. We know that this isn't the case, however, because the game
starts out with the aliens slowly moving across the screen. If you were
to view Space Invaders a cycle at a time, you would notice that, in
each cycle, the aliens are only moved slightly. This is because there
happen to be quite a few cycles taking place in a given period of time,
which gives the effect of smooth motion.
The more cycles a game can run through in a given amount of time, the
smoother the game appears to run. As an extreme example, compare the
"smoothness" of a slideshow to a motion picture. The slideshow abruptly
moves from one still image to another with no transition or sense of
smooth movement, whereas a motion picture shows fluid motion as if you
were experiencing it in real-time. Similarly, a game with only a few
cycles per second will appear choppy, whereas a higher number of cycles
per second will result in a much smoother game. A larger number of
cycles per second also gives you more flexibility in speeding up or
slowing down a game to arrive at a perfect speed.
Knowing that more cycles result in smoother graphics and better
flexibility, you might think that you could crank up the cycles per
second really high. As with most things in life, there is a trade-off
when it comes to game cycles and game efficiency. The problem lies in
the fact that the amount of processing taking place in a game in each
cycle is often considerable, which means that to perform numerous
cycles per second, your computer's processor and graphics card have to
be able to keep up. Even with the blazingly fast computers prevalent
these days, there are practical limitations as to how fast most
computers can perform game processing. In reality, most games will fall
in the range of 15 to 20 cycles per second, with a maximum speed
surpassing that of a motion picture at 30 cycles per second. Except for
some rare situations, the minimum speed you should shoot for is 12
cycles per second.
Now that you understand how the timing of a game is expressed in terms
of cycles, you can probably see why a cycle is a type of game event. It
works like this: When a game first starts, you initialize the game
engine with the game speed in cycles per second. Let's say that you go
with 12 cycles per second. The game engine is then responsible for
setting up and managing a timer that fires a cycle event 12 times each
second. The game code receives these cycle messages and handles them by
updating the objects in the game and redrawing the game screen. You can
think of a cycle event as a snooze alarm that keeps going off over and
over; except in this case, it's going off 12 times a second. Your game
clearly isn't getting much sleep!


You need to be a member of KOLKATA network ... to add comments!
Join KOLKATA network ...