A book for learning design patterns while programming a video game.
Design Patterns are powerful tools for the creation of robust and scalable software. Presented one by one, patterns are easy to understand, even for a beginner. However, using and combining them in a complex application is much more difficult.
In this book, we focus on the creation of video games: a complete example game and our own game. During the presentation of these developments, we see concepts from the most simple to the most complex. We start with the basics of data representation and elements of graphic user interfaces. In this scope, we make use of popular patterns. Then, we see more advanced patterns for the design of the video game engine. At this step, we create combinations of existing patterns and techniques to solve all problems. To succeed, the software architect has to develop skills in design that lead to new patterns dedicated to its current project. This work continues with even more advanced cases with the implementation of artificial intelligence and network gaming.
Only basic knowledge of object programming is required to start reading this book. A complete game example, divided into many sub-steps, is provided with this book. Beginners can use parts of the game example to create their game, and more experimented programmers can work from scratch.
Who this book is for
This book is for beginners and experienced programmers who wish to improve their skills in software design. The main approach of this book is practical: the reader quickly tries what he reads, and theory comes when it has to.
Students are the first targeted readers: they are generally not yet aware of the main issues in software design. Their usual first approach is to open their favorite IDE and start typing the code, and then face unsolvable problems when the project becomes too large. It is not easy to convince most students that software design is not tedious and is very exciting once you know it. Thanks to the practical approach of this book, and the creation of their own video game, students take this training with ease and pleasure.
Experienced programmers find very interesting content, also because of the practical approach, different from most books on the same topic. This approach differs from a long list of uncorrelated patterns and techniques, usually illustrated by small independent examples. Abstract presentation and small examples are relevant – we propose many of them in this book. However, they do not illustrate the main motivation behind advanced software design techniques: handle large projects and complex combinations of features.
Experienced programmers are pleased to rediscover patterns and learn new ways to use and combine them. Note that these points also hold for beginners who can learn more techniques during a second reading of the book.
This book also targets game programmers: even if software design is the first topic, this is a game programming book as well. A lot of common problems in game programming are considered, with offered solutions based on design patterns. The book also proposes an overall approach that allows the designing of robust, stable, easy to maintain games.
Most books and tutorials on the Internet focuses on graphics and user interaction, and usually ignore all design aspects. In the best case, the Game Loop pattern is used, but only using this one, we are far, so far from truly robust solutions! Simple presentations are relevant to introduce concepts (as it is done in this book). However, they are not enough to feel the true problems and the motivation of solutions based on software design. In this book, advanced solutions are proposed and offer many design ideas to game programmers. Finally, this book also considers advanced features in games, like artificial intelligence and networking, with robust and scalable solutions.