Introduction


In developing Software Engineering and Computer Games and its accompanying software framework I had four broad goals.

  • To teach a lively style of object-oriented software engineering.

  • To show how to bring a complete program to the level of a commercial release.

  • To provide a 'game engine' framework of linked classes for game development.

  • To create programs that are interactive, rapidly executing, and visually beautiful.

Software Engineering and Computer Games was originally developed for use as the primary textbook in my undergraduate software engineering and graduate software projects courses in the Department of Computer Science at San Jos State University (SJSU for short). In these classes we cover the topics of software engineering in the context of having student teams design and implement computer games. Depending on the nature of the course, lesser or greater emphasis can be placed on the student projects.

The book is also meant to be suitable for self-study. Readers are encouraged to use the book to create their own games. Software Engineering and Computer Games is specifically designed so as to allow would-be game developers to get their own games running easily and rapidly.

In order to make it feasible for readers of this book to carry out a game project without getting lost in endless details, I've created an open source C++ software framework for developing computer games; this is the 'Pop Framework,' with source code available for free download from the book's website:

www.rudyrucker.com/computergames

As well as working as a software engineering text or as a self-study guide for budding game-developers, Software Engineering and Computer Games can also serve as the text for a course on computer games such as the Computer Game Design and Programming one we have at SJSU. The idea of having university Computer Science departments teach computer game programming is a fairly new idea. Software Engineering and Computer Games should serve to show that a course of this nature can be taught in a sound and academically respectable fashion.

Software Engineering and Computer Games uses the Windows platform. Why Windows? Although the death of Windows is regularly predicted , it remains the most popular operating system on personal computers. Windows is a strong, mature platform for writing graphics-intensive and/or computation- intensive programs to run on a desktop machine. By using Windows we get, essentially for free, a lot of goodies that can otherwise be hard to implement: things like menus , toolbars , cursor tools, resizable windows, multiple document interface, cutting and pasting and file handling. Certainly the Java environment can implement these features, but the process is somewhat easier with the Microsoft Visual Studio development environment. And in terms of job-hunting, it's very nice to have a solid Windows computer game project of one's own to demo.

As at most other universities, SJSU has no formal Windows programming prerequisite for the software engineering or software projects courses; in fact we've recently switched our introductory courses to Java. But it's valuable to study Windows programs in some upper-division courses so that the students can gain experience with full-featured real-world desktop projects. Software Engineering and Computer Games is designed so as to be self-contained, with no prior knowledge of Windows programming required. A familiarity with C++ is recommended, but we have a C++ review chapter for those starting with only a knowledge of Java.

The book has two parts . Part I: Software Engineering and Computer Games is the essential lecture material to be covered in the course, and Part II: Software Engineering and Computer Games Reference contains detailed reference information about topics essential to fully understanding Part I.

My procedure in using this book as a textbook is to lecture during the first half of the course and during the second half of the course to help the students spend the classroom time working on projects in three-person teams. We try and cover most of the Part I material during the lectures, and the students read from the Part II material on their own as needed. If using the book for self-study, you might expect to read through most of Part I and to occasionally refer to Part II. If your immediate goal is simply to get going on making working games, you can skip right to Chapter 3, do the exercises at the end to get a first game working, and then study Chapters 7 “17 to see how to make more complicated games.

The necessity of breaking the book into two parts arises from the dilemma of wanting to teach Windows-based software engineering to people who might not know Windows programming. Part II covers topics such as the advanced features of C++, Windows programming, the Microsoft Foundation Classes (MFC), and the use of Microsoft Visual Studio “ which is indeed the standard tool used by many computer game designers.

The book touches on nine topics.

  • Basic software engineering principles and techniques.

  • How to organize and complete a substantial software project.

  • Practical examples of object-oriented design and programming.

  • The design of computer games.

  • Simulating physics inside our computer-generated worlds .

  • Artificial life , or how to simulate live creatures inside a computer program.

  • Using two- and three-dimensional Computer graphics to create a virtual reality.

  • Windows programming using the MFC application framework.

  • How to develop a project using Microsoft Visual Studio.

The code accompanying the book is called the Pop Framework. The Pop Framework consists of C++ implementations of a few dozen classes that are useful for constructing two- and three-dimensional computer games. Software Engineering and Computer Games starts with the basics of software engineering, and then presents the user with the Pop program, built with the Pop framework to have a number of different game modes. The game modes include an Asteroids-style Spacewar, a Picknpop game of picking and popping bubbles , an Airhockey game, a three-dimensional shooting game, a free-play game called Dambuilder, a side- scroller stub called Ballworld, and a few more. Each of the games can be run in two-dimensional or three-dimensional graphics.

The name 'Pop' for the framework was chosen in memory of my beloved father, not that he was at all interested in computers, but what the heck. This is for you, Pop!

