xx Preface
Despite the changes, something still remains the same: the algorithms and networking
making it all possible. Game programming is not an isolated eld of study but intersects
many essential research areas of ‘traditional’ computer science. Solving an algorithmic
or networking problem is always more than just getting it done as quickly as possible; it
is about analysing what is behind the problem and what possibilities there are to solve it.
This is the the motivation for this book, and our intention – right from the beginning –
has been to provide the reader with a glance into the world of computer games as seen
from the perspective of a computer scientist.
We assume that the reader is familiar with the fundamentals of algorithms and data
structures (e.g. complexity analysis and graph theory). In a case of uncertainty, the reader
can consult basic textbooks such as Introduction to Algorithms (Cormen et al. 2001) and,
of course, the ever inspirational The Art of Computer Programming (Knuth 1998a,b,c,
2011). We describe classical game algorithms and review problems encountered in com-
mercial computer games. Thus, in selecting material for this book we have walked a
tight-rope between these two worlds. The current selection may seem a bit of a ragbag,
but the common factor in the choice of the topics has been a combination of algorithmic
and practical interest.
Going through the original L
A
T
E
X les of the rst edition, we were pleasantly surprised
how fresh many of the ideas have remained. Hardly anything was outdated; rather the
problems the developers are facing today are still the same. It also inspired us to continue
and expand the work with a similar mindset. We have tried again to pick relevant topics
from both academic literature and trade journals, forum posts and blogs to squeeze out
their essence. We have still refrained from tying our hands with a particular platform (of
which there have been many throughout the past decade) and programming language
(of which there have been equally many). We are aware that that has been a common
critique over the years, but we have strived to unlock the timeless beauty that many of the
ideas conceal. Granted, there are many things that escape our grasp or which we could
only briey introduce, which is why we provide references to the works of the wiser and
better informed. Also, the exercises at the end of each chapter hide many gold nuggets
and possibilities for expanding one’s thoughts and even venturing into uncharted waters.
Revising and expanding this book has been a fun process, and a hard process – a task
one gladly undertakes once a decade.
Acknowledgements
First of all, we acknowledge our dear friend Dr Timo Kaukoranta’s role in gathering
and analysing the topics which formed the basis for the rst edition of this book. His
untimely death was a wake-up call to realize in written form the ideas we had been toss-
ing around for several years. Timo’s spirit is still present throughout this book.
Many people have guided us on our journey to view the world as computer scientists.
Professor Olli Nevalainen’s pivotal role in steering us to the world of algorithms as well as
the support from the late Professor Timo Raita have been both inspiring and invaluable
to us.
We would like to thank our colleagues and co-authors over the years – of whom
we would like to mention here (alphabetically) Andy Best, Sami Hyrynsalmi, Antero