The following publications describe my work on game programming education. The first one was published in 1995, but the big breakthrough was my SIGCSE paper in 2005. In the decade in between I found it impossible to get game programming papers accepted anywhere, and so I wrote a series of books instead.
The physicist Richard Feynman once said "Study hard what interests you the most in the most undisciplined, irreverent and original manner possible." Introduction to Game Physics With Box2D is a book that is very much in the spirit of his advice: an undisciplined, irreverent, and original book on how to program the physics used in 2D video games. After a little math background and fiddling around with hand-written code for simple rigid body and soft body dynamics, it shows how to make your 2D physics programming problems more manageable by using the Box2D physics engine. I expect you, the reader, to be able to stomach a little math and to be a competent C++ programmer, both approximately at the level that a casual observer might reasonably expect of a non-knuckle-scuffing sophomore or junior in a computer science program at a middling-to-competent state university.
Introduction to Game Physics With Box2D contains five different kinds of material: coding with Box2D (47%), coding without Box2D (24%), mathematics (16%), algorithms (5%), and miscellaneous stuff (8%). The supplementary material below includes executables and source code for two minigames and two toys, YouTube videos, and PowerPoint lecture notes. The source code is written in C++ for Windows using Visual Studio 10 and DirectX 9.
This is not just a book for video game programmers. We do assume that a majority of our readers are learning for the purpose of programming video games, but we expect a wider audience and we have designed the book with a diverse audience in mind. If you're a programmer or interested in learning how to make video games, welcome aboard! If you meet neither of these criteria, there's still plenty for you here. We have made every effort to make the book useful to designers and technical artists. Although there are several code snippets in the book, they are (hopefully) easy to read even for nonprogrammers. Most important, even though it is always necessary to understand the surrounding concepts to make sense of the code, the reverse is never true. We use code samples to illustrate how ideas can be implemented on a computer, not to explain the ideas themselves.
The title of this book says it is for "game development," but a great deal of the material that we cover is applicable outside of video games. Practically anyone who wants to simulate, render, or understand a three-dimensional world will find this book useful. While we do try to provide motivating examples from the world of video game development, since that is our area of expertise and also our primary target audience, you won't be left out if the last game you completed was Space Quest. (Well, you may be left out of a few jokes, like that one. Sorry.) If your interests lie in more "grown up" things than video games, rest assured that this book is not filled with specific examples from video games about head-shots or severed limbs or how to get the blood spurt to look just right.
Game programming classes have been offered at the University of North Texas continuously since 1993. The classes are project based, and feature collaborative coursework with art majors in UNT's College of Visual Arts and Design. We discuss the design that enables them to provide training for students intending employment in the game industry without sacrificing academic educational depth or the educational needs of mainstream computer science students.
When I started teaching and research in game development in 1993 I could see enormous potential, but I wasn't really surprised that my colleagues at the University of North Texas didn't see things the same way. To be honest, I knew that I was a few years ahead of the cresting wave. I didn't realize that I was over a decade ahead. Whereas back then there were no conferences or journals devoted to game development and the traditional ones rejected game development papers with scorn and derision, now I am delighted to see a multitude of game dev conferences and this, the first academic journal.
SAGE is a simple academic game engine for use in a game programming class in the undergraduate Computer Science curriculum, designed specifically as a core onto which students can add their own game engine features. SAGE consists of a sequence of demos written in C++ using Microsoft DirectX, each extending its predecessor in a process called incremental development. Incremental development is a proven pedagogical technique used for the education of game programmers at the University of North Texas since 1997.
During the past two years there has been a resurgence of interest in how to use digital games (e.g. video games, computer games and simulations) to support instruction in a variety of fields [3,9]. The focus is on how to exploit the rich interactivity of 3-D, multiplayer virtual worlds. Computer science education has, for the most part, taken a different approach: rather than having our students play video games to learn concepts we ask them to build games to learn concepts [2,5,6,7,8]. In the process of building games, students become immersed in gaming. Yet neither the IEEE/ACM CC2001  curricular recommendations, nor the ABET/CAC  criteria mention the notion of gaming. This panel addresses the still controversial question of whether gaming is a legitimate component of computing, and if so, where does it fit within the curriculum.
Regardless of where or how gaming falls within the curriculum, it is touted as an approach that will be attractive to a diverse audience, thus increasing potential enrollment into more traditional computer science courses. However, implementing a fully robust, modern, visually compelling, multi-player game from scratch as a semester-long project is problematic. The members of this panel will share a range of experiences in how to exploit a game format to meet particular pedagogic goals.
The holy grail of modern commercial game design remains the "First Person Shooter," (FPS) a game in which a character views a 3-D world from a first person, rather than map or text textbased perspective, and with weapon (gun) in hand, moves through an interactive story to attain some goal. Typically there is a lot of shooting and consequent blood and guts. The genre, despite its violent roots, supports some of the most sophisticated techniques of computer graphics, animation and visualization. FPS open source game engines also provide compelling vehicles through which to teach good software design including design approaches for agent-based artificial intelligence and peer-to-peer networks.
There appear to be four approaches to incorporating digital gaming into CS curriculum: (1) to support foundations courses, e.g. CS 1, (2) to provide specialized content at the upper level to prepare students for the gaming and animation industry, (3) to provide a curriculum encompassing thematic approach to CS in order to make CS and game development accessible to a more diverse population, (4) to provide trans-disciplinary experiences for CS students where they learn to interact with experts from other disciplines.
A unique aspect of this panel is that all of us have had experience of some sort with all of these approaches. Consequently, the names attached to the sections below reflect a somewhat arbitrary assignment by the moderator. Like any good game, each of us will assume a role and run with it, supporting our assigned character. The format of the session will consists of a brief overview, a short presentation of each approach, a set of challenges to the audience, and hopefully, a lively interactive discussion of the place of gaming in the curriculum.
The University of North Texas has for many years offered classes in game programming to Computer Science students and classes in game art and design to art students. A key feature of these classes is the opportunity for these diverse communities of students to collaborate on joint projects. We describe the features that make these classes unique.
Max and I riffed on some of the things that made our collaboration work. Interdisciplinary work between art and programming is extremely difficult to get right. It's the left brain versus right brain thing. I don't believe that anybody can be professional-grade at both art and programming. Professional grade in one and a skilled amateur in the other, yes. But that's not the same thing. Many game programs haven't figured out how to work this collaboration thing to the benefit of both the programmer and the artists.
Game programming classes have been offered at the University of North Texas continuously since 1993. The classes are project based, and feature collaborative coursework with art majors in UNT's School of Visual Arts. We discuss the design that enables them to simultaneously provide both training for students intending employment in the game industry, and a capstone experience for general computer science undergraduates.
This is the first time I seriously tried to describe my game programming classes to the CS education people in a way that they can understand. I cast it as a paper about games as capstones in order to increase my chances of getting in. Max Kazemzadeh was the art professor who handled that side of the collaboration.
If you want to learn about 3D math in order to program games or graphics, then this book is for you. There are many books out there that promise to teach you how to make a game or put cool pictures up on the screen, so why should you read this particular book? This book offers several unique advantages over other books about games or graphics programming:
There is nothing wrong with either of these approaches. I have both kinds of books on my bookshelf. The approach that I take in this book, however, is different. It is the product of seven years of teaching game programming to students of computer science at the University of North Texas. Typically, those students are smart enough to read the documentation that comes with the DirectX SDK, and smart enough to experiment with the code samples. The problem is, all that information is fragmentary and overwhelming in its complexity. There's just so much information that it's hard to know where to begin. 2b1af7f3a8