At the writing of this introduction nearly 100 different student projects have been built using the Pop Framework, with the result that the code has become quite solid and easy to extend. In Software Engineering and Computer Games , the workings of the Pop code is explained within the general context of software engineering, and the user is guided into extending one of the game modes to create his or her own computer game.

The Pop Framework running four of its default games

graphics/inticon02.jpg

Why teach something so seemingly frivolous as computer game programming and design in an upper-division computer science class?

  • Breadth . Computer games integrate techniques and code from the whole spectrum of computer science: software engineering, graphics, artificial intelligence, and user interface design.

  • Depth . Developing a computer game involves many different levels of skills, from low-level algorithm implementation to high-level object-oriented design. Completing a computer game project requires a deep, sustained effort.

  • Excitement . The visual and interactive nature of computer game projects can deeply engage a student's interest. Because it's fairly easy to tell if a game works well, the goal is satisfyingly clear-cut and challenging.

  • Simulation applications . Writing a computer game involves creating an object-oriented real-time simulation of a certain kind of toy world. The skills and techniques can be transferred to simulating a wide range of other systems.

  • Career preparation . A completed computer game is an impressive program for students to demonstrate to prospective employers , whatever the nature of the job. In addition, a number of students are interested in getting jobs specifically as game developers.

Software Engineering and Computer Games uses C++ and an object-oriented approach throughout. We use Unified Modeling Language (UML) for object-oriented analysis, we discuss software patterns and how to incorporate them into our object-oriented design process, and we consistently use the techniques of object-oriented programming to implement our classes.

Among the special classes in the Pop Framework is a cCritter class to represent our computer game 'critters,' and a cGame class for the games themselves . We also develop some reusable utility classes such as a polygonal and bitmap-based cSprite objects for putting images on the screen, a cRandomizer with a useful randomizing function, a cVector class and a cMatrix class for physics and graphics, and a cPerformanceTimer class to make our animations real-time and processor-independent. In addition, the Pop Framework includes some sound, toolbar, menu and dialog resources. The Pop Framework is built upon the underying framework of the MFC, using some standard MFC classes: CPopApp , CMainFrame , CChildFrame , CPopDoc , and CPopView . The Pop Framework's MFC classes are customized so as to be easily usable for animated simulations or computer games.

The Pop Framework has a cGraphics class that acts as a bridge between the framework and any specific kind of graphics implementation. That is, all of our graphics functions are in the abstract base class cGraphics , with the specific implementation of the methods being deferred to child classes. We presently have cGraphicsMFC and cGraphicsOpenGL implementations.

The cGraphicsMFC uses standard Windows API graphics calls. These calls have an undeserved reputation for being slow; the Pop Framework's speed is in fact more than adequate for typical computer games, easily achieving update rates far in excess of the minimal 30 frames per second that one typically needs. The key trick is to assemble each new frame in an offscreen cMemoryDC object provided by the Pop Framework, and to then rapidly block copy this image to the screen. The cGraphicsMFC is optimal for two-dimensional games including sprites and graphics, but doesn't have adequate support for fully three-dimensional games.

The cGraphicsOpenGL provides support for three-dimensional graphics, with z-buffering, lighting effects, and so on. On modern machines with graphics cards that have hardware OpenGL support, the cGraphicsOpenGL gives acceptable animation frame rates. As well as supporting polygons, we support bitmap textures in OpenGL.

Software Engineering and Computer Games was developed through nearly a dozen draft versions for use in my undergraduate software engineering and graduate software projects courses over the past 15 years . Above and beyond covering the syllabi for these courses, my agenda is always the same: to teach the students to write complete, visually interesting programs that seem to come alive .

Being a programmer “ or a computer science professor “ is a little like living on a Stairmaster. Your field never stops changing; your old knowledge is continually being swept into oblivion. Software Engineering and Computer Games and the Pop Framework undergo updates and upgrades every semester. It's never really finished; there are always more features one could add. The Pop Framework has many good starting points for further projects, ranging in level from a homework assignment to a Master's Degree thesis.

Software Engineering and Computer Games is designed for the latest flavors of Windows and C++. As of 2003, the flavors of Windows we support are Windows 95, Windows 98, Windows Millennium Edition, Windows NT 4.0, Windows 2000, and Windows XP. The current Pop Framework was developed using the C++ compiler and integrated development environment that are part of the development product called Microsoft Visual Studio. Strictly speaking, the part of Visual Studio that we use is called Visual C++, but in this book we will use the more general 'Visual Studio' to refer specifically to the Microsoft C++ compiler and development environment.

There are two versions of Visual Studio in current use, the older Visual Studio, Version 6.0, and the more recent Visual Studio.NET, which is also known as Visual Studio, Version 7.0. With regard to our task of building C++ programs, the two products are quite similar, although there are some minor differences in the layouts of the controls. When necessary, we distinguish between the two products by calling them Visual Studio 6.0 and Visual Studio 7.0.

