.NET Game Programming with DirectX 9.0
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Back CoverPresented in easy-to-understand language, .NET Game Programming with DirectX 9.0 is a must-have title for thosewho want to create out-of-the-ordinary but simple games, but have never had the time to expend reading hard-core game developers books. Lobao and Hatton show how easy it can be to produce interesting multimedia gamesusing Managed DirectX 9.0 and programming with Visual Basic .NET on Everett, the latest version of Microsoft'sVisual Studio. Although their focus is on simplicity, the authors are able to explore all basic concepts withinManaged DirectX 9.0: Direct3D, DirectSound, DirectMusic (using the COM interface), DirectInput (including force-feedback joysticks), DirectShow, and DirectPlay. There are also chapters covering other technologies that can beused for game programming: the Speech API to generate game characters' voices, multithreading, and GDI+ forsimple games. A bonus chapter shows how to port a simple game to Pocket PC. Sample games are presented overtwo chapters throughout the book. The first chapter presents the game with simple features, and the secondchapter extends the game while presenting new concepts. A library of game programming helper classes is alsocreated, step-by-step, in each chapter.
About the Authors
Alexandre Santos Lobo has been a non-professional game developer since 1981, when he got his first computer at12 years of age. He received a bachelor's degree in Computer Science in 1991, from the University of Braslia. Whenhe was attending the University, he helped to develop a graphics program and a computer graphics language(LAFITH - Hierarchical Animation Language for Three-dimensional Figures), which organizes objects in ahierarchical way and calculates the results of forces over the objects, giving them velocity and acceleration. Thislanguage was presented in many Brazilian conferences, and at the international conference, Compugraphics, inSesimbra, in 1991.In 2000, he published his first book, The Box of Pandora and Other Stories , with short stories.Although he has written many technical articles, this is his first technical book.
Ellen Hatton is currently completing a computer science degree at Edinburgh University. She was exposed tocomputers at a very early age and has been fascinated with them ever since. Her first experience of computergames was playing Dread Dragon Doom, at which she quickly excelled, at the age of 5. She's been hooked ongames ever since.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
.NET Game Programming with DirectX 9.0ALEXANDRE SANTOS LOBO ANDELLEN HATTON
Copyright 2003 by Alexandre Santos Lobo and Ellen Hatton
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,electronic or mechanical, including photocopying, recording, or by any information storage or retrievalsystem, without the prior written permission of the copyright owner and the publisher.ISBN (pbk): 1-59059-051-1
Printed and bound in the United States of America 12345678910
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrenceof a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademarkowner, with no intention of infringement of the trademark.
Technical Reviewer: David Jung
Editorial Directors: Dan Appleman, Gary Cornell, Simon Hayes, Karen Watterson, John Zukowski
Managing Editor: Grace Wong
Project Manager: Sofia Marchant
Copy Editor: Ami Knox
Production Manager: Kari Brooks
Compositor: Diana Van Winkle, Van Winkle Design Group
Artist and Cover Designer: Kurt Krames
Indexer: Lynn Armstrong
Manufacturing Manager: Tom Debolski
Distributed to the book trade in the United States by Springer-Verlag New York, Inc., 175 Fifth Avenue,New York, NY, 10010 and outside the United States by Springer-Verlag GmbH & Co. KG, Tiergartenstr.17, 69112 Heidelberg, Germany.
In the United States, phone 1-800-SPRINGER, email , or visithttp://www.springer-ny.com.
Outside the United States, fax +49 6221 345229, email , or visithttp://www.springer.de.
For information on translations, please contact Apress directly at 2560 9th Street, Suite 219, Berkeley, CA94710.
Phone 510-549-5930, fax: 510-549-5939, email , or visithttp://www.apress.com.
The information in this book is distributed on an "as is" basis, without warranty. Although every precautionhas been taken in the preparation of this work, neither the author nor Apress shall have any liability to anyperson or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
the information contained in this work.
To the funniest game of all: Real Life And to its Great and Omnipotent Designer
About the Authors
Alexandre Santos Lobo got his first computer in 1981, when he was 12, and immediately started tocreate simple games in Basic. Since then, computers have evolved massively, and so has he. Graduatingwith a bachelor's degree in computer science in 1991, he founded that same year with six friends acompany that came to be known as a synonym for high-quality services in Brasilia, Brazil: HeptaInformtica.
Besides his excellent work in many software development areas, from financial to telecommunication, henever forgot his first passion, and has always worked as a nonprofessional game programmer. From 1997to 1999 he also worked at Virtually Real (http://www.vrealware.com), a virtual Australian amateurgame programming company founded by Craig Jardine.
At the end of 2000, Alexandre started searching for new horizons and, leaving the company he helped tocreate, entered Microsoft as a consultant. Looking at the new and extremely interesting possibilities offeredby the .NET Framework, he decided to take everything he's learned over the last decade and apply it tothis new development platform.
Ellen Hatton is a computer science undergraduate at Edinburgh University. She was exposed tocomputers at a very early age and has been fascinated with them ever since. Her first experience ofcomputer games was playing Dread Dragon Doom, at which she quickly excelled at the age of 5. She'sbeen hooked on games ever since.
Ellen is not only interested in computers. She skis frequently, amongst other sports, and enjoys generalstudent l ife in the bustling Scottish capital, Edinburgh.
As her choice of degree suggests, Ellen stil l finds computers very interesting and is constantly looking fornew challenges. This book is the latest.
About the Technical Reviewer
David Jung has over ten years' programming experience with leading organizations such as MullinConsulting, Johnson & Johnson, City of Hope National Medical Center, Moss Software, ARCO Products,and Ernst & Young. He has specialized in distributed application and data warehousing solutions over theInternet and intranets using Visual Basic, C#, and other Internet technology.
Mr. Jung has coauthored an extensive array of books and articles on programming and debugging VisualBasic, Microsoft Outlook, Java, and other Internet solutions that have been published internationally. Hefrequently is a speaker at seminars and user groups discussing how Visual Basic, Java, C#, and Internettechnology can be integrated into business solutions. He has published several Microsoft Windows utilityprograms that help track down and eliminate system crashes as well as help prevent script-based virusesfrom spreading on Windows-based computers. Two of his programs, DLL Checker and VBS Defender,were reviewed by PC World and were given an Editor's Choice award, and have been sold to users allover the world.
Acknowledgments
Alexandre Lobo
To Kentaro Takahashi, the guy who helped me take my first steps in the computer graphics world, back atuniversity about 15 years ago, and helped me with all my previously published works in this area. I thinkthis is a late acknowledgement, but better late than never!
To Homero Picollo, the best teacher at my university, who guided me through these first steps.
To Craig Jardine, Jonty Bell, and all the guys from Virtually Real, who believed in my work even before
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
they had seen it!
To Evali Gamarra and Keniston Rodrigues, who helped me take my first steps with DirectX.
To Peter Blackburn, who believed in my dream, and to all the Apress guys who helped me to make itcome true.
To Tom Miller, the development leader from the Microsoft's Managed DirectX team, who always had theright answer for me, and great patience.
To Phillip Taylor, the managed DirectX program manager, and to all members of the Managed DirectXSIG, who always supported me when I needed.
To Igor Ripoll, who gave me invaluable logistics help, which made this book possible.
To Igor Sinkovec and Waldivar Cesar, who helped me with their great graphics skills.
To Bruce Shelley, Paul Sullivan, Geoff Howland, and Sarbasst Hassanpour, who kindly gave mepermission to publish their own vision about game creation as appendices in the book.
To Ellen Hatton, who helped me by translating my barely legible drafts to real chapters, and to DavidJung, who reviewed all the code and increased the book's quality as much as possible.
To everyone who helped me in any way to create this book (so if you are not mentioned before, feel free toinclude your name here!).
And, most of all, to my family, who supported me even when I was stealing time from them to write thisbook.
Thanks to all of you.
Or, in good and loud Portuguese, "Muito Obrigado!!"
Ellen Hatton
I also have a few acknowledgements to make:
To Alexandre for being the most understanding and talented person I've ever had the pleasure to workwith. It was your ideas that made this booknot anyone else's. It's been fun working with you.
To Peter Blackburn, you've been a constant source of support. You were the person who introduced me tothis project, for which I am eternally grateful.
There are too many people to thank you all individually, but you know who you are so thanks foreverything. From a cup of tea to a friendly chatit all helped.
Also thanks to my family for getting me here in the first place and always encouraging me and my crazyideas.
Thanks again.
Credits
Figure 4-5, page 217: Sid Meier's Civilization, Civilization, and Civ are U.S. registered trademarks. SidMeier's Civilization courtesy of Infogrames Interactive 2002 Infogrames Interactive, Inc. All RightsReserved. Used With Permission.
Figure 6-2, page 350: Leisure Suit Larry is a trademark of Sierra Entertainment, Inc., and is used withpermission.
Figures 6-3, 6-4, and 6-5, pages 351352: Sam & Max Hit the Road and The Secret of Monkey Island 2003 LucasArts Entertainment Company LLC & or as indicated. All rights reserved. Used under
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
authorization. LucasArts and the LucasArts logo are registered trademarks of Lucasfilm Ltd.
Figures A-1 and A-2, page 597: American McGee's Alice Software 2000 Electronic Arts Inc. All rightsreserved. Portions 2000 Rogue Entertainment, Inc. All rights reserved. This product contains softwaretechnology licensed from Id Software, Inc. Id Technology 2000 Id Software, Inc. All rights reserved.Electronic Arts, the Electronic Arts logo and American McGee's Alice are trademarks or registeredtrademarks of Electronic Arts Inc. in the U.S. and/or other countries. The Rogue Entertainment logo is atrademark of Rogue Entertainment, Inc.
Figure A-3, page 600: Quake is a trademark of Id Software.
Figure A-4, page 600: Unreal Tournament 19992001 Epic Games Inc. Created by Epic Games, Inc. incollaboration with Digital Extremes. Unreal and the Unreal logos are trademarks of Epic Games, Inc. Allrights reserved. All other trademarks are the property of their respective companies.
Figures A-5 and A-6, pages 602603: Clive Barker's Undying 2000 Electronic Arts Inc. Undying, EAGAMES and the EA GAMES logo are trademarks or registered of Electronic Arts Inc. in the U.S. and/orother countries. All rights reserved. EA GAMES is an Electronic Arts brand.
Figure C-1, page 617: Quake is a trademark of Id Software.
Figure C-3, page 621: PAC-MAN 1980 Namco Ltd., All Rights Reserved. Courtesy of Namco HoldingCorp.
Figure C-4, page 623: GALAGA 1980 Namco Ltd., All Rights Reserved. Courtesy of Namco HoldingCorp.
Figure C-5, page 624: GAUNTLET DARK LEGACY 19982000 Midway Games West Inc.GAUNTLET DARK LEGACY is a trademark of Midway Games West Inc.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
ForewordEver since I built my first S100 Z80 PC kit, I was hooked. That was 1975. Twenty-eight years later, I stillhave very little life away from my "babies"my array of systems. I use them to work, to write, to explorethe outside world, and to play. I've written games and reviewed games, but mostly I've played games of allkinds. I've played Adventure, Hammurabi, and air traffic control simulators on the Z80with 48KB of RAM.More recently, I've had to attend 12-step meetings to get over my addiction to Ages. Age of Mythology ismy latest obsession. I only wish I had the source. It seems to have a pretty nasty memory/resource leak.
When I heard that Alexandre and Ellen were writing a book on gaming, I jumped at the chance to take anearly look. When I heard that the book focused on Visual Basic, I was convinced that I wanted to read it(and got cajoled into writing this foreword). It's been a long road for BASIC. I used (the other) Bil l's BASICon my Z80 system and even wrote CP/M systems software using the BASIC-80 compiler in the early1980s. BASIC has always been seen as a fun little language to write simple "toy" applicationssomethinglike the "Easy-Bake Oven" language with a small l ightbulb for heat. Visual Basic 1.0 changed a lot ofminds, but Visual Basic 5.0 and its "real" compiler changed a lot more. Visual Basic .NET (which I fondlycall "Visual Fred" due to its lack of similarity to any previous version of Visual Basic) is a deadly seriousfull-featured development tool. It's suitable for authoring virtually anything. No, I would not write a devicedriver with Visual Basic .NET, but I'll bet you could. It's a great choice for serious developers because it'sso easy to learn and use. For MBASIC-80 developers, it will be somewhat of a challenge to learn, but forVisual Basic folks, it will take no time at all to come back up to speed (so to speak).
DirectX (in my opinion) is the new de facto "Windows" interface of the gaming industry. In the early days,no computer would sell (no matter how technically superior it was) if it didn't run Lotus 1-2-3. That'sbecause the application software was so closely tied to the hardware. When an application shipped in theDOS world, it had to have drivers for your printer or you couldn't print and drivers for your video card or youcouldn't run the application at all. In those days, game companies got in bed with the video cardcompanies and wrote straight to their newest hardware. There was only a slim chance a game would workwith some other card. Windows changed some of that. It standardized video management, printing,memory management, and more to help application developers write just applications and leave all of thehardware worries to Microsoft and device driver developers. The game folks found that Windows simplygot in the way; it wasn't nearly fast enough for anything except solitaireand that was sluggish. WhenDirectX arrived, a new dawn appeared for the game developers. Now they had a much faster and genericway to write to the hardware and not worry (so much) about performance. Now (nine versions later)DirectX games are pervasive. They're fast, fun, easy to install (and uninstall), and easy to write, maintain,and support.
As far as the technical content of the book, in case you're wondering, I took an extra close look at Chapter6 where Alexandre and Ellen touch on ADO.NET. I think their approach to data access is fine. It's not thattough when you don't have to worry about more than a single user and more than a few thousand rows,but they don't lead you astray.
Okay. I don't make a living writing games. I'm not that smart, and I couldn't talk my spouse into doingsomething that's challenging and fun but would not return me enough to buy groceries. My focus is VisualBasic, data access, and SQL Server. I l ike playing games, but I would like so much more to be able towrite my own. I expect the easy-to-read tutorial style that Alexandre and Ellen use will make that very easyfor both of usamateur and pro alike.
Enjoy.
William R. VaughnMicrosoft MVP and author of ADO.NET and ADOExamples and Best Practices for VB Programmers, Second EditionPresident, Beta V Corporation (http://www.betav.com)Redmond, Washington
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
PrefaceThis book is intended to fill a gap that exists in books about game programming: Some are too basic, andsome are too advanced, so intermediate programmers who want to create something new can't findanything to meet their needs.
The main idea of this book is this: If you can do it the easy way, do it the easy way. Of course, we exploresome very advanced concepts, like voice generation and recognition, multiplayer games, and the basics of3-D game creation. However, we always look for the simplest way to do something. And if there's no easyway, then we just create some basic classes that do the dirty work, and create everything else over theseclasses.
The whole book is designed to be read in a continuous way. In Chapter 1, we start by creating a verysimple game while presenting the basics of collision detection. Chapter 2 shows how to build a new game,using the concepts presented in Chapter 1 and adding new explanations and examples about artificialintelligence in games.
In the following chapters, we continue to build new games and explore new topics relating to gameprogramming, such as the basics of sprite creation, scroll ing games, adventure games, multiplayerfeatures, voice generation, porting a game to Pocket PC, and much more. We start with the basics andincrease the complexity as we go along, so that by the time you come to the advanced topics, you have allthe background you need to gain the most from them.
But there's one more thing that makes this book unique: our discussion about several nonprogrammingtopics related to game creationfor example, how to design good character movement, the history ofadventure games, and how to create an adventure game from a basic storyline.
We don't restrict ourselves to showing only advanced game programming techniques, like DirectX and theSpeech API. We teach you some simple tricks that don't require a lot of expertise, like how to controlsimple dialog in adventure games, using data from a Microsoft Access database, or how to create anonrectangular window to add some extra spice to a game's screens.
Although we don't explore all the details about managed DirectX 9.0, this book is a very good starting pointfor Managed DirectX 9.0 programming because we delve into the basics of every DirectXcomponentDirect3D, DirectSound, DirectMusic, DirectPlay, DirectInput, and DirectShowcreatingreusable classes that will make it easier to use each of these components.
We also discuss other programming topics apart from DirectX, including ADO.NET, Speech API for voicegeneration, GDI+ for creating simple games, programming for Pocket PCs with the .NET CompactFramework, and creating multithreading games. Since we show you how to create a set of reusableclasses throughout the book, after finishing the book you'll be able to create your own games much moreeasily by simply sticking these classes together.
This book is also a good starting point for those who want to understand the basics of .NET programming,but it is NOT intended to teach .NET programming on its own. Of course, we talk about many important.NET concepts, and every new concept in Visual Basic .NET programming is explained, but it's not our aimto write an exhaustive explanation of all that VB .NET has to offer.
Nor is this book intended to provide a route to the professional game programming world, since we do notgo deep enough into some essential aspects professional game developers need to know. However, youcan think of this book as a first step into this world, since we do provide insights into important conceptssuch as the need to create a good game project and organizing the game's team, as well as appendixeswritten by professionals from the game industry that serve as guides to game creation.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Introduction.NETA Whole New Game HorizonFor those who have been inside a cave for the last 2 years, .NET is Microsoft's new paradigm for creatingthe next generation of Internet programs, allowing any site on the Web to offer and use services, andjoining the efforts from programmers around the world to make things better.
But .NET is much more. You can create stand-alone programs with it (as we'l l see in this book), and youcan create programs targeted at many different platforms. For example, if your program runs in a browser,it'll appear using the full functionality offered by the browser. If instead it is running on a mobile device,such as a handheld computer, it'll use only the functionality offered by that device. We can expect to see.NET support for many new devices using different user interfaces (like voice recognition) to show up inthe next few years.
In short, we can say that .NET is the next big step in home computing. First, the PC became a standard forhome and office computers. Then we saw Windows offering the new standard for programmers andusers, with a graphical interface and the mouse as a new input device. Now, we have an open door tomany new devices and user interfaces, and, most importantly, interaction between programs, allowingprogrammers to build over previously created services and give the end user more sophisticated servicesevery time, with less programming and higher quality.
Of course, the .NET Framework is still taking its first steps, but it's already worth a closer look for anyoneseriously interested in programming in general, particularly game programming.
Why Use .NET?Certainly there are many good reasons to use .NET besides the fact that it's a new programmingparadigm that will probably take on the world in the next few years. Let's just review some of them:
.NET is multiplatform: Although Java had promised this before, and sadly didn't make it, .NET had abigger industrial commitment, not only by Microsoft and its partners, even before the launch of thefinal version of Visual Studio. One example: There are many initiatives to make a .NET JIT (just-in-time) compiler in Linux and other operating systems. Oh, yes, and there's another advantage overJava when running on a Web site: The .NET programs are just-in-time compiled before they run, andthat means that they run in machine-native code (not interpreted), which makes for betterperformance. Another interesting point is that the compiled program is stored in memory, so the nextexecutions don't have to pass to the compiler unless the computer is turned off or needs to free thememory used by the program.
.NET is NOT just a new programming environment: It's a whole new framework of applicationsand services, many of them already released by Microsoft, and many others to come from Microsoftand other companies.
.NET is service based: There are many servers that expose special features that we can use, andthere are a huge collection of services coming from Microsoft and many other companies. What doesthis mean for game developers? For example, do you want to make your game speak, or understandwhat the player says? Do you need to add multiplayer features? Do you want to create a 3-D texture-mapped environment? Well, some services already do all of this and more. Why code again andagain if someone has already done it?
.NET is multilingual: You can write your .NET program in any language supported by the VisualStudio environmentright now, that means Visual Basic, Visual C#, Visual C++, FORTRAN, Visual
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
J#, and COBOL, among others. Microsoft created a single and open environment to run it all, so youcan write your programs in any language in the same programming console. Other languages arealready being developed by other companies: APL, Pascal, Eiffel, Haskell, ML, Oberon, Perl, Python,Scheme, Smalltalk. Just choose the one you like best, or create your own!
Of course, many other reasons exist for using .NET, like the extensive XML support or the enhanced dataaccess features. When you start coding with Visual Studio, you'l l see a lot more: The environment is evencleverer than previous versions, and helps the programmer a lot. It makes game creation a real pleasure,because you can concentrate on what you want your game to do, not how to make it.
Why Use Visual Basic?Until Visual Basic 4.0, the code generated by the compiler was in fact a pseudocode, interpreted by aspecial DLL at execution time. The performance for some tasks was very poor, but we could already makesome simple games on it, if the graphics weren't very demanding.
In Visual Basic 5.0, Microsoft brought in part of the Visual C++ development team to create a native-codecompiler. The performance increase was astonishing: We could see some benchmarks for floating-pointcalculations where the VB code performance was almost the same as VC++, but the graphical operationswere stil l much slower than in C++.
In Visual Basic 6.0, all the internal routines for drawing controls on screen and many of the features wererefactored to aim for better performance. With this version, we could already create somewhatsophisticated games using COM interfaces to access DirectX features.
Now, we have Visual Studio .NET. As we saw before, Visual Studio .NET is a multilanguage environment,which means, besides other things, that all languages share the same compiler. Therefore, there'll be alittle difference, if any at all, in the performance of this compiler for each language.
It's interesting to consider an interview with one of the Doom creators that appeared in a games magazinesome years ago. When it was released, Doom was simply the best game ever from the technical point ofview of creating a 3-D texture-mapped environment. And this guy basically said that Doom was proof to allassembly "pin-heads" that everything didn't have to be coded in assembly in order to achieve the bestperformance, because the game had just two assembly routines: one that drew a point on screen, andone that drew a line. Everything else was written in C.
Time has passed. When the first reviewers looked at this book, they told me, "Game programming inVisual Basic? Using .NET Framework? Are you sure?" They thought Visual Basic performance could be areal problem, and that .NET Framework was designed only to create Web services. But they were wrong.
Just look at games like the X-COM series, or the SIMCity series. We don't see anything that we can't do inVisual Basic. They aren't graphically intensive games. For fast-action shooters l ike Quake, we confess thatVisual Basic won't be the best choice for programming for a while. But for other sophisticated games, ifyou can do them with a simple language like VB, why use assembly or C? Just think about the simplicity ofcoding and debugging, and you'll see there's no other choice. Even some hardcore C++ programmersgave us very good feedback about this book, telling us how they were astonished with the ease of creatinggames in Visual Basic that still have acceptable performance.
But you don't have to just take our word for it. Just read the rest of the book, and you'll see for yourself.
A Game Starts with a Good IdeaAlthough the games released nowadays are more and more graphics intensive, the main point in a gameis sometimes forgotten: the playability.
We see games with breathtaking graphics, amazing cut-scenes, and 3-D worlds to make your eyes popout, but many of them are really annoying to play. Even when a game's responsiveness is okay,sometimes the gameplay isn't clear or isn't fair.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
What about playing an old Pac-Man? With all these gorgeous games around, Pac-Man and the earl ierversions of Mario Brothers on Nintendo are still successes with kids.
We aren't here to tell you to forget everything and get back to basics. Instead, remember that a goodgame always starts with a good idea, and sometimes that's enough.
One of the most cloned games ever, Tetris, was designed by a single man, a Russian programmer. It'sstil l interesting to play after all these years, and, of course, we have a Tetris clone here tooour version ofa "Hello World" program in the first chapter.
You could say that Tetris is one in a mil lion, and we'd agree. But if you were to say that creating a goodgame by yourself is only possible if it's as simple as Tetris, then we'd have to disagree. Older guys willremember Another World, a game that has a sequel called FlashBack. The game had very good graphicsand sound for its time, with very nice character animation and various cut-scenes that completed the gamestory by showing the characters and a fantastic world from many different points of view. Well, a singleperson, a French programmer, designed this game.
Today we can see many sites on the Web with games from amateur game programmers. Some of themare really good, with high-quality graphics and sound; and, most important of al l, almost all are veryplayable too, maybe because they were designed by people who love to create and play games but don'thave the urge to make money.
In this book, we'l l see many tips and tricks that will help anyone to design his or her own games alone.However, if you can count on someone to help you, do.
After all, there's more to a game than just a good idea. ...
A Game Is More Than Just a Good IdeaAlthough a game must start with a good idea, there is a lot more to the game programming world than ourhumble minds can imagine. Let's look at some points we must keep in mind when we start our gameproject:
Music: Although we can always make a game using only bleeps and bloops, good background musicand nice sound effects for game actions (shooting, dying, earning bonus points, etc.) do make ourgames better. Even if we don't plan to have a music expert on our staff, we can't forget that it'll take alot of time to look for music with the correct ambiance and the best sound effects among the millionswe'll find on the Internet or in CD libraries.
Drawing: It's not good practice to use graphics ripped off from someone else's game, because ourgame will lack originality and we can also be prosecuted. Since not everyone can draw anything betterthan a square house and a smiley sun, we'll want a good artist (or several of them) on our gameteam.
Colors: Coloring things on the computer is very different from coloring it on paper. If our artists can'tcolor using a graphics tool, we'll need someone who can.
Animation: Creating animated graphics is slightly different from creating static ones. Almost everyonecan draw a nice tree, for example, but to draw a walking man or a flying bird demands someone withanimation experience. Even when our games don't use animated sprites, don't forget that we mayneed an animated introduction or cut-scenes.
Code: Well, without this one we would be reading a board game book.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Level design: The level designers are the ones who'll always be working to ensure optimumgameplay and the most enjoyable playing experience for players.
Quality assurance: If we can't afford to have a very good quality assurance team, we're better off notbothering to make games. A buggy game is by far the worst thing that can happen in a gamecompany's profile.
Project management: Working with many people with different skil ls and personalities requires anorganized way to get the best from each of them. Even when we are working alone, we mustn'tunderestimate the importance of a good project: If we don't set some milestones to control ourproject, we may work on it forever and never see any good results. It's far beyond the scope of thisbook to teach you how to manage a project, but we strongly suggest you take a look at some stuff onthis topic, if you've never had the opportunity of working with an organized team.
Etc.: There'll be lots more too, but in general we must be ready to deal with any new and unexpectedproblems.
The task of creating a commercial game nowadays is anything but simple. The time when the "lone wolf"programmer could create a new hit and even get rich with it is most certainly over. Nevertheless, let's keepone thing in mind: This book is for those who love game design, who will be happy with making games justto have the pleasure of seeing people enjoy their ideas. If you want to make professional games, or if youwant to learn DirectX or .NET, this book is a really good starting point, but there's a lot more you need tostudy before entering the game industry.
As we have seen, it takes a lot of hard work and coordinated effort to make a blockbuster gamenowadays, but don't be scared off by the size of the mountain we are about to climb. Remember: Maybeyour game will be the next Pac-Man, Tetris, or Flight Simulator.
Just keep in mind one thing: A game starts with a good idea!
How to Read This BookThis book aims to be a practical guide for game programming, and to get the most out of it, we suggestthat you start each chapter by running the chapter's sample game from the CD-ROM that comes with thisbook. Open the project in Visual Studio .NET, and compile and run it. Play for a while, looking at thedetails of the game, so that when you start reading each chapter you'll know what the chapter is about.
To make it easier to understand the main concepts in each chapter, we have divided the chapters into fivemain sections. Next we'll describe the parts of each chapter.
Introduction and Technical Background
At the beginning of each chapter, we have a little introduction that presents the chapter's sample gameand the ideas we'll explore in the chapter, and one or more sections presenting specific information aboutthe technical background needed for the chapter's sample game.
For example, in Chapter 4, we introduce DirectInput and create a scroll ing game, so we have sectionsdescribing what DirectInput is and how to create reusable classes to include DirectInput features, plussections describing the ideas behind creating a scrolling game, and technical tips to follow when creatingsuch a game.
The Game Proposal
In a commercial game, the game proposal is the document we'll show to everyone, even discuss with ourkids, to achieve a clear understanding about what the game will really be. If everyone agrees that it'l l be agreat game, then we advance to the next step. If not, then we'll improve it until we reach the desired result.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
In this book, we are working with very simplified game proposals that deal with the minimum amount ofinformation needed for a clear understanding of the sample game. A real game proposal follows the basicrules of creating ordinary projects, showing the details gathered in the early analysis and user interviews.
The Game Project
While the game proposal tells us how the game will work, including artificial intel ligence, user interaction,and graphical styling, in a language that anyone can understand (especially the sponsor who is paying thegame development team), the game project document includes the technical mumbo-jumbo that willguide the developing team through the code phase. Again, in this book we'l l deal with very simplified gameprojects, because even with the simplest games we must have a project.
The Coding Phase
This is where we'll show the main parts of the code, including highlights of what is new in the .NET world.Instead of showing pages and pages of code, we'll show only the essential parts that are instrumental inthe understanding of the game mechanics, along with explanations about each code l isting. The full codeis on the accompanying CD-ROM.
Final Touches
When a game is being developed, lots of people have ideas. Some of these ideas are very practical andeasy to implement, and others are not so. The team must decide if an idea wil l be implemented in a futureversion of the game or if implementation of that idea is worth a delay in the schedule in order to achieve abetter game.
In each chapter, we have included some of these ideas in the "Adding the Final Touches" section; and likein real-l ife games, some of the ideas are implemented, and others are just suggestions for you to try andfurther improve the game on your own.
Summary
In the last part of each chapter, we'll look back at what we have discussed to help you check if you haveunderstood the chapter's main concepts, or if you need to go back and reread something.
In the next section, we'll preview the sample games and the main ideas covered in each of the chapters.
Book and CD-ROM ContentsIn this book, we'l l create five different games spanning nine chapters and a bonus chapter at the end.
Each game will have two versions, developed in two different chapters. For example, the first version ofour little adventure game, Magic KindergarteN., will be created in Chapter 6, which will explore DirectShowand ADO.NET. A second version of this game is featured in Chapter 7, where we'll include voicegeneration by using the Speech API.
There are a couple exceptions. In Chapter 9, we'll create a very simple game without including a secondversion in this book. Chapter 3 is dedicated to introducing DirectX and Direct3D, presenting someuncomplicated samples to make the explanations clearer.
As for the book's CD-ROM, it is organized in a manner that matches the book's organization: It has onedirectory per chapter that contains the chapter sample game. In the Chapter 8 directory we have twosamples, so there is a separate sub-directory for each of them. The CD-ROM programs were created andtested with DirectX 9.0 and Visual Studio 2003 (code-named Everett) Beta 1. There are some knownissues when running the games with Everett on reference rasterizers of laptops that will probably be fixedin the final versions. Any updates on the code will be available for download at the Apress site(http://www.apress.com). The complete DirectX 9.0 is also available in the CD-ROM, under theDirectX directory.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
In the next sections, we give a brief description of the contents of each chapter.
Chapter 1.Nettrix: GDI+ and Collision Detection
In the first chapter, we introduce the concept of collision detection in games, present simple algorithms tomanage the detection of collision between objects in a game, and introduce basic concepts about theGDI+, the new graphical l ibrary used by the .NET Framework to perform simple graphical operations.
In this chapter, we create a Tetris clone called .Nettrix to illustrate the use of these concepts.
Chapter 2.Netterpillars: Artificial Intelligence and Sprites
Here we examine the concept of object-oriented programming, along with a glossary of related terms. Wealso explain the idea of creating a library of game classes, which can be used in further gamedevelopments to improve the game quality and the game project schedule.
In this chapter, we also provide a brief introduction to artificial intelligence in games, presenting someclassical problems we need to deal with in our games along with some suggestions about how to solvethem.
The chapter's sample game, .Netterpillars, is a Snakes clone that explores the concepts presented in thechapter. Here we create the first reusable class of this booka GDI+-based sprite.
Chapter 3Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 3 presents Managed DirectX 9.0, exploring the Direct3D basics such as the use of matrixtransformations, transparent texturing, and colored lights. Here we also discuss how to decide whichgraphics library (DirectX or GDI+) to use depending on the game type.
In this chapter, we have no game, just a simple application in which we'll exercise each of this chapter'sconcepts.
Chapter 4River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
In Chapter 4, we discuss the creation of scrolling games, exploring the possibilities of scrolling effects andpresenting some technical tips on how to create such games. We also discuss the use of tiled game fieldsin games and demonstrate some tricks to help you create better tiles.
Using the Direct3D concepts presented in Chapter 3, we create two new classes for our game library thatwill be used in almost all of the later chapters: a Direct3D-based Sprite class and a Direct3D-basedGameEngine class.
We also explore the basics of DirectSound and DirectMusic, creating two extra classes that wil l help us toadd sound effects and background music to our games.
Using the classes and concepts discussed in this chapter, we create a River Raid clone called RiverPla.Net.
Chapter 5River Pla.Net II: DirectInput and Writing Text to Screen
Here we look at the basics of DirectInput, the DirectX library used to manage input devices, including howto use joystick force-feedback features and creating three simple classes for our library that control mice,keyboards, and joysticks. We also introduce the use of fonts in our games by creating a new class that wil lhelp us to write on screen.
With the newly created game classes, we improve the River Pla.Net game to include a status l ine andjoystick control and add new river obstacles that trigger the force-feedback features.
Chapter 6Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
In Chapter 6 we briefly trace the evolution of adventure games and provide tips for you to follow whencreating games of this genre.
We present the managed libraries that give us access to basic DirectShow features, which allow us to playstreaming media, like videos and MP3 files, and we create a class to help us play videos in our games.
We also give a very simple introduction to data access using ADO.NETjust enough to help you read thechapter's sample game data.
In this chapter, we il lustrate the concepts learned by creating a very simple adventure game with fivescreens, some action verbs, and a basic inventory control.
Chapter 7Magic KindergarteN. II: Animation Techniques and Speech API
Here we discuss animation techniques while presenting some samples and simple tricks that can helpimprove a game's animation.
We also introduce the Speech API, the application programming interface used for speech recognitionand generation, and create a simple game class that will allow us to include voice generation in ourgames.
Using the concepts presented in this chapter, we create a second version of the Magic KindergarteN.game, including dialogs between game characters and voice generation, with associated mouthanimations that are dynamically generated according to the sounds of speech.
Chapter 8.Netterpillars II: Multiplayer Games and DirectPlay
In Chapter 8, we discuss the challenges associated with creating a multiplayer game, and present a list oftips compiled from various game development teams. We look at DirectPlay, the DirectX library used toadd network support to our games, and include a new class in our library that can be used to addmultiplayer features to our games in an easy way.
Using the class we just created, we implement a second version of .Netterpillars, the game created inChapter 2.
Chapter 9D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Chapter 9 explores various concepts that can help add some extra spice to our games: the use ofmultithreading, the creation of nonrectangular windows, and access to nonmanaged code, like the oldWindows' APIs.
With these concepts, we create a very simple multithreaded game, called D-iNfEcT, which generates lotsof germs on your screen that must be caught before time is up. This chapter illustrates how to createaddictive games that can be easy and fun.
Bonus Chapter: Porting .Nettrix to Pocket PC
In this bonus chapter, we discuss the problems we face when porting games to different devices, andpresent the .NET Compact Framework.
Using these concepts, we create a second version of our Tetris clone by porting the sample game createdin Chapter 1 to run on a Pocket PC.
Appendixes
In order to give you a sense of what professional gamers think about game creation, we have included asappendixes articles from four professionals who already work in the game industry:
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
"The State of PC Gaming," by Paul Sullivan
"Motivations in Games," by Sarbasst Hassanpour
"How Do I Make Games?A Path to Game Development," by Geoff Howland
"Guidelines for Developing Successful Games," by Bruce Shelley
These guys kindly let us republish their articles, and we hope you enjoy them as much as we did.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Chapter 1: .Nettrix: GDI+ and Collision DetectionOverviewIn this chapter we examine the basic concepts of GDI+, the extended library for native graphic operationson Windows systems, and discuss one of the most important aspects of game development: the collisiondetection algorithms. Although game developers use GDI+ functions to draw images on screen, collisiondetection algorithms are responsible for making the drawings interact with each other, allowing a programto know when an image is over another one and to take the appropriate action, such as bouncing a ballwhen it hits a wall.
Figure 1-1: .Nettrix, this chapter's sample game
To accomplish these goals and illustrate these concepts, we'll be creating a game called .Nettrix. "HelloWorld" is always the first program that's written when learning a new programming language. Whenlearning to program games, Tetris is considered to be the best game to try first. In this simple game wecan see many basic concepts at workfor example, basic graphic routines, collision detection, andhandling user input.
To begin, we'l l look at the basic GDI+ concepts and examine the idea of coll ision detection algorithms, soyou'l l have the necessary technical background to code the sample game for this chapter.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Basic GDI+ ConceptsGDI+ is the new .NET SDK class-based application programming interface (API) for 2-D graphics,imaging, and typography.
With some substantial improvements over the old GDI, including better performance and the capacity torun even on a 64-bit system, GDI+ is worth a look. The new features in GDI+ are discussed in the followingsections.
Path GradientsPath gradients allow programs to fill 2-D shapes with gradients, with great flexibil ity, as shown in Figure 1-2.
Figure 1-2: Using path gradients
Alpha BlendingGDI+ works with ARGB colors, which means that each color is defined by a combination of red, green,and blue values, plus an alpha value relating to its degree of transparency. We can assign a transparencyvalue from 0 (totally transparent) to 255 (opaque). Values between these two make the colors partiallytransparent to different degrees, showing the background graphics, if any are present.
In Figure 1-3 we have a rectangle with different degrees of transparency; if we had an image below it, wecould see it, just like looking though glass.
Figure 1-3: Changing the alpha from 0 to 255 in a solid color bitmap
Cardinal SplinesCardinal splines allow the creation of smooth lines joining a given set of points, as shown in Figure 1-4.
Figure 1-4: Creating a smooth curve that joins points with a spline
As we can see, the spline curve has fixed starting and ending points (in Figure 1-4, the points marked 1and 4), and two extra points that will "attract" the curve, but won't pass through them (points 2 and 3).
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Applying Transformations to Objects Using a 33 MatrixApplying transformations (rotation, translation, or scale) is especially useful when dealing with a sequenceof transformations, as they speed up performance. A sample of some transformations is shown in Figure1-5.
Figure 1-5: Applying a rotation and scale transformation over a figure
AntialiasingAntialiasing is the smoothing of graphics, avoiding a stepped look when, for example, a bitmap is enlarged.An image exemplifying this is shown in Figure 1-6.
Figure 1-6: Applying antialiasing to an image
Note In this book, we'l l show examples of the first two new GDI+ features: path gradients in thischapter and alpha blending in the next. There are many code examples for the other GDI+features in the .NET Framework SDK.
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Performing Graphic Operations with a Graphics ObjectWhen using GDI+, the very first step always is to create a Graphics object, which will help us to performgraphics operations. The Graphics class provides methods for drawing in a specific device context.
There are four ways to attain the correct graphics object: with the e parameter received in the Paintevent, from a window handle, from an image, or from a specified handle to a device context. There's noreal difference among these different approaches; we'll use each one depending on our program needs.For example, if we are coding our drawing functions on the Paint event of the form, we'll use the eparameter; but if we are coding a class to draw on a form, we'll probably want to use a window handle tocreate the graphics object. We discuss each method in the sections that fol low.
Creating a Graphics Object with the e ParameterIn this case, all drawing code must be associated with the Paint event of the destination image object.The following code shows how to draw a simple red rectangle at the 10, 20 position (in pixels) on thescreen, 7 pixels high and 13 pixels long:
Private Sub PicSource_Paint(sender As Object, e As PaintEventArgs)_ Handles PicSource.Paint e.Graphics.FillRectangle(New SolidBrush(color.red), 10, 20, 13, 7)End Sub
NEWIN.NET
In these first few lines of code we can see many new features of .NET, as described here:
Every event handler in Visual Basic .NET receives at least one parameter, the sender object,which is the object that generates the event.
The event handler procedure is now associated with the object by the keyword Handles.There's no more implicit association using the procedure name, as occurred in the laterversions of Visual Basic.
The e parameter is of the type Windows.Forms.PaintEventArgs. Those with Visual Basicexperience will understand that we are dealing with an object hierarchy. In fact, everything in.NET languages is organized into managed units of code, called namespaces. In this case, weare using the System.Windows.Forms namespace, which contains classes for creatingWindows-based applications using the features of the Windows operating system. Inside thisnamespace, we are using the PaintEventArgs class, which basically gives the Paint eventaccess to the rectangle structure that needs to be updated (ClipRectangle property), andthe Graphics object used to update it.
The Graphics and SolidBrush classes are defined in the System.Drawing namespace.This namespace has several classes that provide all the functionality we need to work with 2-Ddrawings, imaging control, and typography. In the code sample, we create a SolidBrushobject with red color (using the color structure), to draw a filled rectangle using theFillRectangle method of the Graphics object.
In the .NET architecture, all objects are organized into hierarchies called namespaces.
Creating Graphics Objects from a Window HandleIn the code shown here, Graphics.FromHwnd is a shortcut for the System.Drawing.Graphics.FromHwnd method, which creates a Graphics object used to draw in a specific window orcontrol, given its handle. This code references a pictureBox control named picSource:
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Dim graph as Graphicsgraph = Graphics.FromHwnd(picSource.Handle)graph.FillRectangle(New SolidBrush(color.red), 10, 20, 13, 7)
NEW IN.NET
In .NET, there's no need to use the Set keyword when setting an object variable. If wewrite the second line as
Set graph = Graphics.FromHwnd(picSource.Handle)
the Visual Studio environment just erases the Set part for us. Pretty smart!
Creating Graphics Objects from an ImageThe FromImage method shown here creates a graphics object from the specified image:
Dim graph as Graphicsgraph = Graphics.FromImage(picSource.image)graph.FillRectangle(New SolidBrush(color.red), 10, 20, 13, 7)
Note that the previous code sample will work only if we have a valid bitmap image loaded on thepictureBox control. If we try to execute it against an empty picture box or using a picture box with anindexed pixel format image loaded (such as a JPEG image), we'll get an error and the graphics objectwon't be created.
Creating a Graphics Object from a Specified Handle to a DeviceContextSimilar to the previously mentioned methods, the Graphics.FromHDC method creates a Graphicsobject that allows the program to draw over a specific device context, given its handle. We can acquire thedevice handle from another Graphics object, using the GetHdc method, as shown in the next codesnippet:
Public Sub FromHdc(e As PaintEventArgs) ' Get handle to device context. Dim hdc As IntPtr = e.Graphics.GetHdc() ' Create new graphics object using handle to device context. Dim newGraphics As Graphics = Graphics.FromHdc(hdc) newGraphics. FillRectangle(New SolidBrush(color.red), 10, 20, 13, 7) ' Release handle to device context. e.Graphics.ReleaseHdc(hdc)End Sub
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 - .Nettrix: GDI+ and Collision Detection
Chapter 2 - .Netterpillars: Artificial Intelligence and Sprites
Chapter 3 - Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
Chapter 4 - River Pla.Net: Tiled Game Fields, Scrolling, and DirectAudio
Chapter 5 - River Pla.Net II: DirectInput and Writing Text to Screen
Chapter 6 - Magic KindergarteN.: Adventure Games, ADO.NET, and DirectShow
Chapter 7 - Magic KindergarteN. II: Animation Techniques and Speech API
Chapter 8 - .Netterpillars II: Multiplayer Games and Directplay
Chapter 9 - D-iNfEcT: Multithreading, Nonrectangular Windows, and Access toNonmanaged Code
Bonus Chapter Porting .Nettrix to Pocket PC
Appendix A - The State of PC Gaming
Appendix B - Motivations in Games
Appendix C - How Do I Make Games?
Appendix D - Guidelines for Developing Successful Games
Index
List of Figures
List of Tables
Creating GradientsIn the previous section, we saw some code samples used to create solid red rectangles via aSolidBrush object. GDI+ allows the programmer to go beyond flat colors and create linear and pathgradients, using special gradient brushes that provide very interesting effects.
GDI+ has features to create horizontal, vertical, and diagonal linear gradients. We can create lineargradients in which the colors change uniformly (the default behavior), or in a nonuniform way by using theBlend property of the gradient brush.
The sample code here shows how to create a uniform gradient brush and draw a rectangle with colorchanging from red to blue from the upper-left to the lower-right vertex:
Dim graph as GraphicsDim linGrBrush as Drawing2-D.LinearGradientBrush
graph = Graphics.FromHwnd(picSource.Handle)
linGrBrush = new Drawing2-D.LinearGradientBrush(_ new Point(10, 20), ' start gradient point new Point(23, 27), ' end gradient point Color.FromArgb(255, 255, 0, 0), ' Red Color.FromArgb(255, 0, 0, 255)) ' Bluegraph.FillRectangle(linGrBrush, 10, 20, 13, 7)
NETIN.NET
The most important part of this sample code is the color definition using the FromArgb methodof the Color object. As we can see, each color in GDI+ is always defined by four values: thered, green, blue (RGB) values used by the classic GDI functions, plus the alpha (A) value,which defines the transparency of the color. In the preceding example, we use an alpha valueof 255 for both colors, so they will be totally opaque. Using a value of 128, we create a 50percent transparent color, so any graphics below are shown through the rectangle. Settingalpha to zero means that the color will be 100 percent transparent, or totally invisible. The in-between values allow different degrees of transparency.
Path gradients allow us to fill a shape using a color pattern defined by a specified path. The path can becomposed of points, ellipses, and rectangles, and we can specify one color for the center of the path anda different color for each of the points in the path, allowing the creation of many different effects.
To draw an image using gradient paths, we must create a PathGradientBrush object, based on aGraphicsPath object that is defined by a sequence of l ines, curves, and shapes. The code here showshow to draw the same rectangle from the previous examples, using a gradient that starts with a greencolor in the center of the rectangle and finishes with a blue color at the edges:
Dim Graph As GraphicsDim rectSquare As RectangleDim graphPath As Drawing2-D.GraphicsPathDim brushSquare As Drawing2-D.PathGradientBrush
Graph = Graphics.FromHwnd(picSource.Handle)
' Create a path consisting of one rectanglegraphPath = New Drawing2-D.GraphicsPath()rectSquare = New Rectangle(10, 20, 23, 27)
.NET Game Programming with DirectX 9.0
by Alexandre Santos Lobo and EllenHatton
ISBN:1590590511
Apress 2003 (696 pages)
The authors of this text show how easy it can be to produceinteresting multimedia games using Managed DirectX 9.0 andprogramming with Visual Basic .NET on Everett, the latestversion of Microsoft's Visual Studio.
Table of Contents
.NET Game Programming with DirectX 9.0
Foreword
Preface
Introduction
Chapter 1 -