1. Trang chủ
  2. » Công Nghệ Thông Tin

Game programming tricks of the trade

1K 57 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 1.044
Dung lượng 10,4 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

When I first came up with the idea for a compilation book, the first comment to me was “the Game Programming Gems series is doing well, and in fact, you are one of the co-authors!” True,

Trang 3

Programming Tricks of the

Trade

Trang 5

Programming Tricks of the

Trade

Lorenzo D Phillips Jr., Editor

André LaMothe, Series Editor

Trang 6

Premier Press, Inc is a registered trademark of Premier Press, Inc.

The Premier Press logo and related trade dress are trademarks of Premier Press, Inc and may not be used without written permission All other trademarks are the property of their respective owners.

Publisher:Stacy L Hiquet

Marketing Manager: Heather Hurley

Managing Editor:Sandy Doell

Acquisitions Editor:Emi Smith

Project Editor:Argosy Publishing

Editorial Assistants:Margaret Bauer and Elizabeth Barrett

Marketing Coordinator:Kelly Poffenbarger

Technical Reviewer:André LaMothe

Interior Layout:Argosy Publishing

Cover Design:Mike Tanamachi

CD-ROM Producer:Carson McGuire

All trademarks are the property of their respective owners.

Important: Premier Press cannot provide software support Please contact the appropriate software

manufacturer’s technical support line or Web site for assistance.

Premier Press and the author have attempted throughout this book to distinguish proprietary marks from descriptive terms by following the capitalization style used by the manufacturer.

trade-Information contained in this book has been obtained by Premier Press from sources believed to be reliable However, because of the possibility of human or mechanical error by our sources, Premier Press, or others, the Publisher does not guarantee the accuracy, adequacy, or completeness of any information and is not responsible for any errors or omissions or the results obtained from use of such information Readers should be particularly aware of the fact that the Internet is an ever- changing entity Some facts may have changed since this book went to press.

ISBN: 1-931841-69-1

Library of Congress Catalog Card Number: 2001099848

Printed in the United States of America

02 03 04 05 BA 10 9 8 7 6 5 4 3 2 1

Premier Press, a division of Course Technology

2645 Erie Avenue, Suite 41

Cincinnati, Ohio 45208

Trang 7

—Lorenzo D Phillips, Jr.

Trang 8

I started programming games over 25 years ago, and although I have been on bothsides of the business, that is, the development side and the business side, I can saywholeheartedly, I much prefer making games to selling them! The game business islike magic to me Although, I am practically as old as Yoda compared to many of thenew young game programmers, all these years have clarified in my mind that I sim-ply love making and playing games Video games are the most impressive artisticaccomplishments of our generation They are the fusion of science, art, sound,music, and prose And the cool thing has been watching them grow from nothing tophoto-real simulations that have you blinking your eyes saying, “that looks real!”

I remember the very first game that I played—Pong Shortly after, I played SpaceWar in an arcade in Oak Ridge Mall, San Jose, CA I was amazed by these games I

couldn’t believe my eyes; it was like magic, but better, since it was real It was real,

and I could learn how to do it So I decided that I would spend my life learninghow to do it, and I have pretty much done that

In my travels, I have met the most interesting people you can imagine, from BillGates to Steve Wozniak I had lunch with the guy who invented Defender, and sat

in a dark room and talked about DOOM with John Carmack I can say without adoubt there’s nothing in the world I would rather do And now with the turn of thecentury behind us, it’s up to you, the next generation of game developers, to takegames to the places that we all dream about

I admit I would much rather make games than write books, but writing books ismuch more constructive and more meaningful to me, personally, than writinggames However, I am eager to start creating games as I did in the ’80s and early

’90s But, for now, I still have a few tricks up my sleeve, and this book is one ofthem

When I first came up with the idea for a compilation book, the first comment to

me was “the Game Programming Gems series is doing well, and in fact, you are one of

the co-authors!” True, but this book is completely different Personally, I have nevergotten that much out of books that have small 1- to 5-page articles I believe that acompilation book needs to have coherent and complete chapters wherein explain atopic to a point that the reader really learns how to do it So, my goal was to have a

Trang 9

compilation book with hefty 20- to 50-page chapters that are complete, more

in-depth, and written in tutorial style Additionally, I wanted a cohesive look and feel

to them

With all that said, this book hits the mark It’s the first in our series of compilationbooks, but I think that it more than delivers its weight in Pentiums There are somereally interesting subjects covered in this book from advanced mathematics to

scripting, as well as topics like OpenGL, 2D, Skyboxes, Optimizations techniques,Assembly Language, and so on Each topic is a complete treatise on the subject, notjust introductions or little blurbs that leave you wondering

Of course, the authors are to thank for the content, but Lorenzo Phillips, the aging editor of the book, is to thank for making this idea a reality If you’re readingthis book and have worked on any kind of engineering job in your life, you will

man-appreciate the incredible complexity of getting people to do their jobs on time

Now, try getting 15 to 20 people to all do their jobs on time and do it with tency—that’s a miracle Lorenzo is really the person who I feel should get the most

consis-“props”—without his determination and hard work, this book would just be

anoth-er idea and would nevanoth-er have come to fruition

Lastly, as someone with experience in the trenches, and now that I have your tion, I would like to leave you with some real advice about making games—or mak-ing anything for that matter This stuff is hard—really hard If you are serious about

atten-it, then, as I have said many times, forget about having fun, forget about vacations,forget about that cute blonde next door—it’s not going to happen (especially thecute blonde) You simply don’t have time for anything, but work, work, and work.Talk is cheap; don’t waste your time on web boards describing your newest game,engine, technology, whatever—spend your time making it!

Remember, the few short moments of free time we have fade away all too quickly,and reality sets in All those things you wanted to do, thought you would do, neverget done So while you have the chance, do everything you can and finish it

Whatever it is

André LaMothe

“Surrounded by 14 computers in his laboratory and one of them is getting impatient!”

Trang 10

Wow, my first book project is finally complete! There are so many people to thankthat I hope I don’t forget anyone, but please know that if I forgot you, it was notintentional.

