This book, sadly out of print, includes materials that can be a vital help to someone attempting to get the big picture of game programming. The book itself is a densely written overview of software engineering that can be hard to follow and difficult to understand at times, but don’t let that fool you. The accompanying CD includes one of the greatest giveaways I have ever seen: a completely original videogame called Ankh, comprising of over 30,000 lines of code, and broken up into 15 stripes to show you the state of the game in various stages of development. For anyone who wants to see what a fully completed game looks like in source code form, or anyone who wants to see it grow from a simple menu screen to a complete product, this CD offers untold hours of self-education that will serve you well.
First off, the bad news: the book itself is a real slog. The author, John P. Flynt, is credited on Amazon with writing about half a dozen books from 2002-2006, all of them rated from 1-3 stars overall. Virtually all the reviews have the same complaint: the author is such a dense writer, and the books so light on material, that they are almost impossible to get through. As much as I hate to say it, I completely agree. Even though I have owned this book since 2006, I have never made it more than 100 pages through the entire thing. I try to read a page or two, and somehow the poor writing and awkward sentences drag my attention away like a magnet. Within two pages I find myself unconsciously doing anything I can to stop reading and start paying attention elsewhere. It’s too difficult to read to truly be of any help.
This is truly unfortunate, because the topic of software engineering in video game development is lacking. There are hundreds of books about learning DirectX or OpenGL, and there are many more advanced books useful for people already familiar with the programming process. But there are few middle ground books, and having one like this would be great. You will probably find more use in reading the table of contents and looking for books that cover each of these topics than actually trying to get through it though.
The real genius of the book doesn’t show until you get to the CD. To help carry the concept of software engineering through, the author worked with a programmer to create a game called Ankh. The game itself isn’t all that great – it’s a tile based game where you fight your way into an ancient pyramid. It’s badly out of balance though, and I found it impossible to get through the second level before my health was too low to do anything. So again, the quality is lacking.
However, when you install the game, you will also install 15 development ‘stripes’, and this is where the real glory is. Each stripe is a version of the game at a different stage of development, meaning you can walk through the stripes one step at a time, looking at the changes as you go. The first stripe is nothing more than the initialization code and the main menu, but just that code consists of 19 separate C++ classes, including all the DirectX code and a simple state machine to determine where in the program you currently are. Just the first stripe can take someone who knows the basics of C++ many hours of studying to understand and really get. It doesn’t help that the book almost never directly references the stripes.
Once you get stripe 1, you can work your way through and watch as the project grows in front of your eyes. You can study ideas like encapsulation and see how the Game class creates the other classes and how they work on yet other classes. You’ll see how the graphics code is neatly tucked away and never actually touched by the main game loop. The process as a whole is truly remarkable to watch, and you are going to have a seriously large source of knowledge on hand to study.
There are a few technical issues running the code now. With Windows 7, Microsoft has changed the way it compiles code internally, making these projects difficult to compile and run on the platform. The easiest way to work with it is to use Visual Studio 2008 running in Windows XP, but even if you can’t seem to get the code to compile, it’s still worth its weight in gold to study. Also, be aware that the code itself is a bit messy. You can see where the programmer threw things together to get it to work without worrying too much about making everything pretty. This may make it harder for a beginner programmer to get a solid idea of where everything is going.
However, none of these issues change the fact that this is a FANTASTIC resource for any self-educated game programmer. If you understand C++ and you’re looking for a way to incorporate your knowledge into a larger project, this is the best way to go. If you have access to Visual Studio 2008 and Windows XP it’s even better, because you won’t have any problems compiling the code. In today’s online world more and more online resources are being created (including this site) so it doesn’t quite have the exclusivity that it had in 2006. But this book was one of my mentors when I started, and it’s something I would highly recommend to anyone (especially if there are still used copies on Amazon).