Although most of the Pop Framework was developed while using Visual Studio 6.0, the most recent builds have been created using Visual Studio 7.0. The framework code builds with no warnings in either environment. We supply both Version 6.0 and Version 7.0 project files with the code.

When the text mentions specific control sequences for Visual Studio interface, we will, where necessary, describe both the Version 7.0 [and the Version 6.0] controls, using square brackets around the Version 6.0 controls. Certainly most readers will be moving to Visual Studio 7.0 soon, but at this point, Visual Studio 6.0 is still very widespread. Also it may be that some programmers will prefer to stick with the battle- tested Version 6.0 until more service packs for Version 7.0 have been released.

We provide a convenient Appendix C to summarize for both versions the specific Visual Studio control sequences which we discuss. Any problems or fixes involving the code will be discussed on the book's web-site www.rudyrucker.com/computergames. This is also the place to check for new upgrades to the Pop Framework and for examples of student projects.

Software Engineering and Computer Games will also be useful to individual readers who are looking for a quick path into Windows MFC programming. Let's stress again that you do not need to know any Windows programming before using Software Engineering and Computer Games . A familiarity with C++ is recommended, but Software Engineering and Computer Games does include discussions of all the key C++ topics that we use.

A note on notation. We've tried to consistently use some special fonts for different purposes.

  • C++ Language reserved words, Windows API functions, Windows Data types, built-in MFC classes and their methods

  • Special purpose classes and methods defined for our project

  • Names of directories and names of files

  • Menu item selections or dialog box controls

  • Examples of C++ code

There are already some very good books on many of the coding topics we treat. For a more traditional software engineering course, it may be appropriate to accompany the use of Software Engineering and Computer Games with a book such as Steve McConnell, Software Project Survival Kit (Microsoft Press, 1997). It's worth mentioning that Steve McConnell's other books, Code Complete (Microsoft Press, 1993) and Rapid Development (Microsoft Press, 1996), are wonderful sources of information about, respectively, program-level and project-level practices to use for efficient software engineering.

Perhaps the most popular older surveys of the field of software engineering are Roger Pressman, Software Engineering: A Practitioner's Approach (McGraw-Hill, 2000) and Ian Somerville, Software Engineering (Addison-Wesley, 2001). And there is much to recommend in the more recent book, D. Hamlet and J. Maybee, The Engineering of Software (Addison-Wesley, 2001). Software engineering texts range from being very code-oriented to being very process-oriented . Viewed as a software engineering text, my Software Engineering and Computer Games is further towards the code-oriented end of the spectrum than the other software engineering books mentioned.

Ideally, a computer science curriculum might have two software engineering courses: a broad-based process-oriented course, and an in-depth software project course using a book like Software Engineering and Computer Games . It would seem that the two courses could be taken in either order, as each would shed light on the other. On the one hand, it's nice to have studied the software engineering process before attempting a big project; on the other hand, it's much easier to appreciate the purpose and importance of the software engineering process after you've actually gone through the experience of building at least one substantial project.

Two good C++books are those by Cay Horstmann: Mastering C++ (John Wiley, 1991), and Practical Object-Oriented Development in C++ and Java (Wiley, 1997). Charles Petzold, Programming Windows 95 (Microsoft Press, 1996) is a classic general reference for non-MFC Windows programming. The successive editions of Inside Visual Studio (Microsoft Press, 1997), by David Kruglinski and others, have good overviews of the Microsoft Visual Studio Developer's Studio with many short examples. Alan Feuer's rich and knowledgeable MFC Programming (Addison-Wesley, 1997) is an excellent book about MFC. George Shepherd and Scot Wingo, MFC Internals: Inside the Microsoft Foundation Class Architecture (Addison-Wesley, 1996), gives a valuable low-level guide to the workings of MFC, including some material which can't be found in the official documentation or in any other books.

Kendall Scott and Martin Fowler, UML Distilled (Addison-Wesley, 2000) is a very nice little book covering the basics of the Unified Modeling Language. The standard book on design patterns is the well-written and inspiring book, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995).

Regarding OpenGL programming, the so-called 'Red, Blue, and White' books (named after the main colors of their otherwise identical covers) are canonical. These are, respectively, Jason Woo, Jackie Neider, Tom Davis, and Dave Shreiner, OpenGL Programming Guide (Addison-Wesley, 1999), Renate Kempf and Chris Frazier, eds, OpenGL Reference Manual (Addison-Wesley, 1999), and Ron Fosner, OpenGL Programming for Windows 95 and Windows NT (Addison-Wesley, 1997). These books can also be found on-line. A recent link to the Red Book, for instance, is http://fly.cc.fer.hr/~ unreal /theredbook/about.html.