First and foremost, I have to thank my mother, Novella Phillips, for her guidance,love, and support and for keeping me out of harm’s way all these years I love you,Mom I’d like to thank my wife, Sayun Phillips, for her love, her support, and forgrowing with me over the years I thank you for making sure that I ate during thoselong stretches of no sleep and for the times when we just chilled out and playedTetris against each other I love you, babe I’d like to thank my sister, SharnellPhillips, for being the greatest big sister a little brother could ever ask for I mustthank the little people in my life (that is, the kids), starting with Lorenzo IV andTylen, my two sons, for their unconditional love, Jordan and Shane for the endlesshours of game play on the PCs and consoles, and Tessa for all of the laughter sheprovides on a daily basis To round out the family acknowledgements, I’d like tothank Joe and Kurt (my brothers-in-law), Su (my sister-in-law), and Myong (mymother-in-law), for being the best in-laws a man could hope for when two familiesare joined by marriage

I have to thank my man André LaMothe for getting me involved in the game try in the way I have always envisioned, for introducing me to book writing, forpicking me to grow businesses with, and for simply being a great friend I’d like tothank Emi Smith and Morgan Halstead for putting up with me and my authors andfor being such nice people to work with Emi, you have also grown into a goodfriend, and I know I still owe you a glass of wine –SMILE- I have to thank all of theauthors because without them this book would not have been possible Thanks toall of you for your hard work and dedication to make the project a reality I hopethe project has been enjoyable for each of you, and I would love to work with youall on future book projects

indus-Finally, I would like to thank all of the gamers around the world for sharing mylove and passion for creating and playing games

—Lorenzo D Phillips Jr

Trang 11

Lorenzo D Phillips Jr.is a gamer at heart and is involved in game development inevery aspect He spends hours upon hours developing and writing games He is theFounder and President of RenWare, Inc and is the Chief Development Officer ofXtreme Games, LLC and Nurve Networks, LLC He has 10+ years of experience inthe Information Technology community He has performed a wide range of dutiesthat include software development, analysis and design, networking, database, qual-ity assurance, and most recently configuration management He is formally educat-

ed and holds an associate’s degree in Computer Science, a bachelor’s degree inBusiness and Information Systems, and a master’s degree in Computers and

Information Systems

Kevin Hawkinsis co-author of OpenGL Game Programming and a software engineer

at Raydon Corporation in Daytona Beach, FL He is working on his master’s degree

in Software Engineering at Embry-Riddle University, where he obtained his lor’s degree in Computer Science and played on the intercollegiate baseball team

bache-Kevin is also the co-founder and CEO of www.gamedev.net, the leading online

com-munity for game developers When he’s not toying with the computer, he can befound playing guitar, reading, bodyboarding, and playing baseball He was drafted

by the Cleveland Indians in the 35th round of the 2002 Major League BaseballAmateur Draft

Ernest Pazerais a self-taught programmer, starting at age 13 with a TRS-80 ing a tape deck A month later, he was already writing video games Before long Mr.Pazera couldn’t imagine himself doing anything but game programming Mr.Pazera is one of the developers who helped create one of the most popular and

includ-respected game development sites on the Web: www.gamedev.net He is the

moder-ator of an isometric/hexagonal forum on the site and has extensive experiencewith game development

Wendy Jonesis currently a game programmer with Humongous Entertainment inSeattle She is currently focusing her professional attention on next-generationconsole projects, and her personal attention on her three children In the past, shehas done everything from tech support to web development to interface design inher eight short years in the computer industry

Trang 12

Trent Polackis a high school senior who has been programming in various guages since he was nine years old Other than programming, he is interested

lan-in sports, readlan-ing, and just enjoylan-ing life! He is also the cofounder of

www.CodersHQ.com, a site with a wealth of game programming tutorials anddemos

Born and raised in Seattle Washington, Ben Humphrey knew he wanted to be a

game programmer since childhood He has been programming since he was veryyoung Right out of high school he applied and was accepted to DigiPen Institute

of Technology, which at the time was only accepting around 100 people After ing DigiPen, he was picked up by Infogames Interactive where he is currently work-ing During that time, Ben also had the opportunity to teach C++ for a year atBellevue Community College Aside from his day job as a game programmer, he

leav-is also the co-web host of www.GameTutorials.com, which has hundreds of tutorials

that teach game programming from the ground up, all the way to advanced 3-Dconcepts

Heather Hollandis a software engineer for Navsys in Colorado Springs In her free

time, she works on small shareware games, moderates a forum at www.gamedev.net,

and plays her MMORPG of the month way too much

Jeff Wilkinsonis a game programmer at Terminal Reality, Inc He received hisdegree from DigiPen Institute of Technology

Dave Astleis a game programmer at Avalanche Software in Salt Lake City He is

also one of the owners and operators of www.gamedev.net, where he has been

actively involved in the game development community for over three years He

co-authored OpenGL Game Programming and has contributed to several other game

development books

Alex Varanese , alex@xenonstudios.com.

Mason McCuskey is the leader of Spin Studios (www.spin-studios.com), an

indepen-dent game studio currently hard at work on a brand new game Mason has beenprogramming games since the days of the Apple II He has also written a book

(Special Effects Game Programming), along with a bunch of articles on the glorious

craft of coding and designing games He likes programming games more thanwrestling Siberian grizzlies

André LaMothehas been involved with gaming for more than 25 years and is stillthe best-selling game programming author in the world (he wants someone to takeover soon!) He holds degrees in Mathematics, Computer Science, and ElectricalEngineering Additionally, he is founder and CEO of Xtreme Games LLC, Nurve

Trang 13

Networks LLC, and eGameZone Netwoks LLC He is also the creator of the

“not-for-profit” Xtreme Games Developers conference www.xgdc.com, which is a game

developer conference that everyone can enjoy because of its affordable price

Richard Bensonis a software engineer at Electronic Arts Los Angeles He can be

reached at rbenson@earthlink.net.

