Phew, that was a long chapter and a long book overall. Just remember this is my first try at writing a book. I hope you liked it and learned a little bit from the example games I made. I’m pretty happy with the many example games in the book; I think the more practical approach to writing games will help out beginners more and give more advanced readers a way to quickly skip existing parts and take a look at the more complex things in the game programming world.
The topics in the book cover almost everything you need for learning XNA and game programming in general, but I have hidden each topic under the current game project of the chapter. For example, the physics chapter would still be helpful with some general physics calculations, but linking it to the racing game makes it so much easier to think about the problems that can happen in your game if you add physics. Even if you want to develop a completely different game that uses other physics calculations you will probably benefit from the approach in general because you write some unit tests first, you test out the available physics engines, and you will probably have some early idea about solving your physics problem after reading the chapter because you see some similarities with problems described there.
I congratulate you for reading through this book, but you should not stop now. Hopefully you are eager to start your own graphics engine projects or use one of the games in this book as a foundation for your next game project.
Here is a short list of the games you encountered in this book and which game programming topics were discussed while developing these games:
After Chapter 1, which was only an introduction to the XNA Framework and the first simple game project, you created a Pong game in Chapter 2. Here you learned all the basics for using unit testing properly, planning the whole project, and writing a good game concept. On the technical side you learned how to use sprites, handling the input, playing sounds, and doing some basic 2D collision testing. The game is playable with multiple players on the same screen and that is as far as you get with multiplayer games in this book.
In Chapter 3, several very important helper classes were discussed, but just having some helper classes alone is not really a fun game project so a new game was created: Breakout, which uses some of the game logic of Pong, but allows you to play against yourself instead of another player or the stupid AI of Pong.
Chapter 4 goes through the usefulness of game components and shows how to program one of my all-time favorite classic games: Tetris. Some of the game component classes developed here and in Chapters 5 and 6 survive until the end of this book, but the general idea to do everything with game components was never adopted by any game in this book. It just wouldn’t make any sense.
Part II (Chapters 5–8) focused on developing a basic graphics engine for all the upcoming game projects. Chapter 5 explains how to render models, use unit testing for 3D code, render textures, fonts, and lines on the screen and finally even do some testing on the Xbox 360. Chapters 6 to 8 focus on shaders, a really big and complex topic, but in every chapter you dive a little deeper into the world of shaders. Chapter 8 finally ends with the great Rocket Commander game, which is now ported to the XNA Framework thanks to the graphics engine that was developed in these chapters.
Part III of the book (Chapters 9–11) is all about improving the game engine. You finally learned how to use XACT properly, how to handle all the game screen classes and the game engine in general, and of course all about the UI and the player input class. To make things a little bit more interesting the XNA Shooter game was introduced here, which really looks great and is quite a lot of fun to play. Some of the more advanced topics like shadow mapping are also introduced for the first time, but all the hard stuff is left for Part IV.
Finally, Part IV (Chapters 12–14) focuses on the Racing Game, the complex landscape and track generation code and the physics engine used in the game. You also learned a lot about the game screens and game logic in the game and how to test and tweak a relatively big game project like this one. At the end the cool Speedy Racer mod was written to show how to create your own mod based on the existing game engine.
This chapter also discussed a lot about the final stages in the game development process, which is sadly not reached by many people because most game projects are canceled before they reach even the alpha stage. Many beginners also stop developing their game because they run into some big problem or they are no longer motivated to keep going, especially if the game project is big. Hopefully the games of this book can help such people out and give them a handbook on how to really write games from start to finish, or at least reuse some existing game engine instead of reinventing the wheel and stopping too early.
That’s about it for this book. Maybe there will be future endeavors and I also constantly update my blog, so if you want to read more material from me, check it out. I’m also always happy to receive any emails about new game programmers getting started, seeing cool new game projects based on my engines, or getting to know of more mods for one of the games described in this book.