Tải bản đầy đủ (.pdf) (30 trang)

Tài liệu Game Programming for Teens, Seconnd Edition P1 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (462.56 KB, 30 trang )


Game Programming
for Teens,
Second Edition
Maneesh Sethi
Publisher and General Manager,
Thomson Course Technology PTR:
Stacy L. Hiquet
Associate Director of Marketing:
Sarah O’Donnell
Manager of Editorial Services:
Heather Talbot
Marketing Manager:
Heather Hurley
Senior Acquisitions Editor:
Emi Smith
Senior Editor:
Mark Garvey
Marketing Coordinator:
Jordan Casey
Project Editor:
Jenny Davidson
Technical Reviewer:
Jonathan Harbour
Thomson Course Technology PTR
Editorial Services Coordinator:
Elizabeth Furbish
Copyeditor:
Kezia Endsley
Interior Layout Tech:
Jill Flores


Cover Designer:
Mike Tanamachi
CD-ROM Producer:
Brandon Penticuff
Indexer:
Sharon Shock
Proofreader:
Sara Gullion
© 2005 by Thomson Course Technology PTR. All rights reserved. No part
of this book may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording, or
by any information storage or retrieval system without written permis-
sion from Thomson Course Technology PTR, except for the inclusion of
brief quotations in a review.
The Premier Press and Thomson Course Technology PTR logo and
related trade dress are trademarks of Thomson Course Technology and
may not be used without written permission.
BlitzPlus, Blitz3D, BlitzBasic2D, and BlitzMax are trademarks of Blitz
Research, Ltd. Paint Shop Pro is a registered trademark of Corel Corpora-
tion. MilkShape 3D is a registered trademark of ChumbaLum sOft.
CoolEdit Pro is a registered trademark of Syntrillium Software Corporation.
All other trademarks are the property of their respective owners.
Important: Thomson Course Technology PTR cannot provide software
support. Please contact the appropriate software manufacturer’s techni-
cal support line or Web site for assistance.
Thomson Course Technology PTR and the author have attempted through-
out this book to distinguish proprietary trademarks from descriptive terms
by following the capitalization style used by the manufacturer.
Information contained in this book has been obtained by Thomson
Course Technology PTR from sources believed to be reliable. However,

because of the possibility of human or mechanical error by our sources,
Thomson Course Technology PTR, or others, the Publisher does not
guarantee the accuracy, adequacy, or completeness of any information
and is not responsible for any errors or omissions or the results obtained
from use of such information. Readers should be particularly aware of
the fact that the Internet is an ever-changing entity. Some facts may have
changed since this book went to press.
Educational facilities, companies, and organizations interested in multi-
ple copies or licensing of this book should contact the publisher for
quantity discount information. Training manuals, CD-ROMs, and por-
tions of this book are also available individually or can be tailored for
specific needs.
ISBN: 1-59200-834-8
Library of Congress Catalog Card Number: 2005923913
Printed in Canada
05 06 07 08 09 WC 10 9 8 7 6 5 4 3 2 1
Thomson Course Technology PTR,
a division of Thomson Course Technology
25 Thomson Place
Boston, MA 02210

For my parents, Neelam and Prabhjot
J
eez, there are so many people to thank. This feels like I’m accepting an Oscar™: I’m
afraid the band will start playing and usher me off the stage. Anyway, first of all thank
you André LaMothe for giving me a chance and taking me out to lunch. I will get you
back for that one day. Thank you everyone at Premier Press: my production editor Jenny
Davidson, my copy editor, Kezia Endsley, my acquisitions editor, Emi Smith, and my CD
editor, Brandon Penticuff.
Thanks go out to Adam Hepworth, who spent a lot of his “busy” day helping read my text

and correcting a lot of errors. To all of my brothers and sisters, Rachi, who offered her help
even though she was across an ocean, Nagina, whose love and support (and numerous
phone calls) helped carry me through, and Ramit, who gave me a person to look up to and
who helped me through the thick and thin (as well as giving me the chance to use
“abeyance” in a sentence). Thanks for being here and giving me support when I needed it.
To my mom and dad: I couldn’t have done this without you. I love you so much.
Finally, thanks to Edgar L. Ibarra (Feo) for his artwork and Thomas Stenbäck for his work
on the CD’s music. Also, to Ari Feldman, for allowing me to use his sprite library on the
CD.
Also, for contributing a demo program to the book, thanks to Jason Brasier and Edgar
Ibarra for Rockfall and Marcus “Eikon” Smith for Galaxiga.
And to everyone whose name I forgot, you know who you are. Thanks!
IV
Acknowledgments
M
ANEESH
S
ETHI
is a high school student in California who will be enrolled at Stanford
University in 2006. Maneesh has worked with Web design and development since he was
in fifth grade and was the founder and head designer of Standard Design, a Web site
design company. Maneesh has taught game programming on TechTV’s Call for Help and
at game programming conferences such as the XGDX. He is the author of Game
Programming for Teens (First Edition) and Web Design for Teens, both published by Course
PTR, and How to Succeed as a Lazy Student.
Besides game programming, Maneesh enjoys playing games (of course), sports such as
tennis and basketball, and of course, sleep. Learn more about Maneesh, as well as his
award-winning T-shirts and iPod sock case at www.maneeshsethi.com.
V
About the Author