Chris Hobbsis a senior software engineer for Flying Blind Technologies The pany is focused on developing software for the blind and visually impaired He hasalso worked with storage technology, game development, and educational softwareover the course of his 5 years as a professional programmer In his spare time, Chris

com-is currently working on a product that merges hcom-is experience from the educationalsoftware and game development industries He is married and expecting his firstchild in July of 2002

Trang 14

Introduction xxiv

Section 1: Game

Programming Development

Tricks 1

Trick 1: Software Configuration

Management in the Game

Trick 7: In the Midst of 3-D,

There’s Still Text 169

Trick 8: Sound and Music:

Introducing WAV and MIDI

into Your Game 217

Trick 9: 2D Sprites 253

Trick 10: Moving Beyond OpenGL 1.1 for Windows 279 Trick 11: Creating a Particle Engine 307 Trick 12: Simple Game

Quaternions 591 Trick 18: Terrain Collision with Quadtrees 625 Trick 19: Rendering Skies 657 Trick 20: Game Programming Assembly Style 681

Trang 15

Appendix E: ASCII Table 991

Appendix F: What’s on the

CD-ROM 997

Index 1001

Trang 16

Introduction xxiv

Section 1: Game Programming Development Tricks 1

Trick 1: Software Configuration Management in the Game Industry 3

Introduction 4

What Is Software Configuration Management (SCM)? .4

A Brief History on SCM 5

SCM Concepts and Functions 6

Is SCM Important? 8

The Software Development Life Cycle (SDLC) .9

Software Development Models 9

Software Development Phases 11

SDLC Pitfalls 16

Communication Breakdown 17

Artifact Update Conflicts 17

The Importance of SCM .17

Conclusion: The Future of SCM .19

Trick 2: Using the UML in Game Development 21

Introduction .22

What Will Be Covered? .22

The Unified Modeling Language 23

Use Cases 23

Class Diagrams 25

Interaction Diagrams 28

Activity Diagrams 29

Statechart Diagrams 31

Packages 32

Integrating the UML and Game Development .33

Build the Requirements Traceability Matrix 33

Identify Use Cases 35

Establish the Packages 38

Create Initial Class Diagrams 40

Develop State Transition Diagrams 41

Produce Package Interaction Diagrams 42

The Transition from Analysis to Design 43

Update Class Diagrams 44

Update Interaction Diagrams 45

Refinement and Iteration 47

The Move to Implementation 47

Summary and Review .47

Where to Go from Here .48

Conclusion .49

Trick 3: Building an Application Framework 51

Introduction .52

Why Use an Application Framework? 53

Why Roll Your Own? .54

Identify Your Needs 55

The CApplication Design 56

The CEventHandler Design 58

The CMessageHandler Design 60

Trang 17

Implementation of a Simple

Application Framework 63

Implementation of CMessageHandler 64 Implementation of CApplication 65

Implementing CEventHandler 68

A Sample Program .75

The Design of CTestApplication 75

The Design of CTestEventHandler 76

The Implementation of CTestApplication 77

The Implementation of CTestEventHandler 78

How Do We Benefit? .79

Summary .80

Trick 4: User Interface Hierarchies 81

Introduction .82

The Role of UI .83

UI Design Considerations .84

The Widget Tree 84

Z Ordering 86

Notification 86

Appearance 87

Focus 87

Widget Members .88

Widget Member Functions .90

Static Member Accessors 90

Indirect Static Member Accessors 92

Nonstatic Member Accessors 93

Constructors and Destructors 94

Displaying Widgets 95

Receiving Input 95

Notification 96

Class Definition .98

CWidget Implementation .101

Getters, Setters, and Other Simple Member Functions 101

Other Member Functions 104

And Now for the Payoff 113

CTestEventHandler 114

CTestWidget 115

Summary .117

Trick 5: Writing Cross-Platform Code 119

Introduction .120

Why Develop Cross-Platform Code? 120

Planning for a Cross-Platform Product .121

Problems Between Platforms .122 Programming for Multiple Platforms 124

The #if defined Directive 124

The typedef Keyword 125

Always Use sizeof() 126

What Is an Abstraction Layer? 126 Why Use an Abstraction Layer? 127

For What Systems Would We Want to Create an Abstraction Layer? 127

Designing an Abstraction Layer 128

Deriving from the Abstraction Layer 130 Explaining the Derived Layer 135

Using the Derived Layer 135

In Conclusion .137

Section 2: General Game Programming Tricks 139

Trick 6: Tips from the Outdoorsman’s Journal 141

Introduction: Life in the Great Outdoors .142

What You Will Learn .142

Height Maps 101 .142

Making the Base Terrain Class .144 Loading and Unloading a Height Map .147

The Brute Force of Things .150

Getting Dirty with Textures! .153

Trang 18

Adding Light to Your Life .159

Lost in the Fog .162

Fun with Skyboxes 163

Going Further: Deeper into the Wilderness .166

Conclusion: Back to the Indoors? 167

Bibliography .167

Trick 7: In the Midst of 3-D, There’s Still Text 169

Introduction .170

What Will Be Learned/Covered 171

How Our Adventure Game Works 172

First Things First— Let’s Get Ta Steppin’ 173

“Whatchu Lookin’ At?” 177

How Can We Have a Frag Count Without Any Monsters? 180

Examining the Code .183

Version 1—Mobility and Collision Detection 183

Version 2—Taking a Look Around 194

Version 3—Adding Player and Enemy Data 201

Summary and Review .212

Where to Go from Here .214

Conclusion .216

Trick 8: Sound and Music: Introducing WAV and MIDI into Your Game 217

Introduction .218

A Quick Overview of WAV 218

The Format Chunk 219

The Data Chunk 220

A Look at MIDI .220

The MIDI File Header 220

Track Chunks 220

Let’s Play: Simply Win32 .221

Playing MIDI Using Win32 .222

Sound in DirectX .226

Creating the DirectSound Object 227

Cooperative Levels: Getting Along with Other Application Processes on Your System 228

Working with Sound Buffers 229

Secondary Sound Buffers 229

Getting Ready to Use CreateSoundBuffer() 230

Reading WAV Files 231

MMIO Commands and Structures 232

