Jonathan S. Harbour - Beginning game programming, 3rd edition+CD

Jonathan S. Harbour - Beginning game programming, 3rd edition+CD
Название:
Jonathan S. Harbour - Beginning game programming, 3rd edition+CD
Размер:
35.6 MB
39
Скачать
Beginning game programming, 3rd edition+CD
Год: 2009
Автор: Jonathan S. Harbour
Жанр: CG Game Development
ISBN: 978-1435454279
Язык: Английский
Формат: PDF/ePUB
Качество: Изначально компьютерное (eBook)
Интерактивное оглавление: Да
Количество страниц: 448
Описание: Beginning Game Programming, Third Edition" shows budding game developers how to take their game ideas from concept to reality. Requiring only a basic understanding of the C++ language, this unique guide covers all the skills needed to create 2D and 3D games using code written in DirectX. Each element of a game is taught step-by-step, from learning how to create a simple Windows program, to using the key DirectX components to render 2D and 3D, to adding sound to your game. Using the skills taught within each chapter, readers will develop their own game library, which they can build upon for future game projects. And this updated, new edition includes end-of-chapter quizzes and projects to help you practice your new skills! At the end of the book, newfound skills will be put to use as you create your own complete, fully functional game.
Примеры страниц
Оглавление
PART I INTRODUCTION TO GAME PROGRAMMING WITH
WINDOWS AND DIRECTX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Chapter 1 Getting Started with Windows . . . . . . . . . . . . . . . . . . . . 3
An Overview of Windows Programming . . . . . . . . . . . . . . . . . . . . . 4
‘‘Getting’’ Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Understanding Windows Messaging . . . . . . . . . . . . . . . . . . . . . 6
Multi-Tasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Multi-Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
A Quick Overview of DirectX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
What Is Direct3D? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The Basics of a Windows Program . . . . . . . . . . . . . . . . . . . . . . . . 15
Creating Your First Win32 Project . . . . . . . . . . . . . . . . . . . . . . 16
Understanding WinMain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
A Complete WinMain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Chapter 2 Listening to Windows Messages . . . . . . . . . . . . . . . . . . 31
Writing a Full-Blown Windows Program . . . . . . . . . . . . . . . . . . . . 32
Understanding InitInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Understanding MyRegisterClass . . . . . . . . . . . . . . . . . . . . . . . . 39
Exposing the Secrets of WinProc . . . . . . . . . . . . . . . . . . . . . . . 42
What Is a Game Loop? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
The Old WinMain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
WinMain and Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
The GameLoop Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Source Code for the GameLoop Program . . . . . . . . . . . . . . . . . 54
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Chapter 3 Initializing Direct3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Getting Started with Direct3D . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
The Direct3D Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Creating the Direct3D Object . . . . . . . . . . . . . . . . . . . . . . . . . 67
Taking Direct3D for a Spin . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Direct3D in Full-Screen Mode . . . . . . . . . . . . . . . . . . . . . . . . . 80
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
PART II THE GAME PROGRAMMING TOOLBOX . . . . . . . . . . . . . . . . . 85
Chapter 4 Drawing Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Surfaces and Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
The Primary Surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Secondary Off-Screen Surfaces . . . . . . . . . . . . . . . . . . . . . . . . 91
The Create_Surface Example . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Loading Bitmaps from Disk . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
The Load_Bitmap Program . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Recycling Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Chapter 5 Getting Input with the Keyboard, Mouse,
and Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Keyboard Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
DirectInput Object and Device . . . . . . . . . . . . . . . . . . . . . . . . 110
Initializing the Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Reading Key Presses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Mouse Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Initializing the Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Reading the Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Xbox 360 Controller Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Initializing XInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Reading the Controller State . . . . . . . . . . . . . . . . . . . . . . . . . 119
Controller Vibration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Testing XInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
A Brief Introduction to Sprite Programming . . . . . . . . . . . . . . . . 129
A Useful Sprite Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Loading a Sprite Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Drawing a Sprite Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Bomb Catcher Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
MyWindows.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
MyDirectX.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
MyDirectX.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
MyGame.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Chapter 6 Drawing and Animating Sprites . . . . . . . . . . . . . . . . . . 157
What Is a Sprite? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Loading the Sprite’s Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Transparent Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Initializing the Sprite Renderer . . . . . . . . . . . . . . . . . . . . . . . 162
Drawing Transparent Sprites . . . . . . . . . . . . . . . . . . . . . . . . . 164
Drawing an Animated Sprite . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Working with Sprite Sheets . . . . . . . . . . . . . . . . . . . . . . . . . . 174
The Animate Sprite Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Chapter 7 Transforming Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Sprite Rotation and Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
2D Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Drawing a Transformed Sprite . . . . . . . . . . . . . . . . . . . . . . . 193
The Rotate_Scale_Demo Program . . . . . . . . . . . . . . . . . . . . . 195
Animation with Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . 198
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Chapter 8 Detecting Sprite Collisions . . . . . . . . . . . . . . . . . . . . . . 207
Bounding Box Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . 208
Working with Rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Writing the Collision Function . . . . . . . . . . . . . . . . . . . . . . . . 210
A New Sprite Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Adjusting for Sprite Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . 212
The Bounding Box Demo Program . . . . . . . . . . . . . . . . . . . . . 212
Distance-Based Collision Detection . . . . . . . . . . . . . . . . . . . . . . . 218
Calculating Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Codifying Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Testing Distance-Based Collision . . . . . . . . . . . . . . . . . . . . . . . 221
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Chapter 9 Printing Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Creating a Font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
The Font Descriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Creating the Font Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
A Reusable MakeFont Function . . . . . . . . . . . . . . . . . . . . . . . 227
Printing Text with ID3DXFont . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Printing with DrawText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Wrapping Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Testing Font Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Chapter 10 Scrolling the Background . . . . . . . . . . . . . . . . . . . . . . . 237
Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Backgrounds and Scenery . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Creating Backgrounds from Tiles . . . . . . . . . . . . . . . . . . . . . . 240
Tile-Based Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Dynamically Rendered Tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
The Tile Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Creating a Tile Map Using Mappy . . . . . . . . . . . . . . . . . . . . . 250
The Tile_Dynamic_Scroll Project . . . . . . . . . . . . . . . . . . . . . . . 255
Bitmap-Based Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Theory of Bitmap-Based Scrolling . . . . . . . . . . . . . . . . . . . . . . 263
Bitmap Scrolling Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Chapter 11 Playing Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Using DirectSound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Initializing DirectSound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Creating a Sound Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Loading a Wave File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Playing a Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Testing DirectSound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Creating the Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Modifying the ‘‘MyDirectX’’ Files . . . . . . . . . . . . . . . . . . . . . . 280
Modifying MyGame.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Chapter 12 Learning the Basics of 3D Rendering . . . . . . . . . . . . . . 295
Introduction to 3D Programming . . . . . . . . . . . . . . . . . . . . . . . . 296
The Key Components of 3D Programming . . . . . . . . . . . . . . . 297
The 3D Scene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Moving to the Third Dimension . . . . . . . . . . . . . . . . . . . . . . . 303
Grabbing Hold of the 3D Pipeline . . . . . . . . . . . . . . . . . . . . . 303
Vertex Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Rendering the Vertex Buffer . . . . . . . . . . . . . . . . . . . . . . . . . 308
Creating a Quad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
The Textured Cube Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Chapter 13 Rendering 3D Model Files . . . . . . . . . . . . . . . . . . . . . . 327
Creating and Rendering Stock Meshes . . . . . . . . . . . . . . . . . . . . . 328
Creating Stock Meshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Rendering Stock Meshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
The Stock_Mesh Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Loading and Rendering a Model File . . . . . . . . . . . . . . . . . . . . . . 334
Loading an .X File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Rendering a Complete Model . . . . . . . . . . . . . . . . . . . . . . . . 340
Deleting a Model from Memory . . . . . . . . . . . . . . . . . . . . . . . 341
The Render_Mesh Program . . . . . . . . . . . . . . . . . . . . . . . . . . 341
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
PART III GAME PROJECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Chapter 14 The Anti-Virus Game . . . . . . . . . . . . . . . . . . . . . . . . . . 357
The Anti-Virus Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Playing the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
The Game’s Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
What You Have Learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Review Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
On Your Own . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
PART IV APPENDICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Appendix A Configuring Visual C++ . . . . . . . . . . . . . . . . . . . . . . . . 391
Appendix B Resources for Further Study . . . . . . . . . . . . . . . . . . . . . 399
Appendix C Chapter Quiz Answers . . . . . . . . . . . . . . . . . . . . . . . . . 405
Appendix D Additional Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423