VI
Contents
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xi
Part I: The Basics of BASIC . . . . . . . . . . . . . . . . . . .1
Chapter 1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
A Brief History of BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Installing BlitzPlus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
Windows and Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
The First Game: KONG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
Compiling the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
Chapter 2 Getting to Know BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Hello, World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Declaring Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Using Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Truth and Falsehood . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
If...Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Contents VII
If...Then…Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
Select…Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
The NOT Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
The Goto Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
A Text-Based Guessing Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39

Chapter 3 Loops, Functions, Arrays, and Types . . . . . . . . . . . . . . . . . .41
Understanding Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
For…Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
While…Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Repeat…Until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Understanding Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Scope Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
When to Use Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
Understanding Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Multi-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
Using Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Coordinate Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
For…Each…Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
Putting It All Together: Textanoid! . . . . . . . . . . . . . . . . . . . . . . . . . .79
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
Chapter 4 The Style Factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
Developing Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
White Space and Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . .96
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
Pre-Program Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
Main Program Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
Function Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
Function and Variable Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Naming Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
ContentsVIII
Part II: Getting Graphical . . . . . . . . . . . . . . . . . .105
Chapter 5 Beginning Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
Creating the Graphics Window . . . . . . . . . . . . . . . . . . . . . . . . . . . .107

Width and Height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
Color Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
[Mode] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
LoadImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
DrawImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
CreateImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
MaskImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
RGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128
Cls and ClsColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Chapter 6 Page Flipping and Pixel Plotting . . . . . . . . . . . . . . . . . . . .133
Page Flipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
SetBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
CreateImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
Locking and Unlocking Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
Lock/Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
ReadPixel()/ReadPixelFast() . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
WritePixel/WritePixelFast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
Using Buffers: A Paint Program . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
Main Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
Contents IX
Chapter 7 Basic Image Programming . . . . . . . . . . . . . . . . . . . . . . . . .181
Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181

Translating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
Parallaxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
TileBlock and TileImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Chapter 8 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
Using Bitmaps in Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
Making Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
Displaying Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247
Chapter 9 Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
Basic Collisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
Bounding Circles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Distance between Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Radii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
Bounding Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
Pixel-Imperfect Collisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
Pixel-Perfect Collisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
Part III: Completing the Puzzle . . . . . . . . . . . . . .275
Chapter 10 Handling Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
Handling the Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
KeyDown() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
KeyHit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
Mapping the Mouse to the Screen . . . . . . . . . . . . . . . . . . . . . . . . .294
Displaying the Mouse Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . .295
What Was That? Handling Mouse Key Presses . . . . . . . . . . . . .298
The Middle Mouse Wheel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .306
Handling Joystick Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
Chapter 11 Sounds and Music . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Loading Sounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
Listen Closely—Playing Sounds . . . . . . . . . . . . . . . . . . . . . . . . .316
Music . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
Channels and PlayMusic() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
Messing With ’Da Channels . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335
Chapter 12 Artificial Intelligence . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337
Random Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337
Creating a MilliSecs() Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . .342
Chasing and Evading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349
Chasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349
Evading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .354
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356
Chapter 13 The Final Frontier: Invaderz!!! . . . . . . . . . . . . . . . . . . . . . .359
Let’s Bust It: Planning the Game . . . . . . . . . . . . . . . . . . . . . . . . . . .359
Constants, Functions, and Types in Invaderz!!! . . . . . . . . . . . . . . . .362
Playing Invaderz!!! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .366
Epilogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368
Part IV: Appendixes . . . . . . . . . . . . . . . . . . . . . . .371
Appendix A Scan Code Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373
Appendix B Useful Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379
Blitz Basic Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379
General Game Programming Links . . . . . . . . . . . . . . . . . . . . . . . . .380
Appendix C What’s on the CD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382
Art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382
Sounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382

Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382
Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
ContentsX
XI
H
ey, reader. Thanks for buying my book. I am really thankful for it.
What is programming? Programming, according to Dictionary.com, is “a set of coded
instructions that enables a machine, especially a computer, to perform a desired sequence
of operations.” In other words, programming allows you to make your computer do what-
ever you want it to do. Programming is used in everything related to the computer, but
there are many distinct flavors of programming. This book teaches game programming.
Game programming is very different from the other types of programming. When you
turn on your computer, you often see static programs—programs that sit there and wait
for you to do something. Not with games. Games are running constantly, and they don’t
need the player to do anything to keep it running.
Of course, does this mean that game programming is a bit tougher than other styles of
programming? Yes and no. Although game programming can be difficult at times, this
book strives to turn the difficult into second nature. We use a language of programming
called BASIC, which, as you can probably guess, is pretty darn basic.
What’s in the Book?
This book is meant to be a guide to teach any beginner how to design and develop games.
Inside the book you will find a wealth of knowledge all written in mind to help you reach
the goal of making a game. Each chapter builds on the previous chapters and makes the
book seem like a staircase—you move up step by step. The last chapter helps use all of
your culminated knowledge in the production of a final game.
Introduction

×