Using MMIO to Load a WAV 235

Using CreateSoundBuffer 239

Playing the Secondary Buffers 241

MIDI with DirectMusic .243

Initializing the IDirectMusicPerformance 245

Creating an IDirectMusicPort 246

Setting Up the IDirectMusicLoader 246 Loading a Song 247

Playing a Song 249

Stopping a Song 250

Checking for Play Status 250

Releasing a Segment 250

Conclusion: Shutting Down DirectMusic 251

Trick 9: 2-D Sprites 253

Introduction .254

What You Will Learn .254

Image Loading 254

DirectDraw Basics 259

Transparency with Sprites 264

Drawing and Moving Sprites 265

Basic Collision Detection with Sprites .273

Summary .276

Chapter Conclusion .276

Trang 19

Trick 10: Moving Beyond OpenGL

1.1 for Windows 279

Introduction .280

The Problem .281

OpenGL Extensions .282

Extension Names 283

What an Extension Includes 284

Extension Documentation 286

Using Extensions 287

Querying the Name String 288

Obtaining the Function’s Entry Point 288

Declaring Enumerants 290

Win32 Specifics 290

Extensions, OpenGL 1.2 and 1.3, and the Future .291

What You Get .292

OpenGL 1.2 292

OpenGL 1.3 294

Useful Extensions 295

Writing Well-Behaved Programs Using Extensions .298

Choosing Extensions 298

What to Do When an Extension Isn’t Supported 300

The Demo .301

Conclusion .306

Acknowledgments .306

References 306

Trick 11: Creating a Particle Engine 307

Introduction .308

What You Will Learn from This Fun-Filled Particle Adventure .308 Sounds Great What’s a Particle Engine? .309

Billboarding .314

Interpolation and Time-Based Movement .316

Designing the Particle System API 318

Designing the Particle Wrapper 325 Summary: Reminiscing About Our Little Particles .327

Going Further: How to Get More in Touch with Your Inner Particle .327

Conclusion: The End Is Here .328 References 328

Trick 12: Simple Game Scripting 329

Introduction .330

Designing the Language .331

Basic Instructions 334

Arithmetic 334

String Processing 335

Branching 335

Host API 336

Miscellaneous 337

Directives 337

Comments 338

Building the Compiler .338

An Overview of Script Compilation 340 Putting It All Together 362

Implementing the Compiler 365

A Small String-Processing Library 365

File I/O Functions 372

Program Structure of the Compiler 373

Tokenization 378

Parsing 396

The Runtime Environment 410

Fundamental Components of the Runtime Environment 411

Storing a Script in Memory 413

Loading the Script 417

Overview of Script Execution 419

Implementing Opcodes 421

Trang 20

Communication with the Game

Engine 425

Timeslicing 432

The Script Runtime Console 435

Summary .443

Where to Go from Here .444

New Instructions 444

New Data Types 444

Script Multitasking 445

Higher Level Functions/Blocks 445

Block Comments 447

A Preprocessor 447

Escape Characters 448

Read Instruction Descriptions from an External File 449

Forcing Variable Declarations 450

One Last Improvement 451

Section 3: Advanced Game Programming Tricks 453

Trick 13: High-Speed Image Loading Using Multiple Threads 455

Introduction .456

Thread Basics .456

What’s a Thread? 456

What Is Multithreading? 456

Starting a Thread 458

Waiting for a Thread to Finish 460

Race Conditions 461

Atomic Operations 463

Critical Sections 464

Producers and Consumers 466

Semaphores to the Rescue 468

Programming Semaphores 469

CProducerConsumerQueue 471

Introducing CResourceLoader .475 The Big Idea 476

Tasks 477

Queuing Up Tasks 478

Beginning the Loading Process 478

The Secondary Threads 479

The Payoff .481

Simulating Work 481

The Evils of Cache When Evaluating Disk Performance 482

Catching Performance Data 482

Conclusion (Where to Go from Here) 484

Trick 14: Space Partitioning with Octrees 485

Introduction .486

What Will Be Learned/Covered 487 How an Octree Works .488

Describing the Frustum 490

When to Stop Subdividing 492

How to Draw an Octree 493

Examining the Code .494

Getting the Scene’s Dimensions 497

Creating the Octree Nodes 500

Setting Up New Nodes for Recursion 506

Getting a Child Node’s Center 508

Assigning Vertices to the End Node 510 Drawing the Octree 511

Destroying the Octree 513

Implementing Frustum Culling 514

Calculating the Frustum Planes 519

Adding Frustum Culling to Our Octree 527

Summary and Review .531

Where to Go from Here .532

Conclusion .533

Trick 15: Serialization Using XML Property Bags 535

Introduction .536

What is XML? .537

A Sample Data File .538

Trang 21

A Bag is Born .539

STL Multimaps .541

Implementing the Bag .542

Adding Data Elements .545

Translating Special Characters 546

Adding Nonstring Elements 549

Adding Bags 549

Getting Elements 550

Getting Strings 550

Getting Other Data Types 551

Getting Bags 552

Saving and Loading Bags .553

Saving Bags 553

Loading Bags 555

Other Operations .558

An Assignment Operator and a Copy Constructor 560

Merging 562

Conclusion: OK, But Is This Really XML? .565

Enhancements and Exercises .565 Trick 16: Introduction to Fuzzy Logic 567

Introduction .568

Standard Set Theory 568

Fuzzy Set Theory 570

Fuzzy Linguistic Variables and Rules 572

Fuzzy Manifolds and Membership 575

Fuzzy Associative Matrices 579

Processing the FAM with the Fuzzified Inputs 583

Conclusion = {.1 beginning, 5 middle, 99 end} .590

Trick 17: Introduction to Quaternions 591

Introduction .592

Complex Number Theory 592

Hyper Complex Numbers .599

Applications of Quaternions .608

Building a Simple Quaternion Engine .612

Purpose 624

Conclusion 624

Trick 18: Terrain Collision with Quadtrees 625

Introduction .626

What Will Be Covered .627

The Quadtree .632

The CQuadtreeNode class 634