Finally, let's mention some recent books on computer game design and programming. Andre LaMothe, Tricks of the Windows Game Programming Gurus (Sams, 2001), is an excellent, wide-ranging book on writing games. LaMothe has written a number of other useful books as well. David Bourg, Physics for Game Developers (O'Reilly, 2001), is quite interesting. Ian Parberry, Learn Computer Game Programming with DirectX (Wordware, 2000), gets the user up and running with a simple DirectX game framework. Also of interest are David Astle, OpenGL Game Programming (Prima Tech, 2000); Rouse, Ogden, and Rybczyk, Game Design: Theory and Practice (Wordware, 2001); Andrew Rollings, Game Architecture and Design (Coriolis, 1999); and Mark DeLoura, Game Programming Gems 1 & 2 (Charles River Media, 2001).

You are free to use the Pop Framework in developing your own programs. The Pop Framework source code is explicitly placed in the public domain. This means that you can freely use any or all of the source code for any purpose, including commercial products or inclusion in other texts. You do not need a separate permission from the author or his publishers to do this, and you are not required to acknowledge any use of the code (although a public line of thanks is always nice!). You are free to place your own copyright notice on works which include the source code, with the understanding that the author accepts no liability for problems caused, and with the stipulation that all of the author's code remains in the public domain and may be further re-used by others.

Let's say a few words about some possible future extensions of the Pop Framework.

A feasible near- term enhancement of the Pop Framework is an implementation of a cGraphicsDirectX class which might make faster three-dimensional animations than cGraphicsOpenGL .

As support for three-dimensional games was only developed in late 2001, there was not time to develop classes for three-dimensional geometrical objects, classes to represent complex three-dimensional worlds, or strong examples of three-dimensional games. This is an area that some of my students will be working on in the near future. Any useful new code may be incorporated into new releases of the Pop Framework available on the book's website.

A less obvious future improvement might be to extend the framework to support four-dimensional computer games (e.g. a HyperPacMan in a four-dimensional maze or a four-dimensional Space Invaders). This could open some interesting new ground. The fourth dimension is a topic dear to my heart.

Networking is lacking from the current Pop Framework. Although the framework supports multiple players, it doesn't support multiple players on different machines. Perhaps a cListenerSocket child of the cListener class could to be implemented for this. And one would need to research the existing work on architectures and programming idioms that can keep two game sessions sufficiently in synch with each other. As future versions of the Pop framework are tailored to take advantage of Visual Studio.NET, it may turn out that we can get networking features fairly easily via the use of .NET methods.

Experienced gamers will think of many other enhancements that could be made. The Pop Framework presently has no support for scripting, for joysticks, for DirectX Sound, or for loading meshes and skins. As the code is open source and the architecture is resolutely object-oriented, adding these kinds of enhancements is quite feasible. I gladly offer up these tasks to the more adventurous readers. As time goes by, the book's website will post the source and documentation for any significant improvements to the Pop Framework.

The Pop Framework is written in C++, and it makes essential use of the Microsoft Foundation Classes for its document-view architecture. Some will wonder about porting it to Java. The port is feasible, given that: (a) the Pop Framework classes use solid principles of object-oriented design, (b) most of the classes are independent of any specific features of C++, Windows, or MFC, and (c) the class members are, by and large, either primitives or pointers to other class objects (as opposed to instances of other classes , which Java does not allow). Regarding Java, the speed of Java applets does seems to be acceptable for game play; see for instance the prototype Java applet Asteroids game at www.rudyrucker.com/computergames/java. Nevertheless, there are some dis-incentives to porting the Pop Framework to Java. Among the disincentives would be that the Java language standard is something of a moving target, that existing Java development environments don't seem as powerful and solid as Microsoft Visual Studio, that deploying a Java package across many platforms is a 'write once, debug everywhere' experience, and the fear that Java may yet be marginalized. A C++ port might be a liklier opton.

In closing, I'd like to thank my colleagues Jon Pearce, Cay Horstmann, and Michael Beeson, with whom I've had so many useful discussions about the practical and theoretical sides of computer science. Thanks also to John Sutherland and to John Foster who read a final draft of the book and made many useful suggestions. Any errors that remain are my own.

Special thanks go to the programmers I learned real-world software engineering with at Autodesk, Inc., in the early 1990s: John Walker, Eric Lyons, Josh Gordon, Bob Holt, Steve Demopoulos, Eric Gullichsen, Marc LeBrun, and John Castellucci. Thanks to my wife Sylvia for her patience and support during the seemingly endless hours of work this project took. And thanks to my many students, without whom Software Engineering and Computer Games truly could not have been written.

Rudy  Rucker

San  Jose,  California
August  12,  2002



Software Engineering and Computer Games
Software Engineering and Computer Games
ISBN: B00406LVDU
EAN: N/A
Year: 2002
Pages: 272

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net