Gary Rosenzweig 800 East 96th Street Indianapolis, Indiana 46240 USA ActionScript 3.0 Game Programming University Copyright©2008 by Que Publishing Associate Publisher Greg Wiegand All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical, photocopying, recording, or other- Acquisitions Editor wise, without written permission from the publisher. No patent liability is assumed with respect Laura Norman to the use of the information contained herein. Although every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omis- Development Editor sions. Nor is any liability assumed for damages resulting from the use of the information Laura Norman contained herein. Managing Editor ISBN-13: 978-0-7897-3702-1 Gina Kanouse ISBN-10: 0-7897-3702-7 Project Editor Library of Congress Cataloging-in-Publication Data: Rosenzweig, Gary. Anne Goebel ActionScript 3.0 game programming university / Gary Rosenzweig. Copy Editor p. cm. ISBN 0-7897-3702-7 Keith Cline 1. Computer games—Programming. 2. Computer animation. 3. ActionScript Senior Indexer (Computer program language) I. Title. Cheryl Lenser QA76.76.C672R73 2007 794.8'1526—dc22 Proofreader 2007028659 Heather Waye Arle Printed in the United States of America Technical Editor First Printing: August 2007 Cheryl Brumbaugh-Duncan Trademarks Publishing Coordinator All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Que Publishing cannot attest to the accuracy of this information. Use of a Cindy Teeters term in this book should not be regarded as affecting the validity of any trademark or service mark. Book Designer Warning and Disclaimer Anne Jones Every effort has been made to make this book as complete and as accurate as possible, but no Senior Compositor warranty or fitness is implied. The information provided is on an “as is” basis. The author and the publisher shall have neither liability nor responsibility to any person or entity with respect to Gloria Schurick any loss or damages arising from the information contained in this book or from the use of Graphics programs accompanying it. William Follett Bulk Sales Eve Park Que Publishing offers excellent discounts on this book when ordered in quantity for bulk pur- chases or special sales. For more information, please contact U.S. Corporate and Government Sales 1-800-382-3419 [email protected] For sales outside of the U.S., please contact International Sales [email protected] This Book Is Safari Enabled The Safari®Enabled icon on the cover of your favorite technology book means the book is available through Safari Bookshelf. When you buy this book, you get free access to the online edition for 45 days. Safari Bookshelf is an electronic reference library that lets you easily search thousands of techni- cal books, find code samples, download chapters, and access technical information whenever and wherever you need it. To gain 45-day Safari Enabled access to this book: • Go to www.quepublishing.com/safarienabled • Complete the brief registration form • Enter the coupon code X4KW-GIAJ-2MEA-8KJG-E1AL If you have difficulty registering on Safari Bookshelf or accessing the online edition, please email [email protected]. Contents at a Glance Introduction 1. Using Flash and ActionScript 3.0 2. ActionScript Game Elements 3. Basic Game Framework: A Matching Game 4. Brain Games: Memory and Deduction 5. Game Animation: Shooting and Bouncing Games 6. Picture Puzzles: Sliding and Jigsaw 7. Direction and Movement: Space Rocks 8. Casual Games: Match Three 9. Word Games: Hangman and Word Search 10. Questions and Answers: Trivia and Quiz Games 11. Action Games: Platform Games 12. Game Worlds: Driving and Exploration Game Index Contents Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Flash and Game Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Who Is This Book For? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 What Do You Need To Use This Book? . . . . . . . . . . . . . . . . . . . . . .3 Prerequisite Knowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Software Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Using the Example Games in Your Projects . . . . . . . . . . . . . . . . . . . .4 What You’ll Find in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 The FlashGameU.com Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 1. Using Flash and ActionScript 3.0 . . . . . . . . . . . . . . . . . . . .7 What Is ActionScript 3.0? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Creating a Simple ActionScript Program . . . . . . . . . . . . . . . . . . . . . .9 A Simple Use of trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Creating Screen Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Our First ActionScript 3.0 Class . . . . . . . . . . . . . . . . . . . . . . . . .13 Working with Flash CS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Display Objects and Display Lists . . . . . . . . . . . . . . . . . . . . . . . .16 The Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 The Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 The Timeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Writing and Editing ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . .19 ActionScript Game Programming Strategies . . . . . . . . . . . . . . . . . .22 Single Class Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 Smallest Step Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 Good Programming Practices . . . . . . . . . . . . . . . . . . . . . . . . . . .23 Basic ActionScript Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 Creating and Using Variables . . . . . . . . . . . . . . . . . . . . . . . . . . .26 Condition Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 Testing and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 Types of Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29 Methods of Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 Using the Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Contents v Publishing Your Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33 Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33 Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 ActionScript Game Programming Checklist . . . . . . . . . . . . . . . . . . .36 Publishing and Document Settings . . . . . . . . . . . . . . . . . . . . . . .36 Class, Function, and Variable Names . . . . . . . . . . . . . . . . . . . . .37 Runtime Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 Testing Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 2. ActionScript Game Elements . . . . . . . . . . . . . . . . . . . . . . .41 Creating Visual Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 Using Movie Clips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 Making Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 Drawing Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 Drawing Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 Creating Linked Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Creating Sprite Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53 Setting Sprite Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 Accepting Player Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 Mouse Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 Keyboard Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 Text Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58 Creating Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Sprite Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 Using Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Time-Based Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62 Physics-Based Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 Programming User Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 Moving Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 Dragging Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 Accessing External Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69 External Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69 Loading Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71 Saving Local Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71 Miscellaneous Game Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 Custom Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 Playing Sounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74 Loading Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 Random Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76 vi ActionScript 3.0 Game Programming University Shuffling an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77 Displaying a Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 System Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Game Theft and Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80 3. Basic Game Framework: A Matching Game . . . . . . . . . . . .83 Placing Interactive Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84 Methods for Creating Game Pieces . . . . . . . . . . . . . . . . . . . . . . .85 Setting Up the Flash Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . .86 Creating the Basic ActionScript Class . . . . . . . . . . . . . . . . . . . . .87 Using Constants for Better Coding . . . . . . . . . . . . . . . . . . . . . . .90 Shuffling and Assigning Cards . . . . . . . . . . . . . . . . . . . . . . . . . .92 Game Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 Adding Keyboard Listeners . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 Setting Up Game Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96 Checking for Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 Encapsulating the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 Creating the Game Movie Clip . . . . . . . . . . . . . . . . . . . . . . . . .103 Adding an Introduction Screen . . . . . . . . . . . . . . . . . . . . . . . . .104 Adding a Play Again Button . . . . . . . . . . . . . . . . . . . . . . . . . . .105 Adding Scoring and a Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106 Adding Scoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106 Adding a Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 Displaying Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 Displaying Score and Time after the Game Is Over . . . . . . . . . .112 Adding Game Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 Animated Card Flips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 Limited Card-Viewing Time . . . . . . . . . . . . . . . . . . . . . . . . . . .116 Sound Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119 4. Brain Games: Memory and Deduction . . . . . . . . . . . . . . .121 Arrays and Data Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122 Data Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 Arrays of Data Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125 Memory Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125 Preparing the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 Programming Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 Class Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 Setting the Text, Lights, and Sounds . . . . . . . . . . . . . . . . . . . . .130 Playing the Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 Contents vii Switching Lights On and Off . . . . . . . . . . . . . . . . . . . . . . . . . .134 Accepting and Checking Player Input . . . . . . . . . . . . . . . . . . . .135 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137 Deduction Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138 Setting Up the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139 Defining the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Starting a New Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 Checking Player Guesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145 Evaluating Player Moves . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Ending the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Clearing Game Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152 5. Game Animation: Shooting and Bouncing Games . . . . . . .155 Game Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 Time-Based Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 Coding Time-Based Animation . . . . . . . . . . . . . . . . . . . . . . . . .158 Air Raid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 Movie Setup and Approach . . . . . . . . . . . . . . . . . . . . . . . . . . .162 Flying Airplanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162 Moving Gun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166 Skyward Bullets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 The Game Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178 Paddle Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 Setting Up the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 Class Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Starting the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 Starting a New Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 Game Animation and Collision Detection . . . . . . . . . . . . . . . . .186 Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193 6. Picture Puzzles: Sliding and Jigsaw . . . . . . . . . . . . . . . . .195 Manipulating Bitmap Images . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 Loading a Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 Breaking a Bitmap into Pieces . . . . . . . . . . . . . . . . . . . . . . . . .198 Sliding Puzzle Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200 Setting Up the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201 Setting Up the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201 Loading the Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Cutting the Bitmap into Pieces . . . . . . . . . . . . . . . . . . . . . . . . .204 viii ActionScript 3.0 Game Programming University Shuffling the Pieces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206 Reacting to Player Clicks . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 Animating the Slide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211 Game Over and Cleanup . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213 Jigsaw Puzzle Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214 Setting Up the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214 Loading and Cutting the Image . . . . . . . . . . . . . . . . . . . . . . . .216 Dragging Puzzle Pieces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219 Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225 7. Direction and Movement: Space Rocks . . . . . . . . . . . . . .227 Using Math to Rotate and Move Objects . . . . . . . . . . . . . . . . . . . .228 The Sin and Cos Functions . . . . . . . . . . . . . . . . . . . . . . . . . . .228 Using Cos and Sin to Drive a Car . . . . . . . . . . . . . . . . . . . . . . .230 Calculating an Angle from a Location . . . . . . . . . . . . . . . . . . . .233 Air Raid II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 Altering the Gun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237 Changing the Bullets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 Changes to AirRaid2.as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241 Space Rocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 Game Elements and Design . . . . . . . . . . . . . . . . . . . . . . . . . . .242 Setting Up the Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244 Setting Up the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246 Starting the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248 Score and Status Display Objects . . . . . . . . . . . . . . . . . . . . . . .249 Ship Movement and Player Input . . . . . . . . . . . . . . . . . . . . . . .252 Shields Up! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256 Rocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257 Missiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261 Game Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265 8. Casual Games: Match Three . . . . . . . . . . . . . . . . . . . . . .267 Reusable Class: Point Bursts . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 Developing the Point Burst Class . . . . . . . . . . . . . . . . . . . . . . .269 Using Point Bursts in a Movie . . . . . . . . . . . . . . . . . . . . . . . . .273 Match Three . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276 Playing Match Three . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276 Game Functionality Overview . . . . . . . . . . . . . . . . . . . . . . . . . .277 The Movie and MatchThree Class . . . . . . . . . . . . . . . . . . . . . . .278 Contents ix Setting Up the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279 Player Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 Animating Piece Movement . . . . . . . . . . . . . . . . . . . . . . . . . . .285 Finding Matches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287 Finding Possible Moves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292 Score Keeping and Game Over . . . . . . . . . . . . . . . . . . . . . . . .295 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 9. Word Games: Hangman and Word Search . . . . . . . . . . . .297 Strings and Text Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 ActionScript 3.0 String Handling . . . . . . . . . . . . . . . . . . . . . . .298 Applying Text Formatting to Text Fields . . . . . . . . . . . . . . . . . .303 Hangman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309 Setting Up the Hangman . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309 The Hangman Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310 Word Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313 Development Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313 Defining the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315 Creating the Word Search Grid . . . . . . . . . . . . . . . . . . . . . . . .316 User Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320 Dealing with Found Words . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Modifying the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326 10. Questions and Answers: Trivia and Quiz Games . . . . . . . .327 Storing and Retrieving Game Data . . . . . . . . . . . . . . . . . . . . . . . .328 Understanding XML Data . . . . . . . . . . . . . . . . . . . . . . . . . . . .328 Importing External XML Files . . . . . . . . . . . . . . . . . . . . . . . . . .330 Trapping Load Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332 Trivia Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332 Designing a Simple Quiz Game . . . . . . . . . . . . . . . . . . . . . . . .333 Setting Up the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333 Setting Up the Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .334 Loading the Quiz Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337 Message Text and Game Button . . . . . . . . . . . . . . . . . . . . . . . .337 Moving the Game Forward . . . . . . . . . . . . . . . . . . . . . . . . . . .339 Displaying the Questions and Answers . . . . . . . . . . . . . . . . . . .340 Judging the Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342 Ending the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343 Deluxe Trivia Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Adding a Time Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344 Adding Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347 Adding a Factoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349