Building Up the Quadtree 636

CQuadtreeNode::AddFace() 638

Explanation of RayIntersectTriangle() 644

Cleaning Up 648

Design Decisions and Performance 649 Other Uses for Quadtrees 651

The Demo 653

Summary and Review .655

Where to Go from Here .655

Conclusion .655

References 655

Trick 19: Rendering Skies 657

Introduction .658

What You Will Learn .658

Skyboxes .660

What Is a Skybox? 660

Representing a Skybox 660

Orienting a Skybox 662

Rendering a Skybox 663

Putting It All Together 666

Skydomes 667

Creating the Skydome 667

Skydome Textures 668

Rendering a Skydome 669

Skyplanes 669

Creating the Skyplane 669

Rendering the Skyplane 670

Trang 22

Generating Skybox Textures .672

Have the Artist Make Them 672

Find Preexisting Textures 673

Create Them Using Terragen 673

What Is This All About? 682

Who Is the Target Audience? 682

What Do I Need? 682

Why Assembly Language? .683

Win32 ASM Basics .684

MOV Instruction 684

ADD and SUB Instructions 684

MUL and DIV Instructions 685

The Design Document .686

Connecting to Direct Draw .704

Our Direct Draw Library 705

Our Bitmap Library .715

A Game Well, Sort Of .725

Conclusion .731

Direct Input Is a Breeze .732

Timing and Windoze .739

The Menu System .747

Putting the Pieces Together .752 Conclusion .761 Stepping to the Plate 763

Mr Structure .768 The New Shape Maker .768 Update Takes a Few Practice

Swings .773 Let’s Get Moving .782 Time to Clear the Bases .799 The Final Batters 803 The Loop and His Team .810 Conclusion .820 Rotation Solution .821 The Sound Module .828 One Big Headache .835 Screen Transitions 847 Putting More Pieces Together 856 Conclusion .873 Next Piece, Please .875

I Can’t See It! .880 The New Text .885 Scoring and Levels .891 Conclusion .897 Storing Your Life .898 Come On, Lucky Number 7 .905 Conclusion .909

Section 4: Appendices

Appendix A: Introduction to DevStudio 913

Creating a Project and Workspace 915 Adding Source-Code Files .918 Setting Compiler Options .920

Setting the Warning Level 922Setting the Optimization Level 923Turning on Runtime Type

Identification (RTTI) 924

Trang 23

Library and Include Search

Paths 925

Per-Project Search Paths 925

Global Search Paths 926

Linking in the DirectX

SCM Sites .988 Game Development Sites: Best of the Best .988 Downloads, News, and Reviews .989 Game Conferences .990

Appendix E: ASCII Table 991 Appendix F: What’s on the

CD-ROM 997

The CD-ROM GUI .998 CD-ROM File Structure 998 System Requirements .998 Installation .999

Index 1001

Trang 24

Letter from the

Series Editor

This book has been a long time in the making My original motivation forwanting a game programming tricks compilation book was that althoughthere are other compilation books on the market they simply try and covertoo many topics The results are a collection of 50-60 authors that onlyhave a few pages each to cover topics that simply take much more time to

do justice to Therefore, my goal with this book was to create more of acollection of complete tutorials of game programming tricks that hadenough page count each to really make a dent in the subject area

Additionally, I wanted to create a template of sorts, so that as you're ing each trick or tutorial you see a familiar structure rather than a smor-gasbord of layouts

read-Game Programming Tricks of the Trade fills a gap between the game gramming bibles that are 1000+ pages of the same thing, and the othercompilation books that use the shotgun approach I think that by the timeyou complete this book you will have a strong theoretical and practicalgrasp of every single subject covered And let me tell you some of thedemos are pretty cool! Make sure to check out the quadtree and scriptingengine demos for sure

pro-This book covers a lot of interesting ground, moreover there are actualcomplete code listings, and working demos! You aren’t going to see com-ments like, “this is how you would do it, I leave it to you…” Rather, you aregoing to see how to do it, and then it will be done! Furthermore, theauthors really made an effort to make the book as cool as possible, nostuffy talk, no trying to impress or confuse the readers, but just plain brain

to brain coverage of some of the most interesting facets of game ming that are discussed in many game programming books, but neverreally covered in a complete manner

program-In conclusion, this book is a must for any level of game programmer, Iguarantee you will get something out of even if you’re starting out or youjust finished HALO II! You can’t know everything!

Trang 25

Additionally, we would love to hear your feedback on Game Programming

Tricks of the Trade and what topics you would like to see covered in the

future, so feel free to email me personally at gds_suggestions@hotmail.com

with any ideas for material you would like covered in the next volume

These books are for you, so you might as well have a say in it!

Sincerely,

André LaMothe

Series Editor

Trang 26

by Lorenzo D Phillips Jr.,

www.renwareinc.com, lorenzo.phillips@renwareinc.com

Welcome to Game Programming Tricks of the Trade! This book is a compilation of

“tricks” that you can use when you are making games Each trick provides you with

a unique tip that you can add to your games You can even use a combination oftricks if you like The tricks that are taught in this book are a combination ofOpenGL and DirectX This will ensure that we have something for all of you gameprogrammers out there

I should point out that this book is not intended to be a complete resource forgame programming, OpenGL, or DirectX Rather, it is a collection of techniquesthat will serve as a guide for you

This book is organized into three parts:

1 Part I, Game Programming Development Tricks, provides you with someneeded foundation to make you an effective game programmer Topicsinclude cross-platform game programming, application frameworks, and so

on There is even a chapter included that discusses configuration ment Configuration management is becoming more and more popular inthe industry and it is important to know what it is and how it will help youwith your game programming projects If you plan to deal with larger compa-nies, you should definitely look into the configuration management move-ment

manage-2 Part II, General Game Programming Tricks, is a compilation or techniquesmainly for beginners at heart The topics covered are those that you will not

be able to do without for larger scale game projects After all, if you do notunderstand 2D then how do you expect to learn and understand 3D?

