E-Book, Englisch, 464 Seiten
Dawes Windows Mobile Game Development
1. ed
ISBN: 978-1-4302-2929-2
Verlag: Apress
Format: PDF
Kopierschutz: 1 - PDF Watermark
Building games for the Windows Phone and other mobile devices
E-Book, Englisch, 464 Seiten
ISBN: 978-1-4302-2929-2
Verlag: Apress
Format: PDF
Kopierschutz: 1 - PDF Watermark
This book will provide you with a comprehensive guide to developing games for both the Windows Mobile platform and the Windows Phone using the industry standard programming languages C# and VB .NET. You will be walked through every aspect of developing for the Windows Mobile platform-from setting up your development environment for the first time to creating advanced 3D graphics. Finally, you'll learn how you can make your applications available to others, whether distributing for free or selling online. Using extensive code samples throughout, you'll gather all the information needed to create your own games and distribute them successfully for others to enjoy. Aimed primarily at C# developers, almost everything in the book can be used in VB .NET too. For those areas where this is not the case, workarounds are suggested so that VB .NET developers are still able to use the techniques described.
Adam Dawes is a software developer and systems architect working at a cutting-edge online service development company. He has been a compulsive programmer since the age of 4, when he was first introduced to a monochrome Commodore PET. The love affair has continued through three subsequent decades, flourishing through the days of the 8-bit dinosaurs to today's era of multi-core processors and pocket supercomputers. A constant throughout all of this has been Adam's fondness of computer games. From the very first time Nightmare Park displayed its devious maze of pathways in green symbols back in 1980, he has been a games player across a variety of genres and styles. These days he spends his spare time playing the latest 3D titles on his PC, or enjoying some of the classics in his stand-up arcade machine or sit-in cockpit driving cabinet. Creating his own games has always been a hobby and while he has no intention of becoming part of the professional games industry, he has a lot of fun developing his own titles nonetheless. Adam lives with his wife, Ritu, and son, Kieran, in the southeast of England. His web site is at www.adamdawes.com.
Autoren/Hrsg.
Weitere Infos & Material
1;Title Page;1
2;Copyright Page;2
3;Dedication Page;3
4;Contents at a Glance;4
5;Table of Contents;5
6;About the Author;15
7;About the Technical Reviewer;16
8;Acknowledgments;17
9;Introduction;18
9.1;Goal of This Book;18
9.2;Who This Book Is For;18
9.3;Chapter Overview;19
10;PART 1 Windows Mobile Development;21
10.1;CHAPTER 1 Windows Mobile and .NET;22
10.1.1;Looking Closely at .NET for Windows Mobile;23
10.1.1.1;Language Choices;23
10.1.1.2;The .NET Runtime Libraries;24
10.1.1.3;IDE Features;24
10.1.1.3.1;Emulators;24
10.1.1.3.2;Form Designer;25
10.1.1.3.3;Breakpoints;25
10.1.1.3.4;Debug Output;25
10.1.2;Preparing for Windows Mobile Development Challenges;25
10.1.2.1;Numerous Windows Mobile Versions and Editions;25
10.1.2.1.1;Windows CE;26
10.1.2.1.2;Pocket PC;26
10.1.2.1.3;Windows Mobile;26
10.1.2.1.4;Windows Phones;27
10.1.2.2;Hardware Considerations;27
10.1.2.2.1;Touch Screens;27
10.1.2.2.2;Hardware Buttons;27
10.1.2.2.3;Processors;28
10.1.2.2.4;Screen Size;28
10.1.2.2.5;Graphics Hardware;28
10.1.2.2.6;Cooperation with Devices;28
10.1.3;Using Visual Studio for Windows Mobile Development;29
10.1.3.1;Installing Visual Studio;29
10.1.3.2;Creating a Windows Mobile Project;30
10.1.3.2.1;Visual Studio 2005;31
10.1.3.2.2;Visual Studio 2008;31
10.1.3.2.3;Project Templates;33
10.1.3.3;Designing a Form;33
10.1.3.4;Running the Application;35
10.1.3.5;Working with the Emulators;37
10.1.3.5.1;Device Selection;37
10.1.3.5.2;Sharing Files with an Emulated Device;37
10.1.3.5.3;Re-enabling Alt-Tab;38
10.1.3.5.4;Emulator State;38
10.1.3.5.5;Obtaining More Emulators;38
10.1.3.6;Targeting Different Platforms;38
10.1.3.7;Running on a Real Device;39
10.1.3.7.1;Deployment Problems;40
10.1.3.7.2;Removing the Security Warnings;40
10.1.3.7.3;Changing the Deployment Directory;41
10.1.3.8;Debugging;41
10.1.3.8.1;Breakpoints;42
10.1.3.8.2;Debug Output;42
10.1.3.9;Getting Help;43
10.1.3.9.1;MSDN;43
10.1.3.9.2;Search Engines;43
10.1.3.9.3;Microsoft’s Windows Mobile Developer Center;43
10.1.3.9.4;Newsgroups;43
10.1.4;Windows Mobile Game Development;44
10.1.4.1;Suitable Games;44
10.1.4.2;Graphics APIs;44
10.1.4.2.1;GDI;44
10.1.4.2.2;GAPI;45
10.1.4.2.3;DirectDraw;45
10.1.4.2.4;Direct3D;45
10.1.4.2.5;OpenGL ES;45
10.1.4.3;Technologies Used in This book;46
10.1.5;Welcome to the World of Windows Mobile Development;46
10.2;CHAPTER 2 Mastering the User Interface;47
10.2.1;Developing for Touch Screen and Smart Phone Devices;47
10.2.2;The User Interface Controls;49
10.2.2.1;Forms;49
10.2.2.1.1;AutoScaleMode Property;49
10.2.2.1.2;ControlBox Property;49
10.2.2.1.3;FormFactor Property;50
10.2.2.1.4;MinimizeBox Property;50
10.2.2.1.5;Text Property;50
10.2.2.1.6;WindowState Property;51
10.2.2.1.7;Resize Event;51
10.2.2.1.8;Creating Non-Full-Screen Forms;51
10.2.2.1.9;Losing and Gaining Focus;52
10.2.2.2;Labels;53
10.2.2.3;Buttons;53
10.2.2.4;Menu Bars;54
10.2.2.4.1;Menu Design Considerations;54
10.2.2.4.2;Submenus;55
10.2.2.4.3;Smart Phone Menus;56
10.2.2.4.4;Working with MainMenu Controls;56
10.2.2.4.5;MainMenu Events;56
10.2.2.4.6;Menu Item Naming;57
10.2.2.5;Context Menus;57
10.2.2.6;Timers;58
10.2.2.6.1;Timer Initialization;58
10.2.2.6.2;Concurrent Tick Events;58
10.2.2.6.3;Timers on Inactive Forms;59
10.2.2.6.4;Other Timers;59
10.2.2.7;File Dialog Controls;60
10.2.2.8;Input Panels;61
10.2.2.9;Capturing Camera Images;63
10.2.3;The “Busy” Cursor;64
10.2.4;On with the Game;65
11;PART 2 Creating Games;66
11.1;CHAPTER 3 GDI Graphics;67
11.1.1;All About GDI;67
11.1.2;Let’s Paint;67
11.1.2.1;Invalidating a Form;69
11.1.2.2;The Drawing Coordinate System;69
11.1.2.3;Colors;69
11.1.2.4;Pens and Brushes;71
11.1.2.4.1;Pens;71
11.1.2.4.2;Brushes;72
11.1.2.5;Drawing Lines;72
11.1.2.6;Drawing Polygons;73
11.1.2.7;Drawing Rectangles;75
11.1.2.8;Drawing Ellipses;75
11.1.2.9;Working with Pixels;76
11.1.2.10;Displaying Text;76
11.1.2.10.1;Using Different Fonts;77
11.1.2.10.2;Centering Text;78
11.1.2.11;Clearing the Background;79
11.1.2.12;Painting in Action;79
11.1.3;Bitmaps;80
11.1.3.1;Creating Bitmaps Using Graphics Primitives;80
11.1.3.2;Creating Bitmaps from Predrawn Graphics;81
11.1.3.2.1;Embedding Graphic Resources;82
11.1.3.2.2;Reading Graphics from Files;84
11.1.3.2.3;A Note About Graphic File Formats;84
11.1.3.3;Painting Bitmaps to the Screen;85
11.1.3.3.1;Partial Bitmap Copying;85
11.1.3.3.2;Scaling;87
11.1.3.3.3;Color Keys;87
11.1.3.4;Bitmaps in Action;88
11.1.4;Smooth Animation;88
11.1.5;Getting the Most From GDI;92
11.2;CHAPTER 4 Taming the Device with the Game Engine;93
11.2.1;Designing the Game Engine;93
11.2.2;Implementing the Engine;95
11.2.2.1;CGameEngineBase;95
11.2.2.1.1;Managing Game Objects;98
11.2.2.1.2;Game Mechanics;98
11.2.2.1.3;Initializing Start-Up;99
11.2.2.1.4;Resetting the Game;99
11.2.2.1.5;Rendering;99
11.2.2.1.6;Updating the Game State;100
11.2.2.1.7;Advancing the Game;100
11.2.2.1.8;Adding Other Functions;101
11.2.2.2;CGameObjectBase;101
11.2.2.2.1;Positioning Objects;102
11.2.2.2.2;Storing Object States;103
11.2.2.2.3;Object Mechanics;103
11.2.2.3;CGameObjectGDIBase;103
11.2.2.3.1;Setting the Object State for GDI;104
11.2.2.3.2;Object movement;104
11.2.2.4;CGameEngineGDIBase;104
11.2.2.4.1;Rendering;105
11.2.2.4.2;Advancing the Game;106
11.2.2.5;CGameFunctions;106
11.2.3;Using the Game Engine;107
11.2.3.1;Creating the Bounce Example Game;107
11.2.3.1.1;CBounceGame;108
11.2.3.1.2;CObjBall;109
11.2.3.1.3;Getting the Game Running;111
11.2.4;Optimizing Rendering;114
11.2.4.1;Adding, Updating, and Deleting Objects;118
11.2.4.2;Forcing a Repaint;118
11.2.4.3;Performance Impact;119
11.2.5;Other Engine Features;119
11.2.5.1;Interacting with the Device;119
11.2.5.1.1;Minimizing and Restoring;119
11.2.5.1.2;Resizing the Form;121
11.2.5.1.3;Handling the SIP;121
11.2.5.2;Checking Device Capabilities;122
11.2.5.3;Future Enhancements;125
11.2.6;Next Steps;125
11.3;CHAPTER 5 Timing to Perfection;126
11.3.1;Affirming the Need for Consistent Timing;126
11.3.1.1;Processor Speed;126
11.3.1.2;Graphics Performance;127
11.3.1.3;Multitasking;127
11.3.1.4;Processing and Graphical Complexity;127
11.3.1.5;Development Mode vs. Released Code;127
11.3.2;Overcoming Performance Inconsistencies;127
11.3.2.1;Fixed Interval Updates;128
11.3.2.2;Dynamic Update Intervals;128
11.3.2.2.1;The Problem with Dynamic Intervals;129
11.3.2.3;Interpolated Updates;130
11.3.2.3.1;Applying Interpolated Updates to a Game;131
11.3.2.3.2;Update Frequency;133
11.3.2.3.3;Distinguishing Between Updates and Frames;134
11.3.3;Using an External Timer;135
11.3.3.1;DateTime.Now;135
11.3.3.2;Environment.TickCount;135
11.3.3.3;The High-Performance Timer;135
11.3.4;Timing in the Game Engine;136
11.3.4.1;Initializing and Interrogating the Timer;136
11.3.4.2;Changes to the Interpolation-Based Functions;139
11.3.4.2.1;CGameEngineBase;139
11.3.4.2.2;CGameEngineGDIBase;141
11.3.4.2.3;CGameObjectBase;141
11.3.4.2.4;CGameObjectGDIBase;142
11.3.4.2.5;Changes to the Noninterpolation Functions;143
11.3.4.2.6;Using the Game Engine;143
11.3.5;Let’s Bounce Again;143
11.4;CHAPTER 6 Exploring User Input;144
11.4.1;Touch Screen Input;144
11.4.1.1;Touch Screen Events;144
11.4.1.1.1;Click;145
11.4.1.1.2;DoubleClick;145
11.4.1.1.3;MouseDown;146
11.4.1.1.4;MouseUp;146
11.4.1.1.5;MoveMove;146
11.4.1.2;Selecting, Dragging, and Swiping;147
11.4.1.2.1;Selecting an Object;147
11.4.1.2.2;Dragging Objects;153
11.4.1.2.3;Swiping Objects;155
11.4.1.3;Adding Context Menus;159
11.4.1.4;Using Finger-Friendly Input;161
11.4.1.5;Using Multitouch Input?;162
11.4.2;Using Button and Keyboard Input;162
11.4.2.1;Button and Keyboard Events;162
11.4.2.1.1;KeyPress;162
11.4.2.1.2;KeyDown;163
11.4.2.1.3;KeyUp;164
11.4.2.2;Reading the Keyboard State;164
11.4.2.3;Input from the SIP;165
11.4.2.4;Choosing the Keyboard Input Method;165
11.4.3;Reading From an Accelerometer;166
11.4.3.1;Initializing the Accelerometer;166
11.4.3.2;Reading Data from the Accelerometer;167
11.4.3.3;Detecting the Presence of a Supported Accelerometer;169
11.4.3.4;Supporting Devices With No Accelerometer;171
11.4.4;Considering Input Design;171
11.5;CHAPTER 7 Sounding Out with Game Audio;172
11.5.1;Understanding Sound File Types;172
11.5.2;Exploring the Available Sound APIs;173
11.5.3;Using the Sound APIs;175
11.5.3.1;PlaySound;175
11.5.3.2;System.Media.SoundPlayer;179
11.5.3.3;AygShell Sound Functions;182
11.5.3.4;BASS.dll;184
11.5.3.4.1;Wrapping BASS.NET;185
11.5.3.4.2;Using BASS and BASS.NET in Your Projects;191
11.5.4;Adding Support for Sounds to the Game Engine;191
11.5.5;Choosing a Sound API;192
11.5.6;Make Some Noise;192
11.6;CHAPTER 8 Game in Focus: GemDrops;193
11.6.1;Designing the Game;193
11.6.1.1;Creating the GemDrops Design Brief;193
11.6.1.2;Conceptualizing the Game Controls;196
11.6.1.3;Choosing the Sound Effects;197
11.6.1.4;Outlining the Minimum Requirements;197
11.6.2;Writing the Game;198
11.6.2.1;Creating the Project;198
11.6.2.2;Creating the Game Form;199
11.6.2.3;Preparing the Game;200
11.6.2.4;Creating the Gem Game Object;202
11.6.2.5;Resetting the Game;205
11.6.2.6;Pausing the Game;208
11.6.2.7;Displaying the Player Gems;208
11.6.2.7.1;Enhancing CObjGem;208
11.6.2.7.2;Enhancing the Game Class;211
11.6.2.8;Updating the Player’s Gems;214
11.6.2.9;Adding Player Control;222
11.6.2.9.1;Moving the Gems to the Side;222
11.6.2.9.2;Rotating the Gems;224
11.6.2.9.3;Quickly Dropping the Gems;224
11.6.2.9.4;Implementing Control in the User Interface;227
11.6.2.10;Removing Gems from the Board;229
11.6.2.10.1;Removing Gem Groups;230
11.6.2.10.2;Removing Rainbow Gems;234
11.6.2.11;Creating Score Objects;235
11.6.3;Finishing Up;238
11.7;CHAPTER 9 Common Game Components;239
11.7.1;Managing Game Settings;239
11.7.1.1;Using the Settings Class;240
11.7.1.2;Understanding How the CSettings Class Works;242
11.7.1.2.1;Accessing the Settings Object;242
11.7.1.2.2;Setting and Retrieving Values;242
11.7.1.2.3;Loading and Saving Settings;243
11.7.2;Replacing the MessageBox;244
11.7.2.1;Using the MessageBox Class;244
11.7.2.2;Understanding How the CMessageBox Class Works;245
11.7.2.2.1;Accessing the Message Box Object;245
11.7.2.2.2;Displaying the Message;245
11.7.3;Creating a High Score Table;246
11.7.3.1;Using the High Score Class;246
11.7.3.1.1;Setting the Dialog Presentation Properties;246
11.7.3.1.2;Initializing the High Score Table;247
11.7.3.1.3;Displaying the High Scores Dialog;248
11.7.3.2;Understanding How the CHighScores Class Works;249
11.7.3.2.1;Accessing the HighScores Objects;249
11.7.3.2.2;Understanding the Data Structure;249
11.7.3.2.3;Presenting High Scores;250
11.7.3.2.4;Storing Data;250
11.7.4;Creating an About Box;252
11.7.4.1;Using the About Box Class;253
11.7.4.2;Understanding How the CAboutBox Class Works;255
11.7.4.2.1;Accessing the About Box Objects;255
11.7.4.2.2;Displaying the About Box;255
11.7.5;Using Common Game Components;255
12;PART 3 OpenGL ES Graphics;257
12.1;CHAPTER 10 A New Window on the World with OpenGL ES;258
12.1.1;Preparing to Use OpenGL;258
12.1.1.1;Hardware Support;258
12.1.1.2;Language Support;259
12.1.1.3;Understanding the OpenGL Features;259
12.1.1.3.1;Performance;259
12.1.1.3.2;Scaling and Rotation;259
12.1.1.3.3;Transparency and Alpha Blending;259
12.1.1.4;Rendering in 3D;260
12.1.1.4.1;Abstract Coordinate System;260
12.1.1.4.2;Color Specification;260
12.1.1.4.3;Drawing Primitives;261
12.1.1.4.4;Textures;261
12.1.2;Using OpenGL in Visual Studio.NET;261
12.1.2.1;Calling OpenGL from Managed Languages;261
12.1.2.2;Understanding OpenGL’s Rendering Approach;262
12.1.2.3;Considering the Hardware Capabilities and Limitations;262
12.1.2.4;Closing OpenGL Applications;263
12.1.3;Creating an OpenGL Program;263
12.1.3.1;Configuring the Project;263
12.1.3.2;Creating the OpenGL Environment;265
12.1.3.3;Initializing OpenGL;267
12.1.3.4;Rendering Graphics in OpenGL;269
12.1.3.5;Adding Form Functions;273
12.1.3.6;Terminating OpenGL;274
12.1.3.7;Running the Program;275
12.1.3.8;Adding Some Sparkle;276
12.1.4;Using Matrix Transformations;277
12.1.4.1;Setting the Identity Matrix;277
12.1.4.2;Applying Translation Transformations;278
12.1.4.3;Applying Rotation Transformations;278
12.1.4.4;Applying Scaling Transformations;279
12.1.4.5;Applying Multiple Transformations;280
12.1.4.5.1;Rotating Objects;280
12.1.4.5.2;Scaling Objects;282
12.1.4.6;Specifying Vertex Positions;282
12.1.4.7;Pushing and Popping the Matrix;282
12.1.4.8;Practicing Matrix Transformations with Example Projects;282
12.1.4.8.1;The Orbits Project;282
12.1.4.8.2;The FractalTrees project;284
12.1.5;Drawing Functions;287
12.1.5.1;Drawing Points;287
12.1.5.2;Drawing Lines;287
12.1.5.3;Drawing Triangles;288
12.1.6;Using Texture Mapping;290
12.1.6.1;Loading Graphics;290
12.1.6.2;Rendering with Textures;291
12.1.6.3;Specifying Texture Coordinates;293
12.1.6.4;Cleaning Up;295
12.1.7;Using Transparency and Alpha Blending;295
12.1.7.1;Applying Transparency;295
12.1.7.2;Alpha Blending;296
12.1.7.3;Alpha Blending with Textures;297
12.1.7.3.1;Textures with Alpha Channels;297
12.1.7.3.2;Additive Texture Blending;298
12.1.7.3.3;Controlled Transparency of Textures;298
12.1.7.3.4;Knowing the Available Blending Factors;298
12.1.8;Understanding Orthographic Coordinate Systems;299
12.1.9;Taking Control of OpenGL;301
12.2;CHAPTER 11 Creating 2D Games with OpenGL;302
12.2.1;Adding OpenGL to the Game Engine;302
12.2.1.1;Understanding the CGameEngineOpenGLBase Class;303
12.2.1.1.1;Initializing OpenGL;303
12.2.1.1.2;Rendering Game Objects;304
12.2.1.1.3;Accessing the Graphics Library;304
12.2.1.1.4;Calling Utility Functions;304
12.2.1.2;Understanding the CGameObjectOpenGLBase Class;305
12.2.1.2.1;Setting the Object State for OpenGL;305
12.2.1.2.2;Rendering Quadrilaterals;306
12.2.1.3;Performing the Capabilities Check;307
12.2.1.4;Creating the Game Form;309
12.2.2;Using the OpenGL Game Engine;311
12.2.2.1;Preparing the Balloons Game;311
12.2.2.2;Setting up the Projection Matrix;312
12.2.2.3;Rendering the Balloons;314
12.2.2.4;Sorting the Balloons;316
12.2.2.5;Playing the Game;319
12.2.3;2D Possibilities with OpenGL;322
12.3;CHAPTER 12 The Ins and Outs of the Third Dimension;323
12.3.1;Understanding Perspective Projection;323
12.3.1.1;Understanding the Viewing Frustum;323
12.3.1.2;Defining the Viewing Frustum in OpenGL;327
12.3.2;Understanding the Depth Buffer;328
12.3.2.1;Enabling the Depth Buffer;328
12.3.2.2;Rendering Transparent Objects with the Depth Buffer;330
12.3.3;Rendering 3D Objects;330
12.3.3.1;Defining a 3D Object;330
12.3.3.2;Removing Hidden Surfaces;336
12.3.3.3;Using Indexed Triangles;338
12.3.4;Lighting Your Projects;341
12.3.4.1;Introducing the Lights and Materials;341
12.3.4.2;Exploring the Types of Illumination;341
12.3.4.2.1;Ambient Light;342
12.3.4.2.2;Diffuse Light;342
12.3.4.2.3;Specular Light;343
12.3.4.3;Using Material Properties;344
12.3.4.3.1;Ambient Material;344
12.3.4.3.2;Diffuse Material;344
12.3.4.3.3;Specular Material;344
12.3.4.3.4;Material Shininess;344
12.3.4.3.5;Emissive Material;344
12.3.4.4;Exploring Light and Material Interaction;345
12.3.4.5;Using Multiple Lights;345
12.3.4.6;Reusing Lights;346
12.3.4.7;Exploring the Types of Light Source;346
12.3.4.7.1;Directional Lights;346
12.3.4.7.2;Point Lights;347
12.3.4.7.3;Spotlights;347
12.3.4.8;Calculating Light Reflections in OpenGL;348
12.3.4.8.1;Describing a Triangle’s Face Direction;348
12.3.4.8.2;Calculating Normals;350
12.3.4.8.3;Using Surface Normals and Vertex Normals;351
12.3.4.9;Adding Light to the Game Engine;352
12.3.4.9.1;Enabling Lighting;352
12.3.4.9.2;Adding the Game Engine Light Functions;353
12.3.4.9.3;Creating Directional Lights;355
12.3.4.9.4;Creating Point Lights;355
12.3.4.9.5;Creating Spotlights;356
12.3.4.9.6;Setting the Scene’s Ambient Light;356
12.3.4.9.7;Setting Material Properties;357
12.3.4.9.8;OpenGL Lighting in Action;358
12.3.4.10;Calculating Normals Programmatically;359
12.3.4.11;Using Normals with Scaled Objects;363
12.3.5;Mastering the 3D World;363
12.4;CHAPTER 13 Further OpenGL Features and Techniques;364
12.4.1;Importing Geometry;364
12.4.1.1;Introducing SketchUp;364
12.4.1.1.1;Creating 3D Objects in SketchUp;365
12.4.1.1.2;Exporting 3D Geometry;367
12.4.1.2;Using the .0bj File Format;368
12.4.1.3;Importing Geometry into the Game Engine;370
12.4.1.3.1;Retrieving Geometry Data;370
12.4.1.3.2;Manipulating Geometry Data;371
12.4.1.3.3;Reading Geometry Data from .obj Files;373
12.4.1.3.4;Using the Geometry Loader Class;373
12.4.2;Moving the Camera;375
12.4.2.1;Positioning the Camera;375
12.4.2.2;Adding Camera Objects to the Game Engine;376
12.4.2.3;Lights, Camera, Action!;381
12.4.2.4;Optimizing the Camera Calculation;382
12.4.2.5;Cameras and the Projection Matrix;385
12.4.3;Rendering Fog;385
12.4.3.1;Adding Fog Support to the Game Engine;386
12.4.3.2;Using Fog;386
12.4.4;Working with Billboards;388
12.4.4.1;Rendering Billboards;388
12.4.4.2;Adding Billboard Support to the Game Engine;390
12.4.5;Learning More about OpenGL ES;392
12.5;CHAPTER 14 Distributing Your Game;394
12.5.1;Preparing a Game for Distribution;394
12.5.1.1;Settings the Assembly Properties;394
12.5.1.2;Project Versioning;396
12.5.1.3;Creating an Icon;397
12.5.2;Building Distribution Packages;400
12.5.2.1;Switching into Release Mode;400
12.5.2.2;Creating the Setup Project;401
12.5.2.3;Adding the Setup Project’s Files;402
12.5.2.4;Creating a Programs Menu Shortcut;404
12.5.2.5;Building the CAB File;406
12.5.3;Selling Games;406
12.5.3.1;Creating Evaluation Applications;406
12.5.3.2;Upgrading to Full Versions;407
12.5.3.3;Using Windows Marketplace for Mobile;409
12.5.3.4;Minimizing Piracy;410
12.5.4;Implementing Reverse Engineering;411
12.5.4.1;Obfuscating with Dotfuscator Community Edition;412
12.5.4.2;Using Advanced Obfuscation;414
12.5.4.2.1;Control Flow Obfuscation;415
12.5.4.2.2;String Encryption;415
12.5.4.2.3;Symbol Renaming Schemes;415
12.5.4.2.4;Reflector.NET Protection;415
12.5.4.2.5;Resource Protection;416
12.5.4.3;Adding Obfuscated Files to CAB Setup Projects;416
12.5.5;Releasing New Versions of Your Game;416
12.5.6;Promoting Your Game;418
12.5.7;Go Create!;419
13;Index;420