3 Part III, Advanced Game Programming Tricks, is filled with tricks that willhelp you create games that are optimized It will also help you create intelli-gent life forms that will make your game players quake in their boots oncethe enemy is hot on their trail There is also a complete tutorial on how todevelop a game using Assembly Language Now you tell me, what other book

Trang 27

covers Assembly Language game programming? And in case you happen toknow of one, you tell me if what you found will result with a completed game

at the end of the reading

In addition to the techniques taught throughout this book, the CD-ROM has a lection of source code, demos, and games So, without any further delay, let’s jumpright into the first trick and get started on your journey to enhancing your game

col-programming skills

In short, there is enough information in here to be useful to anyone interested ingame programming I know there are complaints from the advanced communityabout books not having enough advanced information Well, I ask those of you inthat crowd to stick with this series, because if this one does not have what you arelooking for, you can believe one of the future books will! In fact, one is already inthe planning stages

Either way, I hope you enjoy the book as the authors and I put a lot of effort intothis project because we believe in sharing game programming information so thatthe level of quality in the games continues to get better!

NOTE

Due to some of the formatting constraints of

the book, you may see some of the source code

fall onto the next line and indent three spaces.

We have all tried our very best to ensure that

the code is still in a format that will not cause

errors in the compilers However, if you type or

enter the code from the book in via the

key-board, please be sure to place the code on a

sin-gle line so the compiler will recognize it

correct-ly or in most cases you can refer to the

CD-ROM and copy and paste the code you need.

Trang 29

Programming Development Tricks

Trang 30

all of which cover some aspect of game ming development tricks You will learn how to cre- ate platform independent source code You will also learn to create a flexible user interface and an

program-application framework Since the game industry has started taking a more serious look at software con- figuration management, there is even an introduc- tory chapter on this topic Part I is meant to help you with good game programming practices that will save you a lot of time and a lot of heartache.

So without any further delay, let’s jump right in and get started on your journey to becoming a better game programmer!

Trang 31

Software Configuration

Management

in the Game

Industry

Lorenzo D Phillips Jr., www.renwareinc.com, lorenzo.phillips@renwareinc.com

Trang 32

Here we are about to discuss one of the most hated topics in software ment—Software Configuration Management (SCM) Maybe it’s not that much of ahated topic, but it is truly a discipline that no one seems to have time to implementproperly SCM is often viewed as additional overhead that will cause the project toslip its schedule, or it’s simply just seen as a pain in the butt This is the farthestthing from the truth If done properly, SCM is one of the major factors in success-fully delivering your product on time and under budget But, as with most things, if

develop-it is not implemented appropriately develop-it can be disastrous!

This chapter will introduce the game world to the SCM discipline Well, maybe notintroduce it, but rather make an effort to discuss what SCM really is at a high level.This chapter, however, will not make an attempt to cover SCM in too much depthbecause this topic could easily generate a book of several hundred pages This chap-ter will cover what SCM is, a typical Software Development Life Cycle (SDLC), thepitfalls of SDLC, and the importance of the SCM role on every project So, withoutfurther hesitation, let’s jump right in and figure out what true SCM is all about

What Is Software

Configuration Management (SCM)?

Simply stated, SCM is the process of bringing control to a software developmenteffort

We can always expect some level of confusion any time a number of individuals gettogether The larger the group is, the greater the chance of confusion or miscom-munication The software development world is producing some of the most com-plex applications and systems ever seen Because of this fact, SCM is needed morethan ever SCM is the art of identifying, tracking, and controlling the changes tothe software or system being built It is becoming more and more common thatsoftware releases are being produced in a faster timeframe This means there is lit-tle room for error and that defects are being reported more quickly With this type

Trang 33

of acceleration, it is important that a clear line of communication is established sothat everyone on the project knows exactly where the project is and what is going

on at all times

But where did SCM come from? How long has it been around? What functions doSCM serve? And, why is it so important? I will attempt to answer these questions inthe following subsections

software applications became more complex and the project teams began to grow

in size It became virtually impossible to use the existing processes and procedureswith the existing staff because design changes and the overall production of the

product was too much for a single person or small group of people to control

As time passed, computers became a hot item and the applications that automatedmany tasks on the computer became more and more visible Of course, this was

great for the software industry, but with this growth came public demand The

demands for new software features opened the door for other software firms to enterthe software development industry with new and improved products that constantlytook advantage of the latest technologies As a result, the project team dynamics

changed There were more people with diverse backgrounds that needed to nicate well with others in order to understand the vision of the project You no

commu-longer had a small team of experts, but a large team of entry-level employees mixed

in with those expert employees As with any communication, the larger the group,the less effective communication can become Just like the old grapevine example.You can start a rumor and if the group is small that rumor stands a good chance ofstaying intact In addition, if the rumor started to change, the group communicatingwas small enough to correct any misunderstandings However, in larger groups therumor would not be in its original form by the time it reached every single person.Since the group is much larger, not everyone speaks to everyone, so there would be

no corrective action taken to keep the rumor in its original format

The growing demands of the public forced the software developers to automate

more and more tasks, which translates to new or improved functionality The

changing dynamic of the project team itself results in poor communication Now,let’s throw in new technological paradigms, like Internet-based software, and the

Trang 34

faster release cycles that society demands and we have a potential mess on ourhands The result of all this is software that has too many bugs in it or that does notfunction as requested So, how do we manage all of this? We control this chaosthrough the proper use and application of SCM.

SCM Concepts and Functions

Many people in the world think they really understand what SCM is and what pose it serves Of course, a very high percentage of people are totally wrong I havebeen in numerous organizations, both large and small, implementing SCM

pur-Following, I have listed some of the statements or thoughts I have come acrossfrom those that claim to know all about SCM

• SCM can be done by a developer or the development team lead

• SCM gets in the way of productive work

• I don’t need SCM because I know exactly what is to be developed

• Our software never has bugs in it when we release it

• All we need is version control because that is what SCM is all about

If you know anything about SCM, then you are probably laughing at the previousstatements because you have heard these comments before or because they are sim-ply that ridiculous

First of all, I have to point out that SCM is a discipline! Just like software ment is a discipline and testing is a discipline Unless you have been trained orhave experience in this discipline, you are not qualified to create, manage, orenforce it As a discipline, SCM has a set of rules that applies to the project based

develop-on the SCM analysis work that has been performed That’s right! There is an sis phase in the SCM discipline How do you expect to create, manage, and enforcethe rules if you do not have a solid understanding of why those rules need to exist?Second, SCM is more than simple version control of the project artifacts There is apiece of the puzzle called Change Control, which makes the previously mentionedthird bullet point sound absurd Does the development team fully expect to under-stand every detail of the application in the beginning? Do they not expect the origi-nal requirements of the application to change at all?

analy-Finally, SCM does not get in the way of productive work In fact, SCM enhances theability of the project to work productively and gives management an easy way to trackthe project’s progress and perform an audit any time it feels the need to do so WithSCM, the project manager does not have to hunt down the information or spend

Trang 35

long periods of time putting something together for those unplanned meetings.

Many of the SCM tools available today handle things like reporting with ease, but Iwill talk more about that later on in the chapter So, let’s talk about some of the basicconcepts of SCM, just so we are on the same page for the rest of the chapter

We have already established that SCM is a discipline, but what is the basic function

of the SCM organization? SCM identifies the configuration items and then ments their physical and functional characteristics The configuration items can bethings like documentation, source code modules, third-party software, data, and so

docu-on All of these items make up the software product At that point, SCM documentstheir physical characteristics, such as size, function, and libraries, as well as func-

tional characteristics, such as what each artifact’s purpose (or function) is and theirfeatures This is not a complete list, of course, but I think you will get the point

Once the functional and physical characteristics have been documented, it is time

to baseline the artifacts and control any changes to them Any changes to these facts must go through the established change control process that the Change

arti-Control Board (CCB) oversees for the duration of the project arti-Control is often taken as prevention The goal of SCM is not to prevent work from being done, butrather to control the work or changes made to project artifacts A typical processwould be that anyone that desires to change an artifact or a collection of artifactsmust submit a Change Request (CR) to the CCB for review This review is essential

mis-to controlling the changes made on the project because it prevents scope creep

and minimizes the impact to the schedule and budget

The CCB will approve, postpone, or reject the CR If the CR is approved, then it

will be assigned a project resource to be implemented for the next build and, tually, tested to ensure it was implemented properly and did not break any existingfunctionality If it is postponed, then it simply goes into a holding queue and will

even-be reviewed again at a later time If the CR is rejected, then it goes into another

queue with a justification as to why it was rejected This cycle would go on for theduration of the project Again, this is a simple example of a process and, as with

most processes, is not meant to work for every project It was merely an example toprovide you with some idea of what a process could entail However, it demon-

strates that there is a change control process that is documented and enforced forevery project Each CR is documented and tracked throughout its life cycle This is

an effective communication method and it ensures that:

1 Each person on the project is aware of proposed changes, the state of eachsuch request, and which build the requests are associated with, and

2 That the information is readily available to all project members at any time

Trang 36

Lastly, SCM is the point of verification for the product This means that the SCMorganization is responsible for ensuring that each release is consistent with therequirements and the design it is being developed from In short, SCM ensuresthat what was developed matches exactly with what was specified at the beginning

of the project by the customer And believe me, there is nothing more ing than doing a demo or presentation to your customer and having them tell youthat the system you are showing them is not the one they specified Not to mentionthe millions of dollars they paid you for the project or that you did not find outuntil the very end that you wasted your time and effort developing the wrongsystem

embarrass-Is SCM Important?

SCM plays a major role in the successful delivery of the product or system SCMcreates, controls, and enforces the rules necessary to be successful Changes aretracked and SCM performs audits at major (and sometimes minor) milestones toensure that the application is evolving according to the plan and design that hasbeen established Believe it or not, SCM saves money! With the proper implementa-tion of SCM, the proper tracking, reviewing, and auditing take place If these activi-ties were not in place, then the cost of communication breakdown, delivery of thewrong systems, and so on, would be great It is common knowledge that the longer

it takes to catch or identify any problems, the more it will cost For example, if aproblem with the requirements is identified in the requirements gathering phase,then the level of effort to correct the problem is small because you are still in thatphase and thus, an update to the requirement is made to fix the issue If the prob-lem is not discovered until after development has begun, then the problem ismuch larger because now it needs to be fixed in three different places at a mini-mum It has to be fixed in the source code (and any associated documentation),the design, and the requirement itself A manager of mine always says, “Why don’t

we have time to do it right, but we always have time to do it over?” This is in

response to requirement requests, design, or code reviews The response he alwaysreceived was that there was not enough time or that the schedule would not allowfor it I say that those projects have bad project managers and are already in seriousjeopardy The concern is how to explain to upper-management why the projectplan is longer than projected However, I would rather explain to upper-manage-ment that the project plan is longer because we want to do it right, rather thanhave to explain why my project is several million dollars over the projected budget!

In short, just know that SCM—in its simplest form—will save you time and money if

it is implemented properly And without it, you will continue the trends you are

Trang 37

familiar with currently—working long hours and weekends, missed deadlines, scopecreep, delivery of an incorrect system, projects that are way over budget and sched-ule, and other unexplainable events that no one ever seems to know what happened.

The Software Development

Life Cycle (SDLC)

The Software Development Life Cycle (SDLC) has been around for many, many

years! It is a well-defined process that has many success stories—but true success

comes only when SDLC is implemented properly SDLC is similar to SCM in that it

is made up of a set of rules in order to accomplish a goal, which, in this case, is todeliver a product The next two sections will talk about the various models and typi-cal phases of SDLC

Software Development Models

Over the years, SDLC has evolved to meet the needs of the industry and take

advantage of new and evolving technology New and improved technology has

forced the industry to constantly review and evaluate the effectiveness of the ing models to ensure they provide what is needed to be successful Every softwareproduct has a lifetime that starts in response to a need and evolves until it becomesobsolete Models implement certain phases for the life of the software and they alsodictate the order the phases are to be executed The standard phases are discussed

exist-in more detail exist-in the next subsection, so for now, let’s focus on the different types

of models

The Waterfall Model

The waterfall model is a linear approach to software development The phases thatone would implement in this model are done in a sequential fashion The next onecannot officially start until the current phase is completed

The waterfall model was accepted because of its ease-of-use and it was visually easy

to follow (especially for management- or business-type people)

Most humans function in some orderly fashion to the degree that they perform

one task and then another, but they only begin the next task after the current task

is complete This model also allowed management to plan to visibly determine

where each phase began and ended This model also uses the concept of “freezing”

Trang 38

artifacts For example, after the requirements phase is complete, you would

“freeze” the requirements so they would not change The same is true for thedesign After the design phase is complete, the design would be “frozen” so that itwould not change This is a good concept and it gave the project members the con-fidence that they were actually achieving their goals

It became apparent, however, that this model could only be used for certain types

of software development The software development process can be quite complexand the waterfall model cannot be used to represent the complexities very easily.Furthermore, this type of model did lend itself very well to risk management Bythis, I mean that problems were often found in the later phases when it was moreexpensive to correct them This is not to say that this is a bad model, but to simplypoint out that it has its purpose and its limitations These things should be

reviewed carefully for each project to determine if the model can be implemented

to the degree that it enhances the success of the project, not hinder that success

The Spiral Model

The spiral model differs from the waterfall method in that its beginning and endare not really visible Instead, this model gives the project members the feeling of anever-ending project because there was constant refinement and enhancement tothe software One of the key concepts of this model is the assessment of risk atestablished intervals The thought here is that because risks were identified, a cor-rective action could be taken to counteract those risks Another key concept is thereview before proceeding to the next cycle in the spiral This also allowed projectmanagement to assess the “lessons learned,” so that corrective action could betaken in the next cycle to improve anything that did not work in the last cycle Thismodel is also good for modular development and is viewed as a transformation of

an application into a production system, but again, the downfall is that projectmembers did not really view an end to a project that implemented this model

The Iterative Model

This is the model I use most often at my company However, I promise to remainobjective in my description of this model The Iterative Model’s key concept is thatevery phase is implemented in each iteration Better yet, this model lends itself toincremental development of a system I find that this works well for my game devel-opment projects because I can develop a set of requirements based on a piece ofthe design, and test it until that functionality is working according to the specs Ican then repeat this process until I have the finished product of a market-ready

Trang 39

game For example, in iteration 1, I can construct the entire game world and makesure everything looks as expected In iteration 2, I can create the player and othercreatures to make the world come alive This process would continue until the

entire game is developed

This model takes the best of the waterfall and spiral models and allows for risk

identification and corrective action to be taken during and prior to the next tion However, it also offers clear and well-defined beginnings and endings to eachiteration, as well as the project as a whole What more can you ask of a model?

itera-The Other Models

No discussion would be complete without at least mentioning some of the other

models being used in the industry Who am I to break tradition?

The Prototype Model is an approach that gives the developer and end user a

graphical method of communication Based on initial conversations, the ment team will construct a prototype and present that to the end user The end

develop-user can then evaluate the prototype and make the necessary requests for changes.The prototype will evolve from this process until it is finished and represents the

needs of the end user

The Operation Model is based on algorithms rather than implementation To cessfully implement this model, it is extremely important that the specifications beaccurately captured because the specifications have to be executable once they arecomplete If you have not heard of this model, then you probably do not spend toomuch time using CASE tools This model thrives on its ability to develop systems

suc-for different environments The downside is accurately capturing the specifications

so that the resulting system is the desired system

The Component Assembly Model is known for its ability to reduce software opment time This is because this model takes advantage of existing components,more commonly known as reusability The resulting system is made of componentseither from in-house libraries, third-party libraries, or existing systems

devel-Software Development Phases

Now that we have talked about the various software development models, it is time

to discuss the phases that each model uses I have to point out that this section usesthe typical phases on a project This section is not meant to state that all projectsuse each of these phases Some projects might combine some of these phases or

may not use some of the phases being discussed Again, this is meant to give you a

Trang 40

little bit of background so that you can understand what the weaknesses are andwhy SCM is needed So, without any further delays, let’s jump in and talk about thephases of the models.

The Project Startup Phase

The project startup aspect is often overlooked as a phase or is not counted as aphase I feel that this is an important phase because it is where the review of theproject takes place and it officially marks your effort as a funded project Duringthis phase, the project contracts are constructed and reviewed, the project mem-bers are recruited, and a project plan is constructed Other activities are the for-malization of project standards and templates for documentation The purpose forcounting this as a phase is because this is where SCM should come into the projectpicture SCM has to be involved from this point forward if the project wants to have

a high-level of confidence of the SCM implementation It is so sad that this is not

an accepted fact because rarely is SCM in the picture at this point of the project.The perception of many people is that SCM gets involved right before the develop-ment of the software begins But think about it; SCM has to begin in this phasebecause key decisions are being made here Decisions regarding the direction ofthe project, the standards that will be enforced, and the templates that will gounder version control all appear in this phase There are already artifacts that need

to be identified (i.e., configuration identification) and tracked And because thoseartifacts need to be identified and tracked, they need an environment setup so thatthey can be tracked This is also where the SCM plan comes into play The SCMplan is constructed by the SCM group to capture some of the initial informationthat will become vital to the success of the project So as you can see, if SCM is notinvolved in this phase, then the group is already behind Another point to be madehere is that key project members begin to meet and make decisions for the project.These individuals may not know it yet, but they will evolve into the Configuration/Change Control Board (CCB)

The Requirements Phase

This is the phase where the work that will be done is defined—meaning the ness analysts will meet with the end users The interaction between the end usersand the business analysts will evolve in one of two ways If the resulting application

busi-is created from scratch, then the interaction busi-is that of requirements gathering Ifthere is an existing system that requires enhancements or new features, then theinteraction begins with understanding the existing system and then capturing therequirements of the new and improved system Some industry veterans classify this

Ngày đăng: 23/10/2019, 16:43

TỪ KHÓA LIÊN QUAN